Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

DeepLearningフレームワークChainerの学習済みモデルをスマートフォンにDeployする

1,391 views

Published on

2018/02/08 DeNA TechCon 2018 Casual Talk での発表資料です。

Published in: Technology
  • Be the first to comment

DeepLearningフレームワークChainerの学習済みモデルをスマートフォンにDeployする

  1. 1. DeepLearningフレームワークChainerの
 学習済みモデルをスマートフォンにDeployする AIシステム部 AI研究開発グループ 加藤 倫弘
  2. 2. 自己紹介 加藤 倫弘(かとう ともひろ) - DeNA システム&デザイン本部 
 AIシステム部 AI研究開発グループ - 2017年10月 DeNA入社 •コンピュータビジョン系のプロジェクトを担当しています 2 @_tkato_
  3. 3. 本日の発表内容 - モバイル端末でのDeep Learningに期待が高まる - クラウドで学習したモデルをモバイル端末にDeployしたい! - ChainerのモデルをAndroid端末で動かす1手段の紹介 3 クラウドで学習 モバイルで推論 • リアルタイム性 • プライバシー保護 • ネットワーク負荷削減 3 ※ 本日はiOSへのデプロイは触れませんが、同じ手順でできるはずです
  4. 4. 詳しい内容やソースコードはこちら 4 Chainer Advent Calendar 2017 | 19日目 Chainerで学習したモデルをONNX-ChainerとNNVM/TVMを使って Androidへデプロイする - Qiita https://qiita.com/tkat0/items/28d1cc3b5c2831d86663
  5. 5. Deep Learningフレームワークはモバイルでも動く? - 既存の多くはPythonで記述。サーバー向けGPUで高速に学習・推論 •そのままではモバイルで動かない or 動いても遅い - 最近はフレームワークのモバイル対応が進む •TensorFlow Lite、Caffe2など •モバイルCPU向けの最適化や事前に計算量の圧縮など行うものも モバイルで高速に動かすには、 計算量削減やフレームワークが ハードウェアの性能を引き出すことが重要 5
  6. 6. Chainerの学習済みモデルをモバイルへDeployしたい! -モデルの学習は 使い慣れたChainerのままが良い -今回はChainerからモバイル対応フレームワークへの変換方法を検討
 •Chainer •Preferred Networks(PFN)が開発 •フレームワークの中身を理解しやすく、
 新しい論文のアルゴリズムを追試する場合でもデバッグしやすい
 (個人の意見) 6 参考:https://chainer.org/
  7. 7. ChainerからモバイルへのDeployフロー - ChainerのモデルをONNX経由に変換し、
 NNVM/TVM上で実行する! DeepLearningフレームワーク間の 共通フォーマット モバイルデバイスなどサポートする DeepLearningの推論用エンジン 7
  8. 8. ONNX: Open Neural Network Exchange - DeepLearningフレームワーク間の共通フォーマット •AWS, Facebook, Microsoftにより、
 2017年12月にバージョン1.0が公開 •1ファイルにモデル定義とパラメータを保存 - 各フレームワークがONNXサポート中! •Caffe2, MXNet, CNTK, Pytorch, Chainer 他 •ONNX経由でフレームワーク間の相互変換が実現しそう •ただし、現状はフレームワークによりONNXサポート状況は様々 8参考:http://onnx.ai/ 専用のviewerもある
  9. 9. ONNX-Chainer - ChainerからONNXへexportするライブラリ(PFNが開発) •https://github.com/chainer/onnx-chainer 9 参考:https://qiita.com/mitmul/items/6a0c62be29b27b6b3fbe ONNXへの変換は
 実質1行
  10. 10. NNVM/TVM 10 参考:http://tvmlang.org/ 2. モデルの最適化 ・複数のレイヤーを合成など 3. ハードウェアに合わせた最適化 ・キャッシュ活用、並列化などPythonで指示 ONNX CoreML MxNet NNVM TVM CUDA OpenCL Metal LLVM … … 1. 複数のフレームワークからのインポートに対応 4. 各ハードウェア向けのソースコードを生成 ・Androidの場合はNDK向けのライブラリ生成 -様々なデバイスでの高速な推論を目指すOSSフレームワーク -開発元は、DMLC(Distributed (Deep) Machine Learning Community) -モデルと実装の最適化で、既存フレームワークより高速な結果も
  11. 11. Chainerの学習済みモデルをAndroidへDeployしてみた 1. Chainerの学習済みモデルをONNXへ変換 2. NNVMでONNXをインポート 3. TVMでAndroid端末のCPU/GPU向けにBuild & Deploy 11 デバイス Android (CPU) Android (GPU) macBook (GPU) 推論時間 [ms] 2070 630 80 Android端末:Snapdragon 820 搭載 MacBook Pro 13 inch (2017) ベンチマーク結果(物体検出モデル YOLOv2-tinyを利用) 参考:https://qiita.com/tkat0/items/28d1cc3b5c2831d86663
  12. 12. TVMによるリモートデプロイ - Pythonスクリプトから、Androidでのモデル実行ができる •最適化条件など変えたベンチマークが簡単にできるため
 デバイスに最適なモデルを試行錯誤する効率が良い 12 参考:http://tvmlang.org/2017/11/08/android-rpc-introduction.html 1. Androidへのモデル送信 2. Androidでのベンチマーク実行 3. 計算結果の取得 ビルド済みライブラリ 入力データ 出力データ 専用の通信アプリ(TVMランタイム)
 を事前にインストール Wi-Fi LAN
  13. 13. Androidアプリへの組み込み - TVM4J •TVMのJavaフロントエンド(公式が提供) •事前ビルドした共有ライブラリ(モデル定義)をロード、実行 •JavaのArrayとTVM用のNDArrayを相互変換するモジュールも提供 13参考:https://github.com/dmlc/tvm/blob/master/jvm/README.md
  14. 14. さらに高速化するには? サービス導入を踏まえると、基本は速いほうが良さそうだ - DeepLearningモデルの軽量化 - NNVMでのモデル最適化 - TVMでの実装最適化 • 今回試したCPU/GPUへの最適化は現状 未サポート • 現在はCUDA, x86, AMDなど一部のデバイスに最適化 1 14
  15. 15. TVMにおける高速化を試みる - モデルの各レイヤーでGPUスレッド数を調整 → 1.3倍高速化 - キャッシュ活用なども行えば、さらに速くなりそう - 最適化はPython記述できるため、GPUカーネル手書きより楽 - リモートデプロイができるので試行錯誤しやすい 1 15 •reorder: ループの順序入れ替え •fuse: 複数のループを1つにまとめる •tile: ループを2次元に分割する 参考:http://docs.tvmlang.org/tutorials/language/schedule_primitives.html 最適化の記述(schedule primitives)の例
  16. 16. まとめ・所感 - Chainerの学習済みモデルをモバイル端末で動かしたい - Chainer → ONNX → NNVM/TVM の手順を紹介 • モバイルのCPU/GPUで動作することができた 16 ご清聴ありがとうございました 研究開発側でのモデル検討から、
 事業応用へ向けたデバイス組み込みまでスピーディーに試行できそう!

×