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