モデルの準備#

OpenVINO は次のモデル形式をサポートしています:

  • PyTorch

  • TensorFlow

  • TensorFlow Lite

  • ONNX

  • PaddlePaddle

  • OpenVINO IR

モデルを取得する最も簡単な方法は、KaggleHugging 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 つの方法で表現できます。

ディスクに保存
ニューラル・ネットワークを完全に表す、ドライブに保存された 1 つ以上のファイル。異なるモデル形式は異なる方法で保存されます。例:
OpenVINO IR: .xml ファイルと .bin ファイルのペア
ONNX: .onnx ファイル
TensorFlow: .pb ファイルと 2 つのサブフォルダー、または .pb ファイルのみを含むディレクトリー
TensorFlow Lite: .tflite ファイル
PaddlePaddle: .pdmodel ファイル
ロードされているがコンパイルされていない
モデル・オブジェクト (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_modelopenvino.save_model の機能を組み合わせたコマンドラインのモデル・コンバーターで、OpenVINO IR への保存で同じパラメーター・セットが使用されると、全く同じ結果が得られます。ファイルを OpenVINO IR に変換し、最終的な推論アプリケーションで読み取り、コンパイル、実行できるようにします。

PyTorch モデルは ovc で変換できません。代わりに openvino.convert_model を使用してください。

関連情報#

次の記事では、ソースのモデルタイプに応じてモデルを取得して準備する方法を詳しく説明しています:

最高のモデル推論のパフォーマンスとコンパクトな OpenVINO IR 表現を実現するには、次の手順に従います:

従来のトランスフォーメーション API (mo または openvino.tools.mo.convert_model) を使用している場合、次の資料を参照してください。