ONNX形式に変換されたモデルの展開
または PyTorch
から、異なる形式で保存され、 TensorFlow
(Open Neural Network Exchange
)形式に変換された機械学習モデルを展開および推論することができます。 ONNX
ディープラーニングモデルを表現するためのオープンソース形式です。 開発者は、 ONNX
形式を使用して、 ONNX
や PyTorch
などの1つのフレームワークでモデルをトレーニングし、それをエクスポートして、異なるパフォーマンス特性を持つ別の環境で実行することができます。 TensorFlow
形式は、機械学習モデルを ONNX
に変換し、 ONNX
ランタイムを使用して推論を行うための強力なソリューションを提供します。ONNX
モデルを ONNX
の実行環境に変換するメリット
ONNX
モデルを
の実行環境に変換すると、特に機械学習やディープラーニングのアプリケーションでは、いくつかの利点があります。 モデルを ONNX
ランタイムに変換する利点の一部は以下の通りですONNX
クロスプラットフォームの互換性 :
は機械学習モデルを表現するための標準フォーマットを提供しており、 PyTorch や Tensorflow などの異なるフレームワークにモデルを展開しやすくなります。 1つのフレームワークでモデルをトレーニングし、ONNX
ランタイムをサポートする別のフレームワークにデプロイすることができます。ONNX
パフォーマンスの向上 :
ランタイムは、グラフ最適化など、さまざまなハードウェアおよびソフトウェア固有の最適化を適用することで、推論用のモデルを最適化します。 また、CPUやGPUなど多様なハードウェア上での実行をサポートし、リソースの効率的な利用を保証する。ONNX
相互運用性 :
は、 PyTorch,、 TensorFlow,、scikit-learnなどのモデルを1つのフレームワークでトレーニングし、別の環境で実行するためにエクスポートする方法を提供しており、これによりワークフローが効率化されます。 異なるディープラーニングフレームワーク間の垣根を取り払い、開発者が単一のエコシステムに縛られることなく、異なるライブラリの長所を活用できるようにする。ONNX
変換に対応したフレームワーク
以下のフレームワークを使用する機械学習モデルを
形式に変換できますONNX
PyTorch
TensorFlow
CatBoost
LightGBM
XGBoost
Scikit-learn
PyTorch
モデルを ONNX
形式に変換する
PyTorch
ONNX
でトレーニングしたモデルを PyTorch
形式に変換するには、以下の手順に従いますONNX
ライブラリをインポートします:モデルを実行するための
、 PyTorchの機能を提供するonnxruntime
、その他アプリケーションに必要なライブラリなど、必要なライブラリをインポートすることから始めます。torch
モデルを作成またはダウンロードする: 独自のデータセットを使用してPyTorch
モデルを作成することも、 Hugging Face のような外部オープンソースモデルリポジトリが提供するモデルを使用することもできます。PyTorch
モデルをONNX形式に変換する :PyTorch
モデルをONNX形式に変換するには:PyTorch
a. モデルを準備する :
モデルがPyTorch
機能を使用して評価モードになっていることを確認してください。 モデルの形状に合わせてダミーの入力テンソルが必要になるかもしれない。model.eval()
b. モデルをエクスポートする :
機能を使用して、モデルをONNX形式に変換します。torch.onnx.export
変換を検証する :モデルを変換した後、
ライブラリを使用して、モデルが期待通りに機能していることを確認します。onnx
TensorFlow
モデルを ONNX
形式に変換する
TensorFlow
ONNX
モデル
をONNX形式に変換するには、以下の手順に従いますTensorFlow
ライブラリのインポート :まず、
モデルをONNXに変換する際に必要なTensorFlow
などの必須ライブラリ、およびアプリケーションに必要なその他のライブラリをインポートします。tf2onnx
モデルのダウンロード :外部で作成されたTensorFlow
モデルと、モデルのトレーニングに使用されるデータをダウンロードする必要があります。TensorFlow
モデルをONNX形式に変換する :TensorFlow
コマンドを使用して、tf2onnx.convert
形式で作成されたSavedModel
モデルをTensorFlow
形式に変換します。ONNX
モデルを変換したい場合は、TensorFlow Lite
フラグではなく、--saved-model
フラグを使用してください。--tflite
モデルと 関数は、 または 関数を使用することで、 Keras
tf
tf2onnx.convert.from_keras
Python 内で直接変換することができます。tf2onnx.convert.from_function
- 変換を検証する :モデルを変換した後、
ライブラリを使用して、モデルが期待通りに機能していることを確認します。onnx
CatBoost
モデルをONNX形式に変換する
CatBoost
でトレーニングしたモデルをONNX形式に変換するには、以下の手順に従いますCatBoost
ライブラリのインポート : 次のような必須ライブラリをインポートすることから始めます。
モデルを実行するために、onnxruntime
のためにcatboost
アプリケーションに必要な機能やその他のライブラリ。CatBoost
モデルを作成またはダウンロードする: 独自のデータセットを使用してCatBoost
モデルを作成することも、 Hugging Face などの外部オープンソースモデルリポジトリが提供するモデルを使用することもできます。CatBoost
モデルを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' } )
変換を検証する :モデルを変換した後、
ライブラリを使用して、モデルが期待通りに機能していることを確認します。onnx
LightGBM
モデルをONNX形式に変換する
LightGBM
でトレーニングしたモデルを LightGBM
形式に変換するには、以下の手順に従いますONNX
ライブラリのインポート : 次のような必須ライブラリをインポートすることから始めます。
モデルを実行するために、onnxruntime
のためにlightgbm
機能、およびLightGBM
アプリケーションに必要な変換およびその他のライブラリ。onnxmltools
モデルを作成またはダウンロードする: 独自のデータセットを使用してLightGBM
モデルを作成することも、 Hugging Face のような外部オープンソースモデルリポジトリが提供するモデルを使用することもできます。LightGBM
モデルを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
形式に変換する際のトラブルシューティングについては、「 watsonx.ai ランタイムのトラブルシューティング」 を参照してください。ONNX
変換を検証する :モデルを変換した後、
ライブラリを使用して、モデルが期待通りに機能していることを確認します。onnx
XGBoost
モデルを ONNX
形式に変換する
XGBoost
ONNX
でトレーニングしたモデルを XGBoost
形式に変換するには、以下の手順に従いますONNX
ライブラリのインポート : 次のような必須ライブラリをインポートすることから始めます。
モデルを実行するために、onnxruntime
のためにxgboost
アプリケーションに必要な機能やその他のライブラリ。XGBoost
モデルを作成またはダウンロードする: 独自のデータセットを使用してXGBoost
モデルを作成することも、 Hugging Face のような外部オープンソースモデルリポジトリが提供するモデルを使用することもできます。XGBoost
モデルをONNX形式に変換する :XGBoost
モデルをONNX形式に変換するには:XGBoost
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)
変換の確認 :モデルを変換した後、onnxライブラリを使用して、モデルが期待通りに機能していることを確認します。
scikit-learn
モデルを ONNX
形式に変換する
scikit-learn
ONNX
でトレーニングしたモデルを scikit-learn
形式に変換するには、以下の手順に従いますONNX
ライブラリのインポート : 次のような必須ライブラリをインポートすることから始めます。
モデルを実行するために、onnxruntime
のためにsklearn
機能、scikit-learn
アプリケーションに必要な変換およびその他のライブラリ。skl2onnx
モデルを作成またはダウンロードする: 独自のデータセットを使用してscikit-learn
モデルを作成することも、 Hugging Face のような外部オープンソースモデルリポジトリが提供するモデルを使用することもできます。scikit-learn
モデルをONNX形式に変換する :scikit-learn
モデルを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())
変換を検証する :モデルを変換した後、
ライブラリを使用して、モデルが期待通りに機能していることを確認します。onnx
その他の考慮事項
モデルを
形式に変換する際に考慮すべき事項をいくつかご紹介しますONNX
動的軸 :動的軸は、動的なバッチサイズやシーケンス長などの可変入力形状を扱うためにモデルで使用することができます。 動的なバッチサイズやシーケンス長など、モデルが可変の入力サイズを扱う場合は、動的軸を使用する。
動的軸はまた、モデルを再エクスポートすることなく動的に適応させるために、複数の入力と出力で使用することができるため、メモリのオーバーヘッドを削減します。 モデルのエクスポート時に、
またはPyTorch
で動的軸を指定することができます。TensorFlow
Opset バージョン:
の Opset バージョンは、モデルでサポートされる操作とその仕様を決定します。 これは、モデルの変換や配備の際に重要な要素となる。ONNX
の異なるランタイムとフレームワークは、特定のオペセットバージョンをサポートしています。 古いバージョンのオペセットは、新しいバージョンの機能や最適化が欠けている可能性があります。 モデルのオプセットバージョンとONNX
ランタイムの互換性がない場合、推論中にエラーが発生することがあります。ONNX
のオペセットバージョンが、ターゲットのランタイムでサポートされていることを確認してください。ONNX
ONNX
形式に変換したモデルの展開
ONNX
ソフトウェア仕様を使用して、 onnxruntime_opset_19
形式に変換した機械学習モデルを展開します。 モデルを watsonx.ai のランタイムリポジトリに保存する際には、ソフトウェアの仕様とモデルタイプを指定する必要があります。 詳細は、 サポート対象ソフトウェアの仕様をご覧ください。ONNX
ユーザーインターフェースから
形式に変換したモデルを展開するには、以下の手順に従いますONNX
デプロイメント スペースで、[ アセット] タブに移動します。
アセットリストでモデルを見つけ、メニューアイコン Menu アイコンをクリックし、 Deploy を選択します。
モデルの展開タイプを選択します。 オンラインと バッチの展開オプションを選択できます。
配置の名前を入力し、オプションでサービング名、説明、タグを入力します。
注:- 配置 ID の代わりに配置名を指定するには、[配置名]フィールドを使用します。
- サービング名は名前空間内で一意でなければならない。
- サービング名には、以下の文字のみを含める必要があります: a-z,0-9,_]で、最大36文字です。
- カスタム基盤モデルを定期的に使用するワークフローでは、モデルをデプロイするたびに同じサーバー名を割り当てることを検討してください。 こうすることで、モデルを削除して再デプロイした後も、コード内で同じエンドポイントを使い続けることができます。
お使いのモデルのハードウェア仕様を選択してください。
お使いのモデルの構成とソフトウェア仕様を選択してください。
「作成」 をクリックします。
モデルのテスト
以下の手順に従って、ONNX形式に変換された配置済みモデルをテストしてください:
- 配置スペースで[ 配置] タブを開き、配置名をクリックします。
- テスト]タブをクリックして、プロンプトのテキストを入力し、配置された資産からの応答を取得します。
- 配置した資産のタイプに応じて、以下のいずれかの形式でテストデータを入力します:
- テキスト :テキスト入力データを入力し、出力としてテキストブロックを生成する。
- JSON :JSON形式の出力を生成するためにJSON入力データを入力します。
- プロンプトに基づいた結果を得るには、[ 生成]をクリックします。
サンプル・ノートブック
次のサンプルノートブックでは、
または PyTorch
から TensorFlow
形式に変換した機械学習モデルを、 Python クライアントライブラリを使用して展開する方法を示していますONNX
ノートブック | フレームワーク | 説明 |
---|---|---|
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 ランタイムリポジトリに保存 クライアントライブラリを使用してオンラインスコアリング用にモデルをデプロイ クライアントライブラリを使用してサンプルレコードをスコアリング |
親トピック 機械学習アセットを展開する