Slide 1

Slide 1 text

Copyright © OPTiM Corp. All Right Reserved. 1 R&D 宮﨑 LibTorch / TorchScript ご紹介

Slide 2

Slide 2 text

Copyright © OPTiM Corp. All Right Reserved. 2 自己紹介 • 宮﨑 (みやざき) • R&D チーム • Engineer • 2019/04 新卒入社 • 好きな食べ物 • 豆腐ハンバーグ(伊東家の食卓) • スマート米(弊社)

Slide 3

Slide 3 text

Copyright © OPTiM Corp. All Right Reserved. 3  はじめに  PyTorchとは  TorchScript • TorchScriptとは • TorchScript example • おすすめのTorchScript開発の進め方  LibTorch • LibTorchとは • LibTorch example • おすすめのLibTorch開発の進め方  おわりに ご紹介する内容

Slide 4

Slide 4 text

Copyright © OPTiM Corp. All Right Reserved. 4 PyTorchの簡単な紹介から始まり、 TorchScript / LibTorchについて概要、example, おすすめの開発方針の順でご紹介していきます。 本スライドは後々公開されます。 説明していくPyTorchのバージョンは1.4.0ですが最新の1.6.0などでも大枠は変わりません。 はじめに

Slide 5

Slide 5 text

Copyright © OPTiM Corp. All Right Reserved. 5 Pythonで記述するDeep Learningフレームワーク  基本コンセプト • pythonicに書ける • 複雑な処理は隠蔽しあまりプログラミングに馴染みのない人でも扱いやすい • 研究の世界で高いシェアを誇る • 高速な実行速度などハイパフォーマンス • 追加実装や新環境適応を重視した開発方針  プロダクション • TorchScript: モデルをPythonから脱却させ最適化と並列性の確保 • LibTorch: C++ APIを用いて記述できる • NVIDIA GPUをはじめとした多様なハードウェアによるアクセラレーション  トピック • Ignite, Pytorch Lightningなど多数のラッパー、ライブラリなどに応用 • PFNがChainerからPyTorchへ移行 PyTorchとは

Slide 6

Slide 6 text

Copyright © OPTiM Corp. All Right Reserved. 6 Copyright © OPTiM Corp. All Right Reserved. TorchScript

Slide 7

Slide 7 text

Copyright © OPTiM Corp. All Right Reserved. 7 PyTorchのTensor処理(学習済みモデル含め)をPython非依存の環境で動作できるものに変換する機構(JITコンパイラ) もしくはその変換されたもの(インタープレッタ)  特徴 • PyTorchに備えられた機能の一つ • Pythonのサブセット(ミニ言語)、静的な型を持つ。 • Pythonに依存せず、 C++ / モバイル(iOS / Android)で実行できる。  トピック • プロダクション用。 Pythonよりも最適化・並列化がしやすい。 PyTorch開発者の理想的な筋書き 1. Python / PyTorchでプロトタイプ(モデルなど)を記述 2. プロトタイプをTorchScriptに変換 3. コンパイラやハードウェアを用いた最適化などの変換(TVM, TRT) • TorchScriptの改善・最適化は近年かなり重視して取り組んでる様子 TorchScriptとは Python実行環境 Python / C++ / iOS / Android PyTorch処理 TorchScript

Slide 8

Slide 8 text

Copyright © OPTiM Corp. All Right Reserved. 8 TorchScript example 1/3 基本機能: Trace 対象の処理にサンプルデータを流し それが実行される様子を観測させ 同様の処理を行うTorchScript(まねっこ)を生成させる

Slide 9

Slide 9 text

Copyright © OPTiM Corp. All Right Reserved. 9 TorchScript example 2/3 基本機能: Script 対象の処理を観測してTrace(まね)したものを生成させるのではなく 直接記述してしまう

Slide 10

Slide 10 text

Copyright © OPTiM Corp. All Right Reserved. 10 TorchScript example 3/3 上手くTraceできないケース:Python value固定化 Tensorから要素を取り出している この処理をTraceしようとすると・・・ 取り出した0番目の要素が Trace時の値で固定 <Tracerからの警告> Python valueはレコードできず、定数として取り扱われる Tensorの要素を取り出す処理はTraceして変換するのではなく TorchScriptとして直接記述する TorchScript内の記述ならば Python Valueを取り出しても問題ない 正しい結果が返されている (0番目の要素がTrace時の値で 固定されていない)

Slide 11

Slide 11 text

Copyright © OPTiM Corp. All Right Reserved. 11 TorchScript入門【PyTorchモデルを変換してC++/モバイルで実行できるモデルを手に入れる】 https://tech-blog.optim.co.jp/entry/2020/08/17/090000 TorchScriptについてはTECH BLOGにまとめています!

Slide 12

Slide 12 text

