OpenVINO IR への変換

IR (中間表現) は、.xml ファイルと .bin ファイルで構成される OpenVINO 独自の形式です。パフォーマンス向上のためモデルを OpenVINO IR に変換します。

モデルの変換

さまざまなモデル形式でこれらのメソッドを使用するコード例を次に示します。

  • convert_model() メソッド:

    これは PyTorch モデルに適用できる唯一の方法です。

    サポートされる形式のリスト:
    • Python オブジェクト:

      • torch.nn.Module

      • torch.jit.ScriptModule

      • torch.jit.ScriptFunction

    model = torchvision.models.resnet50(weights='DEFAULT')
    ov_model = convert_model(model)
    compiled_model = core.compile_model(ov_model, "AUTO")
    

    変換の詳細については、このトピックに関連するガイドチュートリアルを参照してください。

  • convert_model() メソッド:

    convert_model() メソッドではより詳細な制御が可能になり、ov.Model の追加調整ができるようになります。read_model() メソッドと compile_model() メソッドは利便性がありますが、そのような機能はありません。ov.Model を使用すると、最適化、コンパイル、推論の実行を選択するか、後で使用するためファイルをシリアル化するかを選択できます。

    サポートされる形式のリスト:
    • ファイル:

      • SavedModel - <SAVED_MODEL_DIRECTORY> または <INPUT_MODEL>.pb

      • Checkpoint - <INFERENCE_GRAPH>.pb または <INFERENCE_GRAPH>.pbtxt

      • MetaGraph - <INPUT_META_GRAPH>.meta

    • Python オブジェクト:

      • tf.keras.Model

      • tf.keras.layers.Layer

      • tf.Module

      • tf.compat.v1.Graph

      • tf.compat.v1.GraphDef

      • tf.function

      • tf.compat.v1.session

      • tf.train.checkpoint

    ov_model = convert_model("saved_model.pb")
    compiled_model = core.compile_model(ov_model, "AUTO")
    

    変換の詳細については、このトピックに関連するガイドチュートリアルを参照してください。

  • read_model()compile_model() メソッド:

    サポートされる形式のリスト:
    • ファイル:

      • SavedModel - <SAVED_MODEL_DIRECTORY> または <INPUT_MODEL>.pb

      • Checkpoint - <INFERENCE_GRAPH>.pb または <INFERENCE_GRAPH>.pbtxt

      • MetaGraph - <INPUT_META_GRAPH>.meta

    ov_model = read_model("saved_model.pb")
    compiled_model = core.compile_model(ov_model, "AUTO")
    

    推論を実行するガイドについては、OpenVINO™ をアプリケーションと統合するを参照してください。

  • compile_model() メソッド:

    サポートされる形式のリスト:
    • ファイル:

      • SavedModel - <SAVED_MODEL_DIRECTORY> または <INPUT_MODEL>.pb

      • Checkpoint - <INFERENCE_GRAPH>.pb または <INFERENCE_GRAPH>.pbtxt

      • MetaGraph - <INPUT_META_GRAPH>.meta

    ov::CompiledModel compiled_model = core.compile_model("saved_model.pb", "AUTO");
    

    推論を実行するガイドについては、OpenVINO™ をアプリケーションと統合するを参照してください。

  • compile_model() メソッド:

    サポートされる形式のリスト:
    • ファイル:

      • SavedModel - <SAVED_MODEL_DIRECTORY> または <INPUT_MODEL>.pb

      • Checkpoint - <INFERENCE_GRAPH>.pb または <INFERENCE_GRAPH>.pbtxt

      • MetaGraph - <INPUT_META_GRAPH>.meta

    ov_compiled_model_t* compiled_model = NULL;
    ov_core_compile_model_from_file(core, "saved_model.pb", "AUTO", 0, &compiled_model);
    

    推論を実行するガイドについては、OpenVINO™ をアプリケーションと統合するを参照してください。

ovc コマンドライン・ツールを使用して、モデルを IR に変換できます。取得された IR は、read_model() によって読み取られ、推論できます。

ovc <INPUT_MODEL>.pb

