ONNX形式に変換されたモデルの展開

最終更新: 2025年2月21日
ONNX形式に変換されたモデルの展開

PyTorch または TensorFlow から、異なる形式で保存され、 Open Neural Network ExchangeONNX )形式に変換された機械学習モデルを展開および推論することができます。 ONNX ディープラーニングモデルを表現するためのオープンソース形式です。 開発者は、 ONNX 形式を使用して、 PyTorchTensorFlow などの1つのフレームワークでモデルをトレーニングし、それをエクスポートして、異なるパフォーマンス特性を持つ別の環境で実行することができます。 ONNX 形式は、機械学習モデルを ONNX に変換し、 ONNX ランタイムを使用して推論を行うための強力なソリューションを提供します。

モデルを ONNX の実行環境に変換するメリット

モデルを ONNX の実行環境に変換すると、特に機械学習やディープラーニングのアプリケーションでは、いくつかの利点があります。 モデルを ONNX ランタイムに変換する利点の一部は以下の通りです

  • クロスプラットフォームの互換性ONNX は機械学習モデルを表現するための標準フォーマットを提供しており、 PyTorch や Tensorflow などの異なるフレームワークにモデルを展開しやすくなります。 1つのフレームワークでモデルをトレーニングし、 ONNX ランタイムをサポートする別のフレームワークにデプロイすることができます。

  • パフォーマンスの向上ONNX ランタイムは、グラフ最適化など、さまざまなハードウェアおよびソフトウェア固有の最適化を適用することで、推論用のモデルを最適化します。 また、CPUやGPUなど多様なハードウェア上での実行をサポートし、リソースの効率的な利用を保証する。

  • 相互運用性ONNX は、 PyTorch,、 TensorFlow,、scikit-learnなどのモデルを1つのフレームワークでトレーニングし、別の環境で実行するためにエクスポートする方法を提供しており、これによりワークフローが効率化されます。 異なるディープラーニングフレームワーク間の垣根を取り払い、開発者が単一のエコシステムに縛られることなく、異なるライブラリの長所を活用できるようにする。

変換に対応したフレームワーク

以下のフレームワークを使用する機械学習モデルを ONNX 形式に変換できます

  1. PyTorch
  2. TensorFlow
  3. CatBoost
  4. LightGBM
  5. XGBoost
  6. Scikit-learn

PyTorch モデルを ONNX 形式に変換する

PyTorch でトレーニングしたモデルを ONNX 形式に変換するには、以下の手順に従います

  1. ライブラリをインポートします:モデルを実行するための onnxruntime 、 PyTorchの機能を提供する torch 、その他アプリケーションに必要なライブラリなど、必要なライブラリをインポートすることから始めます。

  2. PyTorch モデルを作成またはダウンロードする: 独自のデータセットを使用して PyTorch モデルを作成することも、 Hugging Face のような外部オープンソースモデルリポジトリが提供するモデルを使用することもできます。

  3. PyTorch モデルをONNX形式に変換するPyTorch モデルをONNX形式に変換するには:

    a. モデルを準備するPyTorch モデルが model.eval() 機能を使用して評価モードになっていることを確認してください。 モデルの形状に合わせてダミーの入力テンソルが必要になるかもしれない。

    b. モデルをエクスポートするtorch.onnx.export 機能を使用して、モデルをONNX形式に変換します。

  4. 変換を検証する :モデルを変換した後、 onnx ライブラリを使用して、モデルが期待通りに機能していることを確認します。

TensorFlow モデルを ONNX 形式に変換する

モデル TensorFlow をONNX形式に変換するには、以下の手順に従います

  1. ライブラリのインポート :まず、 TensorFlow モデルをONNXに変換する際に必要な tf2onnx などの必須ライブラリ、およびアプリケーションに必要なその他のライブラリをインポートします。

  2. TensorFlow モデルのダウンロード :外部で作成された TensorFlow モデルと、モデルのトレーニングに使用されるデータをダウンロードする必要があります。

  3. TensorFlow モデルをONNX形式に変換するtf2onnx.convert コマンドを使用して、 SavedModel 形式で作成された TensorFlow モデルを ONNX 形式に変換します。 TensorFlow Lite モデルを変換したい場合は、 --saved-model フラグではなく、 --tflite フラグを使用してください。

注:

