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