web-dev-qa-db-ja.com

PyTorchのトーチスクリプトとは何ですか?

PyTorchのドキュメントが Torch Scripts と呼ばれるものを公開していることがわかりました。しかし、私は知りません:

  • いつ使用する必要がありますか?
  • それらはどのように使用されるべきですか?
  • それらの利点は何ですか?
22
Andrew Naguib

トーチスクリプトは、PyTorch ジャストインタイムコンパイラ を使用する2つのモードの1つであり、もう1つは トレース です。利点はリンクされたドキュメントで説明されています:

Torch Scriptは、PyTorchコードからシリアライズ可能で最適化可能なモデルを作成する方法です。 Torch Scriptで記述されたコードは、Pythonプロセスから保存して、Python依存関係のないプロセスにロードできます。

上記の引用は、実際にはスクリプトとトレースの両方に当てはまります。そう

  1. C++ネイティブモジュールであるLibTorchを介して、モデルをシリアル化し、後でPythonの外部で実行できるようになります。これにより、DLモデルをモバイルやIoTなどのさまざまな本番環境に埋め込むことができます。 C++へのモデルのエクスポートに関する公式ガイド here があります。
  2. PyTorchは、jit可能なモジュールをインタープリターとして実行するのではなく、コンパイルできるため、トレーニング中と推論中の両方で、さまざまな最適化とパフォーマンスの向上が可能になります。これは、開発と生産に等しく役立ちます。

具体的には、トーチスクリプトに関して、トレースと比較して、詳細に指定されたPythonのサブセット here に準拠している場合、PyTorchでコンパイルできます。通常のnn.Moduleサブクラスをトレースする代わりにTorch Scriptモジュールを記述する方が手間がかかりますが、特にifステートメントやforループなどのフロー制御など、トレースに関するいくつかの追加機能が可能になります。トレースでは、このようなフロー制御を「定数」として扱います。つまり、モジュールにif model.training句があり、training=Trueでトレースすると、trainingを変更しても、常にこのように動作します変数をFalseに変更します。

最初の質問に答えるために、モデルをPythonの外部にデプロイする場合はjitを使用する必要があります。それ以外の場合should追加の開発作業を犠牲にして実行パフォーマンスを向上させたい場合は、jitを使用します(すべてのモデルがjitに直接準拠できるわけではないため)。特に、コードがjitステートメントなどの一部の機能に依存しているため、コードをトレースのみでifedできない場合は、トーチスクリプトを使用する必要があります。人間工学を最大限に活用するには、ケースバイケースで 2つを混合 を使用することをお勧めします。

最後に、howを使用する必要がある場合は、すべてのドキュメントとチュートリアルリンクを参照してください。

28
Jatentaki