導入新しいモデルをトレーニングしたときに、Flask コード (Python Web フレームワーク) を記述したり、モデルをコンテナ化して Docker で実行したりするのではなく、API を介してすぐにモデルを使用したいシナリオに遭遇したことはありませんか? このような要件がある場合は、必ず MLServer について学習する必要があります。これは Python ベースの推論サーバーであり、最近、実稼働環境向けに設計された高性能サーバーである GA (遺伝的アルゴリズム) バージョンがリリースされました。 これを使用して、ローカルで構築したモデルが本番環境に導入したモデルと一致していることを確認します。 この記事では、いくつかの画像モデルを例として使用して、MLServer の使用方法を説明します。 データセット使用するデータセットは Fashion MNIST です。 10 種類のカテゴリ (トップス、ドレス、ジャケット、パンツなど) をカバーする 70,000 枚のグレースケール 28 x 28 ピクセルの衣類画像が含まれています。 この記事のコードを再現したい場合は、必ずファイルをダウンロードし、data というディレクトリに解凍してください。ファイルは非常に大きいため、GitHub リポジトリからは省略されています。 1. Scikit-learn モデルのトレーニングまず、scikit-learn フレームワークを使用してサポート ベクター マシン (SVM) モデルをトレーニングします。次に、モデルを Fashion-MNIST.joblib というファイルに保存します。 pandasをpd としてインポートする 注: SVM アルゴリズムは二次関数の性質を持つため、大規模なデータセットには特に適していません。ハードウェアによっては、この例のモデルのトレーニングに数分かかる場合があります。 2. Scikit-learn モデルの提供上記の手順により、モデル ファイル Fashion-MNIST.joblib が作成されます。次に、MLServer を使用してサービスを提供する方法を見てみましょう。 まず、次のコマンドを使用して MLServer をインストールします: pip install mlserver。 追加のランタイム コンポーネントはオプションですが、モデルの提供がよりスムーズになります。Scikit-Learn および XGBoost 拡張機能もインストールします。 。 pip install mlserver-sklearn mlserver-xgboost 操作を完了したら、次の 2 つの構成ファイルを追加する必要があります。 (1) settings.json - サーバー自体の設定が含まれています。 (2) model-settings.json - 名前の通り、このファイルには実行するモデルの設定が含まれています。 settings.json ファイルでは、次の 1 つのパラメータのみを定義するだけで十分です。 { model-settings.json ファイルには、サービス モデル情報を知る必要があるため、さらに情報が必要です。 { name パラメータは MLServer の一意の識別子を提供します。これは、マルチモデル サービング シナリオ (後述) で特に役立ちます。事前構築されたサーバー (存在する場合) に使用する実装を定義します。これは、モデルのトレーニングに使用される機械学習フレームワークと密接に連携しています。私たちの場合、モデルのトレーニングには scikit-learn を使用するため、MLServer の scikit-learn 実装を使用します。パラメータ構成には、モデル ファイルの場所とバージョン番号が必要です。 上記の構成では、次のコマンドを使用してモデルを提供できます: mlserver start 。 とても簡単です。これで、モデルがローカル サーバー上で実行されるようになりました。この時点で、HTTP や gRPC などのリクエストをすでに受け入れることができます (デフォルトのポートは 8080 と 8081 です)。 3. モデルをテストするモデルが起動して実行されたので、いくつかのリクエストを送信してテストしてみましょう。 次の URL を通じて POST リクエストを送信します。 http://localhost:8080/v2/models/<モデル名>/versions/<バージョン>/infer この URL は、以前にトレーニングされた scikit-learn モデルにアクセスするためのものです。ここでは、MODEL_NAME を fashion-sklearn のモデル名に置き換え、VERSION を v1 に置き換えます。 次のコードは、テスト データをインポートし、モデル サーバーに要求を送信し、結果を実際のラベルと比較する方法を示しています。 pandasをpd としてインポートする 上記の test.py を実行すると、MLServer から次の応答が返されます。 "モデル名" : "fashion-sklearn" , 応答から、MLServer がリクエスト ID を生成し、リクエストを処理するために使用されたモデルとバージョンに関するメタデータを自動的に追加したことがわかります。モデルが本番環境に導入されると、同様のメタデータを収集することが非常に重要になります。すべてのリクエストをログに記録できるため、監査とトラブルシューティングが容易になります。 MLServer が配列出力を返すことにも気づくかもしれません。リクエストでは 1 行のデータのみが送信されますが、MLServer はリクエストをバッチで処理し、まとめて返します。アダプティブ バッチングと呼ばれる手法により、運用環境で複数のリクエストを処理する方法を最適化することもできます。 上記の例では、モデルの予測結果も確認できます。 output[0].dataは、モデルがこのサンプルをカテゴリ0としてラベル付けしたことを示します(値0はカテゴリTシャツ/トップスに対応します)。このサンプルの真のラベルも 0 なので、モデルは正しい予測を行います。 4. XGBoostモデルのトレーニングMLServer を使用して単一のモデルを作成する方法を確認したので、異なるフレームワークでトレーニングされた複数のモデルを処理する方法を確認しましょう。 引き続き Fashion MNIST データセットを使用しますが、今回は XGBoost モデルをトレーニングします。 pandasをpd としてインポートする XGBoost モデルをトレーニングするための上記のコードは、以前に scikit-learn モデルをトレーニングするために使用されたコードと似ていますが、今回は、XGBoost と互換性を持たせるためにモデルを Fashion_MNIST.json ファイルとして保存します。 5. 複数のモデルを提供するMLServer の大きな利点の 1 つは、マルチモデル サービングをサポートしていることです。つまり、デプロイする ML モデルごとに新しいサーバーを作成したり実行したりする必要がないということです。上記で構築したモデルを使用すると、この機能を使用して同時に提供されます。 MLServer が起動すると、ディレクトリ (およびサブディレクトリ) 内で model-settings.json ファイルを検索します。 model-settings.json ファイルが複数ある場合は、それらすべてが自動的に提供されます。 注: ルートディレクトリの(サーバー設定)ファイルsettings.jsonのみを指定する必要があります。 参考までに、ディレクトリ構造の内訳を以下に示します。 。 model-settings.json ファイルが 2 つあることに注意してください。1 つは scikit-learn モデル用、もう 1 つは XGBoost モデル用です。 これで、 mlserver start . を実行すると、両方のモデルのリクエストの処理が開始されます。 [ mlserver ] INFO - モデル'fashion-sklearn'が正常にロードされました。 6. 複数のモデルの精度をテストする両方のモデルが MLServer 上で実行されるようになったので、テスト セットのサンプルを使用して各モデルの精度を検証できます。 次のコードは、バッチ リクエスト (完全なテスト セットを含む) を各モデルに送信し、予測を実際のラベルと比較します。テスト セット全体に対してこれを行うと、各モデルの精度を測定し、最終結果を印刷できるようになります。 pandasをpd としてインポートする 結果は、XGBoost モデルが SVM scikit-learn モデルよりもわずかに優れていることを示しています。 ファッションのモデル精度- xgboost : 0.8953 要約する上記の説明を通じて、MLServer を使用してモデルを提供する一般的なプロセスを理解できたと思います。さらに詳しく知る必要がある場合は、ドキュメントを読んで、さまざまなフレームワークの例を確認する必要があります。 MLFlow ユーザーの場合は、MLServer を使用して MLFlow で直接モデルを提供できます。また、Kubernetes ユーザーの場合は、Kubernetes にモデルをデプロイするためのオープンソース ツールである Seldon Core について知っておく必要があります (内部では MLServer を使用します)。 翻訳者紹介51CTO コミュニティ エディター兼シニア アーキテクトの Cui Hao 氏は、ソフトウェア開発とアーキテクチャで 18 年の経験があり、分散アーキテクチャでは 10 年の経験があります。元HPの技術専門家。彼は情報を共有することに積極的で、60 万回以上読まれている人気の高い技術記事を多数執筆しています。 『分散アーキテクチャの原則と実践』の著者。 参考リンク: https://dzone.com/articles/How-to-Utilize-Python-Machine-Learning-Models |
<<: 世界初、常温量子コンピュータが実用化!絶対零度の温度は必要ありません。メインコアには実際に「ダイヤモンドがセットされています」
>>: 初心者のためのディープラーニングの10,000語レビュー
第四次産業革命が急速に起こりつつあります。人工知能はこの産業革命の中核となる内容の一つです。産業革命...
[51CTO.com 北京レポート] 2017年8月23日から27日まで、2017年世界ロボット大会...
ロボット工学は考えられるあらゆる分野に応用できます。教育、旅行、防衛など、あらゆる分野でロボット工学...
人工知能は人類史上最も革命的な技術の一つとなるでしょう。 AI テクノロジーが発展するにつれて、どの...
車両の電動化が徐々に進むにつれ、電子制御ユニット(ECU)が車全体を制御するようになりました。アンチ...
[[437774]]この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI...
GPUマイニングで米国証券取引委員会から罰金を科されたNvidiaは、最近、暗号化アルゴリズムが解...
最近、修士号を取得して卒業しようとしているネットユーザーがネットユーザーに助けを求めました。「強化学...
ロジスティック回帰の2つの方法:勾配降下法と最適化関数ロジスティック回帰は非常に人気のある機械学習手...
ウォール・ストリート・ジャーナル、フォーブス、フォーチュンなどの出版物は、2017 年を「AI の年...
産業用ロボットとは何ですか?工業生産で使用される産業用ロボットには、溶接ロボット、研削・研磨ロボット...
この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...