Copyright © OPTiM Corp. All Right Reserved. 12 1. PyTorchの学習済みモデルを用意する 2. PyTorchモデルをTorchScriptでTraceする際に起こるエラーを解消する • Traceする際はTraceした処理のテスト実行・もとのPyTorch処理を結果の比較などを行ってくれるので活用する • PyTorchのC++の拡張はTraceするためにTorchScriptに登録する・TorchScriptでTraceできる記述に直す、 などエラーメッセージなどを参考に対処する 3. 出力したTorchScript ModelをPyTorchで実行してみる • Traceしたモデルだけをを置き換えて実行できるため、他は同じ条件で実行できる • 結果が問題ないか確認する。元の結果とは完璧には一致せず多少の誤差はある • Traceしたサンプルデータではうまく動作するが 他のデータではうまく動作しないなどはありがちなのでしっかりテストする 4. 出力したTorchScript ModelをLibTorchで実行してみる • C++拡張をLibTorch環境の方でも用意する必要がある • Traceしたサンプルデータではうまく動作するが 他のデータではうまく動作しないなどはありがちなのでしっかりテストする 5. LibTorchで前処理・後処理を記述して一連の処理を繋げる おすすめのTorchScript開発の進め方(PyTorch -> LibTorchへの移行) PyTorchモデル作成 PyTorchモデルをTrace エラーメッセージや 公式ドキュメントなどを参考に エラーに対処 TorchScript Modelを入手 LibTorchで推論前後の処理を記述 モデルも LibTorch で作成可能

Slide 13

Slide 13 text

Copyright © OPTiM Corp. All Right Reserved. 13 Copyright © OPTiM Corp. All Right Reserved. LibTorch

Slide 14

Slide 14 text

Copyright © OPTiM Corp. All Right Reserved. 14 PyTorchのC++ API  コンセプト • PyTorchのプロダクション用に見据えて用意されたもの • LibTorch / TorchScriptはPyTorch -> ONNX -> Caffe2の置き換えを意図したもの • セマンティクスの保持、開発者が二つの分断されたフレームワークを扱わなくてよい  基本機能 • PyTorch同様、学習 / 推論、CPU実行 / GPU実行が可能 • Tensor, Module, Optimizer, Loss関数などPyTorchの主要な機能を搭載 • ATen / Autograd / C++ Frontend / C++ Extensions • C++なのでモバイルなどへの汎用性やマルチコアによる並列処理  トピック • 専用フォルダをダウンロード ⇒ CMakeで簡単にセットアップ • PyTorch Mobileでも内部ではLibTorchが動作 • Java APIもある。Android開発ではこちらを使うことになる • pybind11によるPythonバインドやTorchScriptによる変換などでPython環境への配置もサポート LibTorchとは

Slide 15

Slide 15 text

Copyright © OPTiM Corp. All Right Reserved. 15 LibTorch example 1/2 よく使う処理 cv::Matとtorch::Tensorの変換 Tensorを推論への使用に向けてdtypeの変換やCHWへの並べ替え

Slide 16

Slide 16 text

Copyright © OPTiM Corp. All Right Reserved. 16 LibTorch example 2/2 よく使う処理 TorchScriptによる推論と結果の取り出し torch::Tensorの基本操作

Slide 17

Slide 17 text

Copyright © OPTiM Corp. All Right Reserved. 17  PyTorchの主要な機能がC++で用意されているのでPyTorchとほぼ同じ要領で記述していけば良い • PyTorchで記述されたものをLibTorchで書き直す場合 • PyTorchで記述されるような前処理 / 推論 / 後処理はLibTorchでも記述できるため書き直しも容易 • 推論はTorchScriptを用いてPyTorchモデルを変換したものを用意しても良い  対応するPyTorchのドキュメントやソースコードを参照した方が良い場合も多い • LibTorchのドキュメントは整備されていない部分も多い • ソースコードにはコメントで詳しく説明がなされているので こっちがドキュメントと言っていいくらい • エディタで補完を効かせるのも有効  今はWEB上に様々なモデルの実装例があるので それらを参照すると良い  ABIには注意。OpenCVと併用する際は統一する  TorchScriptでLibTorch/C++拡張を使用している場合はC++でもtorch::RegisterOperatorsで登録する おすすめのLibTorch開発の進め方 PyTorch前処理 PyTorch推論 PyTorch後処理 LibTorch前処理 LibTorch推論 LibTorch後処理 TorchScript

Slide 18

Slide 18 text

Copyright © OPTiM Corp. All Right Reserved. 18  PyTorchをプロダクションに適用する手段であるLibTorch / TorchScriptについてご紹介しました  昨年の話になりますがPyTorch開発者もLibTorch / TorchScriptは重点的に開発を進めていくと言ってい たのでWatchする価値のある領域だと思います  TorchScriptの変換は難しく感じたかもしれませんがバージョンが上がるごとに改善が進んでいます  途中でご紹介させていただいたTECH BLOG(TorchScript入門【PyTorchモデルを変換してC++/モバイルで 実行できるモデルを手に入れる】)および本スライドをぜひ参考にしていただいてPyTorchをより幅広く活用 する一助になれば幸いです! おわりに

Slide 19

Slide 19 text

Copyright © OPTiM Corp. All Right Reserved. 19