変換の詳細についてはこちらを参照してください

  • convert_model() メソッド:

    convert_model() メソッドではより詳細な制御が可能になり、ov.Model の追加調整ができるようになります。read_model() メソッドと compile_model() メソッドは利便性がありますが、そのような機能はありません。ov.Model を使用すると、最適化、コンパイル、推論の実行を選択するか、後で使用するためファイルをシリアル化するかを選択できます。

    サポートされる形式のリスト:
    • ファイル:

      • <INPUT_MODEL>.tflite

    ov_model = convert_model("<INPUT_MODEL>.tflite")
    compiled_model = core.compile_model(ov_model, "AUTO")
    

    変換の詳細については、このトピックに関連するガイドチュートリアルを参照してください。

  • read_model() メソッド:

    サポートされる形式のリスト:
    • ファイル:

      • <INPUT_MODEL>.tflite

    ov_model = read_model("<INPUT_MODEL>.tflite")
    compiled_model = core.compile_model(ov_model, "AUTO")
    
  • compile_model() メソッド:

    サポートされる形式のリスト:
    • ファイル:

      • <INPUT_MODEL>.tflite

    compiled_model = core.compile_model("<INPUT_MODEL>.tflite", "AUTO")
    

    推論を実行するガイドについては、OpenVINO™ をアプリケーションと統合するを参照してください。

  • compile_model() メソッド:

    サポートされる形式のリスト:
    • ファイル:

      • <INPUT_MODEL>.tflite

    ov::CompiledModel compiled_model = core.compile_model("<INPUT_MODEL>.tflite", "AUTO");
    

    推論を実行するガイドについては、OpenVINO™ をアプリケーションと統合するを参照してください。

  • compile_model() メソッド:

    サポートされる形式のリスト:
    • ファイル:

      • <INPUT_MODEL>.tflite

    ov_compiled_model_t* compiled_model = NULL;
    ov_core_compile_model_from_file(core, "<INPUT_MODEL>.tflite", "AUTO", 0, &compiled_model);
    

    推論を実行するガイドについては、OpenVINO™ をアプリケーションと統合するを参照してください。

  • convert_model() メソッド:

    mo コマンドライン・ツールを使用して、モデルを IR に変換できます。取得された IR は、read_model() によって読み取られ、推論できます。

    サポートされる形式のリスト:
    • ファイル:

      • <INPUT_MODEL>.tflite

    ovc <INPUT_MODEL>.tflite
    

    変換の詳細についてはこちらを参照してください

  • convert_model() メソッド:

    convert_model() メソッドではより詳細な制御が可能になり、ov.Model の追加調整ができるようになります。read_model() メソッドと compile_model() メソッドは利便性がありますが、そのような機能はありません。ov.Model を使用すると、最適化、コンパイル、推論の実行を選択するか、後で使用するためファイルをシリアル化するかを選択できます。

    サポートされる形式のリスト:
    • ファイル:

      • <INPUT_MODEL>.onnx

    ov_model = convert_model("<INPUT_MODEL>.onnx")
    compiled_model = core.compile_model(ov_model, "AUTO")
    

    変換の詳細については、このトピックに関連するガイドチュートリアルを参照してください。

  • read_model() メソッド:

    サポートされる形式のリスト:
    • ファイル:

      • <INPUT_MODEL>.onnx

    ov_model = read_model("<INPUT_MODEL>.onnx")
    compiled_model = core.compile_model(ov_model, "AUTO")
    
  • compile_model() メソッド:

    サポートされる形式のリスト:
    • ファイル:

      • <INPUT_MODEL>.onnx

    compiled_model = core.compile_model("<INPUT_MODEL>.onnx", "AUTO")
    

    推論を実行するガイドについては、OpenVINO™ をアプリケーションと統合するを参照してください。

  • compile_model() メソッド:

    サポートされる形式のリスト:
    • ファイル:

      • <INPUT_MODEL>.onnx

    ov::CompiledModel compiled_model = core.compile_model("<INPUT_MODEL>.onnx", "AUTO");
    

    推論を実行するガイドについては、OpenVINO™ をアプリケーションと統合するを参照してください。

  • compile_model() メソッド:

    サポートされる形式のリスト:
    • ファイル:

      • <INPUT_MODEL>.onnx

    ov_compiled_model_t* compiled_model = NULL;
    ov_core_compile_model_from_file(core, "<INPUT_MODEL>.onnx", "AUTO", 0, &compiled_model);
    

    変換の詳細についてはこちらを参照してください

  • convert_model() メソッド:

    mo コマンドライン・ツールを使用して、モデルを IR に変換できます。取得された IR は、read_model() によって読み取られ、推論できます。

    サポートされる形式のリスト:
    • ファイル:

      • <INPUT_MODEL>.onnx

    ovc <INPUT_MODEL>.onnx
    

    変換の詳細についてはこちらを参照してください

  • convert_model() メソッド:

    convert_model() メソッドではより詳細な制御が可能になり、ov.Model の追加調整ができるようになります。read_model() メソッドと compile_model() メソッドは利便性がありますが、そのような機能はありません。ov.Model を使用すると、最適化、コンパイル、推論の実行を選択するか、後で使用するためファイルをシリアル化するかを選択できます。

    サポートされる形式のリスト:
    • ファイル:

      • <INPUT_MODEL>.pdmodel

    • Python オブジェクト:

      • paddle.hapi.model.Model

      • paddle.fluid.dygraph.layers.Layer

      • paddle.fluid.executor.Executor

    ov_model = convert_model("<INPUT_MODEL>.pdmodel")
    compiled_model = core.compile_model(ov_model, "AUTO")
    

    変換の詳細については、このトピックに関連するガイドチュートリアルを参照してください。

  • read_model() メソッド:

    サポートされる形式のリスト:
    • ファイル:

      • <INPUT_MODEL>.pdmodel

    ov_model = read_model("<INPUT_MODEL>.pdmodel")
    compiled_model = core.compile_model(ov_model, "AUTO")
    
  • compile_model() メソッド:

    サポートされる形式のリスト:
    • ファイル:

      • <INPUT_MODEL>.pdmodel

    compiled_model = core.compile_model("<INPUT_MODEL>.pdmodel", "AUTO")
    

    推論を実行するガイドについては、OpenVINO™ をアプリケーションと統合するを参照してください。

  • compile_model() メソッド:

    サポートされる形式のリスト:
    • ファイル:

      • <INPUT_MODEL>.pdmodel

    ov::CompiledModel compiled_model = core.compile_model("<INPUT_MODEL>.pdmodel", "AUTO");
    

    推論を実行するガイドについては、OpenVINO™ をアプリケーションと統合するを参照してください。

  • compile_model() メソッド:

    サポートされる形式のリスト:
    • ファイル:

      • <INPUT_MODEL>.pdmodel

    ov_compiled_model_t* compiled_model = NULL;
    ov_core_compile_model_from_file(core, "<INPUT_MODEL>.pdmodel", "AUTO", 0, &compiled_model);
    

    推論を実行するガイドについては、OpenVINO™ をアプリケーションと統合するを参照してください。

  • convert_model() メソッド:

    mo コマンドライン・ツールを使用して、モデルを IR に変換できます。取得された IR は、read_model() によって読み取られ、推論できます。

    サポートされる形式のリスト:
    • ファイル:

      • <INPUT_MODEL>.pdmodel

    ovc <INPUT_MODEL>.pdmodel
    

    変換の詳細についてはこちらを参照してください

