[従来] 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

# Instantiate your model. This is just a regular PyTorch model that will be exported in the following steps.
model = SomeModel()
# Evaluate the model to switch some operations from training mode to inference.
model.eval()
# Create dummy input for the model. It will be used to run the model inside export function.
dummy_input = torch.randn(1, 3, 224, 224)
# Call the export function
torch.onnx.export(model, (dummy_input, ), 'model.onnx')

関連情報

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