Keras モデルと 関数は、 または 関数を使用することで、 tf tf2onnx.convert.from_keras tf2onnx.convert.from_function Python 内で直接変換することができます。

  1. 変換を検証する :モデルを変換した後、 onnx ライブラリを使用して、モデルが期待通りに機能していることを確認します。

CatBoost モデルをONNX形式に変換する

CatBoost でトレーニングしたモデルをONNX形式に変換するには、以下の手順に従います

  1. ライブラリのインポート : 次のような必須ライブラリをインポートすることから始めます。 onnxruntime モデルを実行するために、 catboost のために CatBoost アプリケーションに必要な機能やその他のライブラリ。

  2. CatBoost モデルを作成またはダウンロードする: 独自のデータセットを使用して CatBoost モデルを作成することも、 Hugging Face などの外部オープンソースモデルリポジトリが提供するモデルを使用することもできます。

  3. CatBoost モデルを ONNX 形式に変換するCatBoost モデルを ONNX 形式に変換する:

    a. ロードする CatBoost モデル : CatBoost 次のようなライブラリを使用してモデル化する pickle:

    catboost_model = pickle.load(file)
    

    b. モデルをエクスポートする :フォーマットパラメータを onnx に設定した catboost_model.save_model 機能を使用して、モデルを ONNX フォーマットに変換します。

    catboost_model.save_model(
        onnx_model_name,
        format="onnx",
        export_parameters={
            'onnx_domain': 'ai.catboost',
            'onnx_model_version': 1,
            'onnx_doc_string': 'test model for Regressor',
            'onnx_graph_name': 'CatBoostModel_for_Regression'
        }
    )
    
  4. 変換を検証する :モデルを変換した後、 onnx ライブラリを使用して、モデルが期待通りに機能していることを確認します。

LightGBM モデルをONNX形式に変換する

LightGBM でトレーニングしたモデルを ONNX 形式に変換するには、以下の手順に従います

  1. ライブラリのインポート : 次のような必須ライブラリをインポートすることから始めます。 onnxruntime モデルを実行するために、 lightgbm のために LightGBM 機能、および onnxmltools アプリケーションに必要な変換およびその他のライブラリ。

  2. LightGBM モデルを作成またはダウンロードする: 独自のデータセットを使用して LightGBM モデルを作成することも、 Hugging Face のような外部オープンソースモデルリポジトリが提供するモデルを使用することもできます。

  3. LightGBM モデルを ONNX 形式に変換するLightGBM モデルを ONNX 形式に変換する:

    a. ロードする LightGBM モデル : LightGBM 次のようなライブラリを使用してモデル化する pickle:

    lgbm_model = pickle.load(file)
    

    b. モデルをエクスポートするconvert_lightgbm 機能を使用して、モデルを ONNX 形式に変換します。

    from onnxmltools import convert_lightgbm
    from skl2onnx.common.data_types import FloatTensorType
    from onnxmltools.utils import save_model      
    
    initial_types = [("float_input", FloatTensorType([None, X.shape[1]]))]
    onnx_model = convert_lightgbm(model=lgbm_model, initial_types=initial_types)
    onnx_model_filename = "lgbm_model.onnx"
    save_model(onnx_model, onnx_model_filename)
    
    ヒント:

    LightGBM モデルを ONNX 形式に変換する際のトラブルシューティングについては、「 watsonx.ai ランタイムのトラブルシューティング」 を参照してください。

  4. 変換を検証する :モデルを変換した後、 onnx ライブラリを使用して、モデルが期待通りに機能していることを確認します。

XGBoost モデルを ONNX 形式に変換する

XGBoost でトレーニングしたモデルを ONNX 形式に変換するには、以下の手順に従います

  1. ライブラリのインポート : 次のような必須ライブラリをインポートすることから始めます。 onnxruntime モデルを実行するために、 xgboost のために XGBoost アプリケーションに必要な機能やその他のライブラリ。

  2. XGBoost モデルを作成またはダウンロードする: 独自のデータセットを使用して XGBoost モデルを作成することも、 Hugging Face のような外部オープンソースモデルリポジトリが提供するモデルを使用することもできます。

  3. XGBoost モデルをONNX形式に変換するXGBoost モデルをONNX形式に変換するには:

    a. ロードする XGboost モデル : XGBoost 次のようなライブラリを使用してモデル化する pickle:

    xgboost_model = pickle.load(file)
    

    b. モデルをエクスポートするconvert_xgboost 機能を使用して、モデルを ONNX 形式に変換します。

    from onnxmltools import convert_xgboost
    from onnxconverter_common.data_types import FloatTensorType
    from onnxmltools.utils import save_model
    
    initial_types = [("float_input", FloatTensorType([None, X.shape[1]]))]
    onnx_model = convert_xgboost(xgboost_model, initial_types=initial_types)
    onnx_model_filename = "xgboost_onnx_model.onnx"
    save_model(onnx_model, onnx_model_filename)
    
  4. 変換の確認 :モデルを変換した後、onnxライブラリを使用して、モデルが期待通りに機能していることを確認します。

