[従来] PyTorch モデルの変換#

危険

ここで説明されているコードは非推奨になりました。従来のソリューションの適用を避けるため使用しないでください。下位互換性を確保するためにしばらく保持されますが、最新のアプリケーションでは使用してはなりません

このガイドでは、非推奨となった変換方法について説明します。新しい推奨方法に関するガイドは、PyTorch モデルの変換の記事に記載されています。

このページでは、モデルを PyTorch 形式から OpenVINO IR 形式に変換する方法について説明します。

変換は、OpenVINO API で推論を実行するために必要な手順です。torch.compile 機能を使用して、PyTorch フレームワークの下で OpenVINO を操作することを選択した場合は、これは必要ありません。

PyTorch フロントエンドを使用した PyTorch モデルの変換#

PyTorch モデルを OpenVINO IR 形式に変換するには、OVC API (以前のツール MO に代わって) を使用します。これには、convert_model() メソッドを呼び出します:

import torchvision 
import torch 
from openvino.tools.mo import convert_model 

model = torchvision.models.resnet50(weights='DEFAULT') 
ov_model = convert_model(model)

次の PyTorch モデル形式がサポートされています:

  • torch.nn.Module

  • torch.jit.ScriptModule

  • torch.jit.ScriptFunction

特定の PyTorch モデルを変換するには、モデルのトレースが必要になる場合があります。これには、example_input パラメーターを設定します。次に例を示します:

import torchvision 
import torch 
from openvino.tools.mo import convert_model 

model = torchvision.models.resnet50(weights='DEFAULT') 
ov_model = convert_model(model, example_input=torch.randn(1, 3, 100, 100))

example_input は次の形式を受け入れます:

  • openvino.runtime.Tensor

  • torch.Tensor

  • np.ndarray

  • list またはテンソルを含む tuple (openvino.runtime.Tensor / torch.Tensor / np.ndarray)

  • dictionary ここで、key は入力名、value はテンソル (openvino.runtime.Tensor / torch.Tensor / np.ndarray)

場合によっては、convert_model は動的ランクまたは動的タイプを持つモデルの入力を生成します。このようなモデルは、推論用に選択されたハードウェアでサポートされていない可能性があります。この問題を回避するには、convert_modelinput 引数を使用します。詳細については、Python オブジェクトとして表現されたモデルの変換を参照してください。

重要

convert_model() メソッドは、後で使用するため最適化、コンパイル、またはファイルに保存できる ov.Model を返します。

PyTorch モデルを ONNX 形式にエクスポート#

PyTorch モデルを ONNX にエクスポートして、OpenVINO IR に変換することもできます。この方法で PyTorch モデルを変換してデプロイするには、次の手順に従います:

  1. PyTorch モデルを ONNX にエクスポート

  2. ONNX モデルを変換して、トレーニングされたネットワーク・トポロジー、重み、およびバイアス値に基づいてモデルの最適化された中間表現を生成します。

PyTorch モデルは Python で定義されます。それらをエクスポートするには、torch.onnx.export() メソッドを使用します。モデルを評価またはテストするコードは通常、コードとともに提供されており、初期化とエクスポートに使用できます。ONNX へのエクスポートはこのプロセスでは重要ですが、PyTorch フレームワークでカバーされているため、ここでは詳しく説明しません。詳細については、ONNX 形式への PyTorch モデルのエクスポートガイドを参照してください。

PyTorch モデルをエクスポートするには、モデルを torch.nn.Module クラスのインスタンスとして取得し、export 関数を呼び出す必要があります。

import torch 
# モデルをインスタンス化。これは、次の手順でエクスポートされる通常の PyTorch モデルです。 
model = SomeModel() 
# モデルを評価して、一部の操作をトレーニング・モードから推論に切り替えます。 
model.eval() 
# モデルのダミー入力を作成します。エクスポート関数内でモデルを実行するのに使用されます。 
dummy_input = torch.randn(1, 3, 224, 224) 
# エクスポート関数を呼び出します 
torch.onnx.export(model, (dummy_input, ), 'model.onnx')

関連情報#

特定の PyTorch モデルを変換するための段階的な手順を提供するチュートリアルについては、モデル変換チュートリアルのページを参照してください。いくつかの例を示します: