モデルの準備#
OpenVINO は次のモデル形式をサポートしています:
PyTorch
TensorFlow
TensorFlow Lite
ONNX
PaddlePaddle
OpenVINO IR
モデルを取得する最も簡単な方法は、Kaggle、Hugging Face、および Torchvision models モデルなどのオンライン・データベースからモデルをダウンロードすることです。これには、2 つのオプションがあります:
モデル変換をスキップし、TensorFlow、TensorFlow Lite、ONNX、または PaddlePaddle ソース形式から直接推論を実行します。変換は引き続き実行されますが、それは内部的に自動で行われます。このオプションは便利ですが、パフォーマンスと安定性が十分でなく、最適化オプションも少なくなります。
PyTorch モデルの場合、専用の torch.compile 実装を使用できます。
明示的にモデルを OpenVINO IR に変換します。このアプローチは可能な限り最良の結果を提供し、特に実稼働対応のソリューションに推奨されるアプローチです。場合によっては、一次推論のレイテンシーを最小限に抑え、モデルの最適化を実行し、ドライブ上のスペースを節約するため、モデルをこの形式で保存することを検討してください。明示的な変換は次の 2 つの方法で行われます:
Python API 関数 (
openvino.convert_model
およびopenvino.save_model
)ovc コマンドライン・ツール。
OpenVINO IR (
.xml
ファイルと.bin
ファイルのセット) として保存すると、モデルを最大のパフォーマンスでデプロイできます。OpenVINO 推論向けにすでに最適化されているため、遅延なく読み取り、コンパイル、そして推論を行うことができます。
注
OpenVINO 2023.1 以前のモデル・トランスフォーメーション API は廃止されました。既存および新規プロジェクトは、openvino.tools.mo.convert_model
または mo
CLI ツールと完全な下位互換性がないことに留意して、新しいソリューションに移行することを推奨します。詳細については、モデル・トランスフォーメーション API 移行ガイドを参照してください。
PyTorch モデルでは、Python API が唯一の変換オプションです。
異なるモデル表現#
OpenVINO のモデルは、ディスクに保存される、ロードされるがコンパイルされない (ov.Model
)、およびロードされてコンパイルされる (ov.CompiledModel
) の 3 つの方法で表現できます。
ov.Model
) は、ファイルを解析するか、既存のフレームワーク・オブジェクトを変換することでメモリー内に作成されます。このオブジェクトは特定のデバイスに接続されていないため、推論を行うことはできませんが、入力の再形成、量子化の適用、モデルをコンパイルする前の前処理ステップの追加などのカスタマイズが可能です。ov.CompiledModel
) に 1 つ以上のデバイスが指定されている状態であり、デバイスの最適化が可能になり、推論を実行できます。各機能の詳細については、OpenVINO ワークフローのページを参照してください。
Python でモデルを変換する: convert_model
#
Python のモデル・トランスフォーメーション API は、openvino.convert_model
関数を使用して、特定のモデルを openvino.Model オブジェクトに変換しメモリーにロードします。openvino.save_model
を使用してドライブに保存するか、保存する前に NNCF を使用してさらに最適化することができるようになりました。
最も人気のあるパブリック・リポジトリーのモデルで openvino.convert_model
を使用する方法をご覧ください:
import openvino as ov
import torch
from torchvision.models import resnet50
model = resnet50(weights='DEFAULT')
# input_data を準備
input_data = torch.rand(1, 3, 224, 224)
ov_model = ov.convert_model(model, example_input=input_data)
###### オプション 1: OpenVINO IR へ保存:
# 後で使用できるようにモデルを OpenVINO IR に保存
ov.save_model(ov_model, 'model.xml')
###### オプション 2: OpenVINO を使用してコンパイルおよび推論:
# モデルをコンパイル
compiled_model = ov.compile_model(ov_model)
# 推論を実行
result = compiled_model(input_data)
from transformers import BertTokenizer, BertModel
tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')
model = BertModel.from_pretrained("bert-base-uncased")
text = "Replace me by any text you'd like."
encoded_input = tokenizer(text, return_tensors='pt')
import openvino as ov
ov_model = ov.convert_model(model, example_input={**encoded_input})
###### オプション 1: OpenVINO IR へ保存:
# 後で使用できるようにモデルを OpenVINO IR に保存
ov.save_model(ov_model, 'model.xml')
###### オプション 2: OpenVINO を使用してコンパイルおよび推論:
# モデルをコンパイル
compiled_model = ov.compile_model(ov_model)
# HF トークナイザーまたは独自トークナイザーを使用して input_data を準備
# 簡素化のため、ここでは encoded_input を再利用
# 推論を実行
result = compiled_model({**encoded_input})
import tensorflow as tf
import openvino as ov
tf_model = tf.keras.applications.ResNet50(weights="imagenet")
ov_model = ov.convert_model(tf_model)
###### オプション 1: OpenVINO IR へ保存:
# 後で使用できるようにモデルを OpenVINO IR に保存
ov.save_model(ov_model, 'model.xml')
###### オプション 2: OpenVINO を使用してコンパイルおよび推論:
# モデルをコンパイル
compiled_model = ov.compile_model(ov_model)
# input_data を準備
import numpy as np
input_data = np.random.rand(1, 224, 224, 3)
# 推論を実行
result = compiled_model(input_data)
import tensorflow as tf
import tensorflow_hub as hub
import openvino as ov
model = tf.keras.Sequential([
hub.KerasLayer("https://tfhub.dev/google/imagenet/mobilenet_v1_100_224/classification/5") ])
# 入力形状についてはモデルページをご確認:
https://tfhub.dev/google/imagenet/mobilenet_v1_100_224/classification/5
model.build([None, 224, 224, 3])
ov_model = ov.convert_model(model)
###### オプション 1: # OpenVINO IR に保存
ov.save_model(ov_model, 'model.xml')
###### オプション 2: # OpenVINO によるコンパイルと推論:
compiled_model = ov.compile_model(ov_model)
# input_data を準備
import numpy as np
input_data = np.random.rand(1, 224, 224, 3)
# 推論を実行
result = compiled_model(input_data)
import onnx
model = onnx.hub.load("resnet50")
onnx.save(model, 'resnet50.onnx')
# モデルに一時ファイルを使用
import openvino as ov
ov_model = ov.convert_model('resnet50.onnx')
###### オプション 1: OpenVINO IR へ保存:
# 後で使用できるようにモデルを OpenVINO IR に保存
ov.save_model(ov_model, 'model.xml')
###### オプション 2: OpenVINO を使用してコンパイルおよび推論:
# モデルをコンパイル
compiled_model = ov.compile_model(ov_model)
# input_data を準備
import numpy as np
input_data = np.random.rand(1, 3, 224, 224)
# 推論を実行
result = compiled_model(input_data)
モデルの保存 (オプション 1) は、デプロイメント外部の別のステップで使用されます。提供されるファイルは最終的なソフトウェア・ソリューションで使用され、依存関係が減り、モデルの読み込みが高速化されるため、パフォーマンスが最大化されます。
モデルのコンパイル (オプション 2) は、既存の Python 推論アプリケーションでフレームワーク・ベースのコードから OpenVINO ベースのコードに素早く切り替える便利な方法を提供します。変換されたモデルは IR には保存されませんが、コンパイルされ、同じアプリケーション内で推論に使用されます。
モデルを OpenVINO IR に保存する前に、より効率良い推論とより小さいモデルを実現するために、トレーニング後の最適化を検討してください。
CLI でモデルを変換する: ovc
#
ovc
は、openvino.convert_model
と openvino.save_model
の機能を組み合わせたコマンドラインのモデル・コンバーターで、OpenVINO IR への保存で同じパラメーター・セットが使用されると、全く同じ結果が得られます。ファイルを OpenVINO IR に変換し、最終的な推論アプリケーションで読み取り、コンパイル、実行できるようにします。
注
PyTorch モデルは ovc
で変換できません。代わりに openvino.convert_model
を使用してください。
関連情報#
次の記事では、ソースのモデルタイプに応じてモデルを取得して準備する方法を詳しく説明しています:
最高のモデル推論のパフォーマンスとコンパクトな OpenVINO IR 表現を実現するには、次の手順に従います:
従来のトランスフォーメーション API (mo
または openvino.tools.mo.convert_model
) を使用している場合、次の資料を参照してください。