scikit-learn モデルを ONNX 形式に変換する

scikit-learn でトレーニングしたモデルを ONNX 形式に変換するには、以下の手順に従います

  1. ライブラリのインポート : 次のような必須ライブラリをインポートすることから始めます。 onnxruntime モデルを実行するために、 sklearn のために scikit-learn 機能、 skl2onnx アプリケーションに必要な変換およびその他のライブラリ。

  2. scikit-learn モデルを作成またはダウンロードする: 独自のデータセットを使用して scikit-learn モデルを作成することも、 Hugging Face のような外部オープンソースモデルリポジトリが提供するモデルを使用することもできます。

  3. scikit-learn モデルをONNX形式に変換するscikit-learn モデルを ONNX 形式に変換する:

    a. ロードする scikit-learn モデル : scikit-learn 次のようなライブラリを使用してモデル化する pickle:

    sklearn_model = pickle.load(file)
    

    b. モデルをエクスポートするto_onnx 機能を使用して、モデルを ONNX 形式に変換します。

    from skl2onnx import to_onnx
    onnx_model = to_onnx(sklearn_model, X, target_opset=19)
    
    with open("sklearn_model.onnx", "wb") as f:
       f.write(onnx_model.SerializeToString())
    
  4. 変換を検証する :モデルを変換した後、 onnx ライブラリを使用して、モデルが期待通りに機能していることを確認します。

その他の考慮事項

モデルを ONNX 形式に変換する際に考慮すべき事項をいくつかご紹介します

  • 動的軸 :動的軸は、動的なバッチサイズやシーケンス長などの可変入力形状を扱うためにモデルで使用することができます。 動的なバッチサイズやシーケンス長など、モデルが可変の入力サイズを扱う場合は、動的軸を使用する。

    動的軸はまた、モデルを再エクスポートすることなく動的に適応させるために、複数の入力と出力で使用することができるため、メモリのオーバーヘッドを削減します。 モデルのエクスポート時に、 PyTorch または TensorFlow で動的軸を指定することができます。

  • Opset バージョン: ONNX の Opset バージョンは、モデルでサポートされる操作とその仕様を決定します。 これは、モデルの変換や配備の際に重要な要素となる。

    ONNX の異なるランタイムとフレームワークは、特定のオペセットバージョンをサポートしています。 古いバージョンのオペセットは、新しいバージョンの機能や最適化が欠けている可能性があります。 モデルのオプセットバージョンと ONNX ランタイムの互換性がない場合、推論中にエラーが発生することがあります。 ONNX のオペセットバージョンが、ターゲットのランタイムでサポートされていることを確認してください。

ONNX 形式に変換したモデルの展開

onnxruntime_opset_19 ソフトウェア仕様を使用して、 ONNX 形式に変換した機械学習モデルを展開します。 モデルを watsonx.ai のランタイムリポジトリに保存する際には、ソフトウェアの仕様とモデルタイプを指定する必要があります。 詳細は、 サポート対象ソフトウェアの仕様をご覧ください。

ユーザーインターフェースから ONNX 形式に変換したモデルを展開するには、以下の手順に従います

  1. デプロイメント スペースで、[ アセット] タブに移動します。

  2. アセットリストでモデルを見つけ、メニューアイコン Menu アイコンをクリックし、 Deploy を選択します。

  3. モデルの展開タイプを選択します。 オンラインバッチの展開オプションを選択できます。

  4. 配置の名前を入力し、オプションでサービング名、説明、タグを入力します。

    注:
    • 配置 ID の代わりに配置名を指定するには、[配置名]フィールドを使用します。
    • サービング名は名前空間内で一意でなければならない。
    • サービング名には、以下の文字のみを含める必要があります: a-z,0-9,_]で、最大36文字です。
    • カスタム基盤モデルを定期的に使用するワークフローでは、モデルをデプロイするたびに同じサーバー名を割り当てることを検討してください。 こうすることで、モデルを削除して再デプロイした後も、コード内で同じエンドポイントを使い続けることができます。

  5. お使いのモデルのハードウェア仕様を選択してください。

  6. お使いのモデルの構成とソフトウェア仕様を選択してください。

  7. 「作成」 をクリックします。

