AI/MLモデルをサービス用に準備する方法

出版社
ウラップ・チーム
オン
2023年10月13日 9:29 AM

機械学習、LLM、AIモデルをクラウドに展開するのは、複雑で時間のかかるプロセスである。 

特定のクラウド・サービスやクラウド・リソースの設定に関する豊富な知識が必要な場合もあれば、作業を代行する運用開発者チームが必要な場合もある。

データ・サイエンティストが開発プロセスのこのステップを嫌うのも無理はない。誰かが自分たちの代わりにモデルをデプロイしてくれるのを待っているうちに、彼らの仕事は停滞してしまうのだ。

そこでUlapの推論エンジンが登場し、効率的でデータサイエンティストに優しいモデル提供のためのプラットフォームを提供する。

この記事ではその方法を紹介しよう。

モデル給仕とは何か?

モデル提供とは、簡単に言えば、機械学習モデルをホストし、その機能をAPIを通じて利用可能にすることで、アプリケーションがAIをシステムに組み込むことができるようにすることである。

データサイエンティストがMLモデルの準備ができたら、次のステップはそれをデプロイすることだ。

クラウドでもオンプレミスでも(クラウドをお勧めするが)製品にアクセスできるようにしなければ、AI製品を多くのユーザーに提供することはできない。

一般的な提供方法

一般的に、モデルをクラウドにデプロイ(提供)するには、2つの一般的な方法がある。

クラウドサービス

モデルを提供する最も一般的な方法の1つは、AWS Sagemaker、Azure ML、GCP Vertex AIなどのクラウドサービスを利用することだ。

この方法では、ユーザーやチームは使用している特定のサービスに精通し、クラウドのリソース構成を理解していなければならない。

これは通常、最も高価なオプションであり、ベンダーの囲い込みにつながる可能性がある。一度ベンダーを選んでしまうと、乗り換えるのは非常に難しく、コストもかかるので、賢明な選択を!

推論エンドポイント

次の方法は、Hugging Face、Weights and Biases、DataRobot、Databricksといった推論エンドポイントのデプロイメントを提供するベンダーを見つけることである。

これらのベンダーは、導入プロセスが通常自動化されているため、クラウドリソースの設定方法を知っている必要はない。

この方法では、ユーザーまたはチームがモデルまたはモデルファイルの場所を提供し、ソフトウェアがモデルをコンテナ化して提供する。

推論エンジンを支える技術 

クラウドにモデルを提供するための第3の選択肢がある。

私たちは、デプロイメント・ウィザードと自動化されたオペレーションによって、開発者とデータ科学者がクラウド・リソース上に素晴らしいAI/MLアプリケーションを提供できるようにするためにInference Engineを構築しました。つまり、クラウドにモデルを提供するための、費用対効果が高く、使いやすいオプションを作りたかったのです。

オープンソース・テクノロジー

私たちの推論エンジンは、オープンソースの技術を利用しています。Kubernetesを活用し、推論サーバーの管理とデプロイを行います。 Kubernetesは、スケーラビリティ、リソース管理、フォールトトレランス、サーバーの自動化を提供します。 これは、本番環境に対応した推論サービスの堅牢なアーキテクチャにつながります。 

我々は、干渉エンジンを動かすために2つのオープンソースツールを使用している。

MLフロー

まず、MLflowを使って生産可能なモデルを追跡する。

このオープンソースプラットフォームは、実験、再現性、デプロイメント、中央モデルレジストリなど、MLのライフサイクルを管理する。

モデル開発プロセス全体を通してトレーニング実験を追跡するのに役立つだけでなく、モデルレジストリ内の生産準備完了モデルのリストを追跡することもできる。

モデルの性能、成果物の位置、モデルの要件に関する情報は、簡単にアクセスできるように保存されます。

Kサーブ

推論エンジンを動かす2つ目のアプリケーションはKServeだ。

このアプリケーションは、Kubernetes上でサーバーレス推論を可能にし、一般的な機械学習(ML)フレームワークのためのパフォーマンスと抽象度の高いインタフェースを提供し、プロダクションモデルサービングのユースケースを解決します。

スケーリング、ネットワーキング、ヘルスチェック、モデルサーバーの設定にはKServeを使っています。

フレームワーク固有のモデルを提供するために、MLserverTensorflow ServingTorchServeを活用している。 

Ulapの推論エンジンを使ったモデルの準備

Ulapの推論エンジンを使ってモデルを提供するのは簡単だ。

モデルが構築されるAIフレームワーク(scikit-Learnや PyTorchなど)によって、モデルのデプロイプロセスステップは異なる。

しかし、推論エンジンにモデルをデプロイして提供するには、3つのステップが必要です:

ステップ1:モデルの訓練と追跡

最初のステップでは、MLFlowを使ってモデルのトレーニングを追跡する。

トレーニングプロセスでは、モデルのパフォーマンスメトリクスだけでなく、トレーニングからモデルを再現するために必要なすべての情報を追跡することが目標です。

これには以下のような情報が含まれる:

  • 使用データセット
  • トレーニング・スクリプト
  • 環境要件

モデルのトレーニングを追跡する最も一般的な方法は、トレーニングコードをラップし、以下のコードを使用してMLflowの実行を開始することです:

mlflow.start_run():
# Train code
# eg. use model.fit(X_train, y_train) for scikit

ステップ2:モデルファイルの準備

このステップでは、モデルはフレームワーク依存のファイルにパッケージ化され、追加のデプロイメントファイルが作成されます。

scikitXGBoostTensorFlowの場合、モデルはそれぞれ.pickle、.bst、.pbファイルとして保存されます。

しかし、PyTorchの場合、フレームワークがより多くの設定を可能にするため、デプロイプロセスは少し複雑になります。3つのファイルを作成する必要があります:

これらのファイルは、次のコマンドを使用して、MLFlow を介してモデルの実行に関連付けられたデプロイメントフォルダにロードされます:

# Upload model artifacts
client.log_artifacts(run_id=run_id,
local_dir="deployment",
artifact_path='deployment')

ステップ3:モデルのステージング

プロセスの最後のステップは、以下のコードを使ってMLflowでモードをステージングすることだ。

client = MlflowClient()
client.transition_model_version_stage(name="MODEL_NAME", version=1,
stage="Staging")

ここでモデルを "Staging"、"Production"、"Archive "のいずれかに遷移させることができる。これにより、ユーザーはモデルのステージを追跡することができますが、より具体的には、推論エンジンにどのモデルが提供可能で、どこに成果物があるかを通知し、サーバーがデプロイ中にファイルを取得できるようにします。

配備を簡単に

機械学習モデルの導入は、困難な作業ではありません。

UlapのInference Engineを使用することで、デプロイメントプロセスを合理化し、開発者やデータサイエンティストは重要なこと、つまり顧客に喜ばれるアプリケーションの構築に集中することができます。

推論エンジンを試してみたい?

30日間の無料トライアルに登録して、MLモデルの導入を今すぐ始めましょう。