アプリケーションに最適なワークフローを選択するには、モデルの準備をお読みください。

変換パラメーターでサポートされているすべての変換オプションのリストを確認できます。

IR 変換の利点

IR に保存して最初の推論のレイテンシーを改善
最初の推論のレイテンシーが重要である場合、フレームワーク・モデルをロードするたびに変換するのではなく (サイズによっては時間がかかる場合があります)、一度のみ行うほうが良いでしょう。これには、save_model を使用してモデルを OpenVINO IR として保存し、必要に応じて read_model を使用してロードします。これにより、変換ステップを回避できるため、モデルが最初の推論を行う時間を短縮できます。
FP16 で IR に保存してスペースを節約
FP16 を使用するとサイズが約 50% 削減されるため、ストレージスペースを節約でき、Llama2-7B などの大型モデルでは特に有益です。
推論コード内の大きな依存関係を回避するために IR に保存
TensorFlow や PyTorch などのフレームワークは、大きな依存関係 (数ギガバイト) を持つ傾向があり、すべての推論環境でそれらを保持する十分なスペースがあるとは限りません。
モデルを OpenVINO IR に変換すると、OpenVINO が唯一の依存関係である環境でモデルを使用できるため、必要なディスクスペースが大幅に減少します。
OpenVINO を利用して直接ロードしてコンパイルすると、通常、モデルをソース・フレームワークにロードして変換後にコンパイルするよりも、使用するランタイムメモリーが少なくなります。

OpenVINO IR にモデルを一度保存し、それを繰り返し使用する方法を示す例を示します。

# Run once

import openvino as ov
import tensorflow as tf

# 1. Convert model created with TF code
model = tf.keras.applications.resnet50.ResNet50(weights="imagenet")
ov_model = ov.convert_model(model)

# 2. Save model as OpenVINO IR
ov.save_model(ov_model, 'model.xml', compress_to_fp16=True) # enabled by default

# Repeat as needed

import openvino as ov

# 3. Load model from file
core = ov.Core()
ov_model = core.read_model("model.xml")

# 4. Compile model from memory
compiled_model = core.compile_model(ov_model)