Azure Kubernetes ServiceでのDataRobotモデルのデプロイと監視¶
本機能の提供について
MLOpsモデルパッケージのエクスポート機能は、デフォルトでは無効になっています。 DataRobot MLOpsでこの機能を有効にする方法については、DataRobotの担当者または管理者にお問い合わせください。
機能フラグ:MMMモデルパッケージのエクスポートを有効化
このページでは、DataRobotのMLOpsポータブル予測サーバー(PPS)を使用して、機械学習モデルをAzure Kubernetes Services(AKS)にデプロイし、本番環境にスコアリングパイプラインを作成する方法について説明します。
DataRobot Automated Machine Learningは、リアルタイムの予測に適した低レイテンシーの同期REST APIとして、専用の予測サーバーを提供します。 DataRobot MLOps PPSは、この機能を拡張してコンテナイメージで機械学習モデルを提供し、機械学習モデルのデプロイアーキテクチャに対する移植性と制御を実現します。
コンテナ化されたPPSは、Kubernetesクラスターでのデプロイに適しているため、このデプロイアーキテクチャの自動スケーリングと高可用性を活用できます。 PPSとKubernetesの組み合わせは、IoTのユースケースに見られるような、不安定で不規則なワークロードに最適です。
モデルの作成¶
このページの例では、公開されているLendingClubのデータセットを使用して、各ローン申請の融資額を予測します。
-
トレーニングデータをDataRobotにアップロードするには、次のいずれかを行います。
-
ローカルファイルをクリックし、ローカルファイルシステムからLendingClubデータセットのCSVファイルを選択します。
-
URLをクリックし、URLをインポートダイアログボックスを開き、上記のLendingClubデータセットのURLをコピーします。
In the Import URL dialog box, paste the LendingClub dataset URL and click Import from URL:
-
-
ターゲット(予測対象)(1)として
loan_amt
を入力し、開始(2)をクリックしてオートパイロットを実行します。 -
オートパイロットが終了したら、モデルをクリックし、リーダーボードの上部にあるモデルを選択します。
-
選択したモデルの下で、予測 > デプロイをクリックし、モデルパッケージを取得にアクセスします。
-
.mlpkgをダウンロードをクリックし、
.mlpkg
ファイルのダウンロードを開始します。
備考
詳細については、ポータブル予測サーバーに関するドキュメントを参照してください。
モデルパッケージによるイメージの作成¶
PPSベースイメージを取得したら、以下の内容のDockerfileを作成して、新しいバージョンを作成します。
FROM datarobot/datarobot-portable-prediction-api:<TAG> AS build
COPY . /opt/ml/model
備考
このDockerコマンドを構成する方法の詳細については、Dockerビルドドキュメントを参照してください。
COPY
コマンドを機能させるには、.mlpkg
ファイルがDockerfileと同じディレクトリにある必要があります。 Dockerfileを作成したら、以下のコマンドを実行して、モデルを含む新しいイメージを作成します。
docker build . --tag regressionmodel:latest
Azure Container Registryの作成¶
イメージをAKSにデプロイする前に、デプロイ用にAzure Container Registry(ACR)などのコンテナレジストリにイメージをプッシュします。
-
Azure Portalで、リソースの作成 > コンテナーをクリックし、コンテナー レジストリをクリックします。
-
コンテナーレジストリの作成ブレードで、以下を入力します。
フィールド 説明 レジストリ名 適当な名前を入力します サブスクリプション サブスクリプションを選択します リソース グループ 既存のリソースグループを使用します 位置 地域を選択します 管理者ユーザー 有効にする SKU Standard -
作成をクリックします。
-
新しく生成されたレジストリに移動し、アクセスキーを選択します。
-
管理者パスワードをコピーしてDockerで認証し、
.mlpkg
イメージをこのレジストリに追加します。
モデルイメージをACRにプッシュする¶
新しいイメージをAzure Container Registry(ACR)にプッシュするには、次のコマンドでログインします(<DOCKER_USERNAME>
を以前に選択したリポジトリ名で置き換えます)。
docker login <DOCKER_USERNAME>.azurecr.io
パスワードは、Azure Container Registry(ACR)で作成した管理者パスワードです。
ログインしたら、Dockerイメージが正しくタグ付けされていることを確認してから、次のコマンドを使用してリポジトリにプッシュします(<DOCKER_USERNAME>
を以前に選択したリポジトリ名で置き換えます)。
docker tag regressionmodel <DOCKER_USERNAME>.azurecr.io/regressionmodel
docker push <DOCKER_USERNAME>.azurecr.io/regressionmodel
AKSクラスターの作成¶
このセクションは、AKSとAzureのコマンドラインインターフェイス(CLI)に精通していることを前提としています。
備考
AKSの詳細については、Microsoftのクイックスタートチュートリアルを参照してください。
-
実行中のAKSクラスターがない場合は、作成します。
RESOURCE_GROUP=ai_success_eng CLUSTER_NAME=AIEngineeringDemo az aks create \ --resource-group $RESOURCE_GROUP \ --name $CLUSTER_NAME \ -s Standard_B2s \ --node-count 1 \ --generate-ssh-keys \ --service-principal XXXXXX \ --client-secret XXXX \ --enable-cluster-autoscaler \ --min-count 1 \ --max-count 2
-
AKSがプライベートリポジトリからイメージをプルできるように、Dockerレジストリシークレットを作成します。 以下のコマンドで、以下を実際の資格情報に置き換えます。
-
<SECRET_NAME>
-
<YOUR_REPOSITORY_NAME>
-
<DOCKER_USERNAME>
-
<YOUR_SECRET_ADMIN_PW>
kubectl create secret docker-registry <SECRET_NAME> --docker-server=<YOUR_REPOSITORY_NAME>.azurecr.io --docker-username=<DOCKER_USERNAME> --docker-password=<YOUR_SECRET_ADMIN_PW>
-
-
ポータブル予測サーバーイメージをデプロイします。 アプリケーションをデプロイする方法は多数ありますが、最も簡単な方法はKubernetesダッシュボードを使用することです。 次のコマンドでKubernetesダッシュボードを開始します。
az aks browse --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME
モデルをAKSにデプロイする¶
モデルを含むPPSをインストールしてデプロイするには:
- 作成 > アプリを作成をクリックします。
-
アプリの作成ページで、以下を指定します。
フィールド 値 アプリ名 たとえば、 portablepredictionserver
コンテナイメージ たとえば、 aisuccesseng.azurecr.io/regressionmodel:latest
ポッドの数 たとえば、 1
サービス External
ポート、ターゲットポート、プロトコル 8080
,8080
, andTCP
イメージプルシークレット 以前作成した CPU要件(コア) 1
メモリー要件(MiB) 250
-
デプロイをクリックします。デプロイには数分かかる場合があります。
Postmanでの予測のスコアリング¶
モデルをテストするには、DataRobot PPSの例Postmanコレクションをダウンロードし、ホスト名をlocalhost
からサービスに割り当てられた外部IPアドレスに更新します。 IPアドレスは、Kubernetesダッシュボードのサービスタブで確認できます。
予測を行うには、予測作成リクエストを実行します。
自動スケーリングと高可用性の設定¶
Kubernetesは水平Pod自動スケーリングをサポートしており、CPU使用率やその他の選択された指標に応じて、デプロイ内のポッド数を調整します。 指標サーバーはKubernetesにリソース使用率を提供し、AKSクラスターに自動的にデプロイされます。
前のセクションでは、サービス用に1つのポッドをデプロイし、CPUとメモリーリソースの最小要件のみを定義しました。
オートスケーラーを使用するには、CPUリクエストと使用制限を定義する必要があります。
デフォルトでは、ポータブル予測サーバーは1つのワーカーをスピンアップします。つまり、同時に処理できるHTTPリクエストは1つだけです。 実行できるワーカー数、つまり同時に処理できるHTTPリクエストの数は、コンテナで使用できるCPUコア数に関連しています。
CPU最小要件を1
に設定したため、patchSpec.yaml
ファイルで制限を2
に設定できるようになりました。
apiVersion: apps/v1
kind: Deployment
metadata:
name: portablepredictionserver
spec:
selector:
matchLabels:
app: portablepredictionserver
replicas: 1
template:
metadata:
labels:
app: portablepredictionserver
spec:
containers:
- name: portablepredictionserver
image: aisuccesseng.azurecr.io/regressionmodel:latest
ports:
- containerPort: 8080
resources:
requests:
cpu: 1000m
limits:
cpu: 2000m
imagePullSecrets:
- name: aisuccesseng
次に、以下のコマンドを実行します。
kubectl patch deployment portablepredictionserver --patch "$(cat patchSpec.yaml)"
または、以下に示すようにJSONを編集し、更新をクリックして、Kubernetesダッシュボードでデプロイを直接更新することもできます。
CPU制限が定義されたので、次のコマンドで自動スケーリングを設定できます。
kubectl autoscale deployment portablepredictionserver --cpu-percent=50 --min=1 --max=10
これにより、Kubernetesはportablepredictionserver
デプロイ内のポッド数を自動スケーリングできます。 すべてのポッドの平均CPU使用率が要求された使用量の50%を超える場合、オートスケーラーはポッドを最小の1インスタンスから最大の10インスタンスに増やします。
ロードテストを実行するには、以下のサンプルJMeterテストプランをダウンロードし、URL/認証を更新します。 次のコマンドで実行します。
jmeter -n -t LoadTesting.jmx -l results.csv
出力は次の例のようになります。
監視エージェントを介してDataRobot MLOpsに使用状況を報告する¶
モデルをAKSにデプロイした後、これらの予測のテレメトリクスをDataRobot MLOpsサーバーとダッシュボードに報告することで、このモデルと他のすべてのモデルを一元化されたダッシュボードで監視できます。
-
モデルレジストリ > モデルパッケージ > 新しいパッケージを追加に移動し、ドキュメントの指示に従います。
-
新しい外部モデルパッケージを追加を選択し、パッケージ名と説明(1と2)を指定し、ドリフト追跡用の対応するトレーニングデータ(3)をアップロードし、モデルの場所(4)、ターゲット(5)、環境(6)、予測タイプ(7)を特定します。パッケージを作成(8)をクリックします。
-
外部モデルパッケージを作成したら、以下に示すようにURLのモデルIDをメモします(セキュリティ上の理由から、画像にぼかしを入れています)。
-
モデルレジストリページと展開された新しいパッケージ内で、デプロイタブを選択して、デプロイを新規作成をクリックします。
作成したモデルパッケージからの情報が、事前に入力されたデプロイページに読み込まれます。
-
デプロイに関する不足している情報をすべて入力し、デプロイを作成をクリックします。
-
デプロイ > 概要に移動し、(URLから)デプロイIDをコピーします。
モデルIDとデプロイIDを取得したので、次のセクションで説明するように予測を報告できます。
予測の詳細の報告¶
予測の詳細をDataRobotに報告するには、ポータブル予測サーバーコンテナにいくつかの環境変数を指定する必要があります。
JSONを編集して更新をクリックし、Kubernetesダッシュボードで直接デプロイを更新します。
"env": [
{
"name": "PORTABLE_PREDICTION_API_WORKERS_NUMBER",
"value": "2"
},
{
"name": "PORTABLE_PREDICTION_API_MONITORING_ACTIVE",
"value": "True"
},
{
"name": "PORTABLE_PREDICTION_API_MONITORING_SETTINGS",
"value": "output_type=output_dir;path=/tmp;max_files=50;file_max_size=10240000;model_id=<modelId>;deployment_id=<deployment_id>"
},
{
"name": "MONITORING_AGENT",
"value": "False"
},
{
"name": "MONITORING_AGENT_DATAROBOT_APP_URL",
"value": "https://app.datarobot.com/"
},
{
"name": "MONITORING_AGENT_DATAROBOT_APP_TOKEN",
"value": "<YOUR TOKEN>"
}
]
モデルをKubernetesクラスター(AKS)上のDataRobot外部にデプロイした場合でも、他のモデルと同様に監視し、一元化されたダッシュボードでサービスの正常性とデータのドリフトを追跡できます(以下を参照)。