モデルのテスト

以下の手順に従って、ONNX形式に変換された配置済みモデルをテストしてください:

  1. 配置スペースで[ 配置] タブを開き、配置名をクリックします。
  2. テスト]タブをクリックして、プロンプトのテキストを入力し、配置された資産からの応答を取得します。
  3. 配置した資産のタイプに応じて、以下のいずれかの形式でテストデータを入力します:
    • テキスト :テキスト入力データを入力し、出力としてテキストブロックを生成する。
    • JSON :JSON形式の出力を生成するためにJSON入力データを入力します。
  4. プロンプトに基づいた結果を得るには、[ 生成]をクリックします。

サンプル・ノートブック

次のサンプルノートブックでは、 PyTorch または TensorFlow から ONNX 形式に変換した機械学習モデルを、 Python クライアントライブラリを使用して展開する方法を示しています

サンプル・ノートブック
ノートブック フレームワーク 説明
ONNXニューラルネットワークを固定軸から動的軸に変換し、 watsonx -watsonx-aiで使用する。 ONNX 環境のセットアップ
基本的なONNXモデルの作成とエクスポート
モデルを固定軸から動的軸に変換
変換したONNXモデルを永続化
ONNXモデルのデプロイとスコアリング
クリーンアップ
まとめと次のステップ
watsonx -watsonx-aiで PyTorchから変換したONNXモデルを使用する。 PyTorch, ONNX データセットで PyTorch モデルを作成する。
PyTorch モデルを ONNX フォーマットに変換する 変換したモデルを
Watson Machine Learning リポジトリに永続化する。
クライアントライブラリを使ってオンライン採点用のモデルをデプロイする。
クライアント・ライブラリーを使用して、サンプル・レコードを評価する。
TensorFlowから変換したONNXモデルを使って、 watsonx -watsonx-aiで手書きの数字を認識する。 Tensorflow, ONNX 外部で訓練された TensorFlow モデルとデータセットをダウンロードする。
TensorFlow モデルを ONNX フォーマットに変換 変換したモデルを
Watson Machine Learning リポジトリに永続化する。
クライアントライブラリを使ってオンライン採点用のモデルをデプロイする。
クライアント・ライブラリーを使用して、サンプル・レコードを評価する。
ONNXモデルをコンバートして使用する CatBoost CatBoost, ONNX CatBoost モデルを訓練した。
CatBoost モデルをONNX形式に変換します。
変換後のモデルを リポジトリに保存する。 Watson Machine Learning
クライアントライブラリを使ってオンライン採点用のモデルをデプロイする。
クライアント・ライブラリーを使用して、サンプル・レコードを評価する。
ONNXモデルをコンバートして使用する LightGBM LightGBM, ONNX LightGBM モデルをトレーニングする
LightGBM モデルをONNX形式に変換する
変換したモデルを watsonx.ai ランタイムリポジトリに永続化する
クライアントライブラリを使用してオンライン採点用にモデルをデプロイする
クライアントライブラリを使用してサンプルレコードを採点する
ibm- watsonx -aiでXGBoostから変換したONNXモデルを使用する XGBoost、ONNX XGBoostモデルをトレーニングする。
XGBoostモデルをONNX形式に変換します。
変換後のモデルを リポジトリに保存します。 watsonx.ai
APIClientインスタンスを使用したオンライン採点用のデプロイモデル。
APIClientインスタンスを使用してサンプルレコードにスコアを付ける。
scikit-learnから変換したONNXモデルをibm- watsonx -aiで使用する Scikit-learn、ONNX scikit-learnモデルのトレーニング
ネイティブscikit-learnモデルをONNX形式に変換
sklearnパイプラインでラップされたカスタムscikit-learnモデルの変換を実行
変換したモデルを watsonx.ai ランタイムリポジトリに保存
クライアントライブラリを使用してオンラインスコアリング用にモデルをデプロイ
クライアントライブラリを使用してサンプルレコードをスコアリング

親トピック 機械学習アセットを展開する