この記事では、ray Serve on Azure Kubernetes Service (AKS)を使用して、微調整された Aurora 気象モデルを永続的な HTTP エンドポイントとしてデプロイします。 このメソッドは、有効期間の長いサービスに RayService リソースを使用します。Kueue による入場管理は行われません。
重要
オープンソース ソフトウェアは、AKS のドキュメントとサンプル全体で説明されています。 デプロイするソフトウェアは、AKS サービス レベル アグリーメント、限定保証、Azure サポートから除外されます。 AKS と共にオープンソース テクノロジを使用する場合は、それぞれのコミュニティとプロジェクト保守担当者から受けられるサポート オプションを調べ、計画を策定してください。
Microsoft は、AKS 上に展開するオープンソース パッケージを構築する責任を負います。 その責任には、ビルド、スキャン、署名、検証、修正プログラム プロセスの完全な所有権と、コンテナー イメージ内のバイナリの制御権が伴います。 詳細については、「AKS の脆弱性の管理」と「AKS のサポート範囲」を参照してください。
前提条件
- AKS 上に Ray と Kueue のインフラストラクチャをデプロイするに従ってデプロイされたインフラストラクチャ。
- AKS での Ray ワークロード用の Kueue キューの構成に従って作成された名前空間とサービス アカウント。
-
AKS 上の Ray を使用して Aurora 気象モデルを微調整した後、Aurora の微調整が完了しました。LoRA チェックポイントは BLOB ストレージ内の
aurora/checkpoints/<run-id>/last.safetensorsに存在する必要があります。 -
envsubstインストール済み (Linuxgettextパッケージ、macOSbrew install gettext)。
環境変数の設定
複製されたリポジトリのオンライン サービスの例に移動し、必要な環境変数を構成します。
cd <path-to-cloned-repo>/AKS/examples/kueue-and-ray-on-aks/3-workloads/online-serving
export AZURE_STORAGE_ACCOUNT_NAME=$(terraform -chdir=../../1-infrastructure/terraform output -raw storage_account_name)
export AURORA_RUN_ID=<your-aurora-finetune-job-name>
source env.example
注
AURORA_RUN_ID は、完了した Aurora のファインチューニング実行で得られた JOB_NAME です。 次の方法で見つけることができます。
az storage blob list -c aurora --prefix checkpoints/ \
--account-name ${AZURE_STORAGE_ACCOUNT_NAME} --auth-mode login -o table
サービスをデプロイする
RayService をデプロイします。
./submit-service.sh
このスクリプトは、サービス側のアプリケーション コードから ConfigMap を作成し、 envsubstを介して RayService マニフェストをレンダリングして適用します。 KubeRay オペレーターが Ray クラスターを作成し、Serve アプリケーションをデプロイします。
Tip
./submit-service.sh --dry-runを実行して、レンダリングされたマニフェストをクラスターに適用せずに検証します。
注
RayService は、Kueue によって受付管理されていません。 ワークロードの提供は有効期間が長く、バッチ キュー セマンティクスではなく専用のリソースが必要です。
デプロイメントを確認する
RayService が Running と表示されるまで待ちます:
kubectl -n ray get rayservice ${SERVICE_NAME} -w
予想される出力:
NAME SERVICE STATUS NUM SERVE ENDPOINTS
aurora-serve Running 1
エンドポイントをテストする
serve サービスをポートフォワードし、テストリクエストを送信します。
kubectl -n ray port-forward svc/${SERVICE_NAME}-serve-svc 8000:8000
ヘルスチェック:
curl http://localhost:8000${ROUTE_PREFIX}
予想される出力:
{"status":"ok","gpu_name":"NVIDIA A100-SXM4-80GB","run_id":"<your-run-id>","adapter":"checkpoints/<your-run-id>/last.safetensors"}
予測要求:
curl -X POST http://localhost:8000${ROUTE_PREFIX} \
-H 'Content-Type: application/json' \
-d '{"init_file": "init-2021-01-01-00z.npz", "lead_hours": 6}'
予想される出力:
{
"init_file": "init-2021-01-01-00z.npz",
"lead_hours": 6,
"surface_variables": {
"2t": {"shape": [1,1,52,100], "mean": 298.76, "min": 272.0, "max": 302.0},
"10u": {"shape": [1,1,52,100], "mean": -2.21, "min": -18.0, "max": 15.38},
"10v": {"shape": [1,1,52,100], "mean": 0.92, "min": -13.88,"max": 18.88},
"msl": {"shape": [1,1,52,100], "mean": 101320.07, "min": 100352.0, "max": 101888.0}
},
"gpu_name": "NVIDIA A100-SXM4-80GB",
...
}
応答には、予測の各サーフェス変数の変数ごとのサマリー統計 (図形、平均、最小値、最大値) が含まれます。
構成のリファレンス
| Variable | Default | Description |
|---|---|---|
AZURE_STORAGE_ACCOUNT_NAME |
(必須) | モジュール 1 のストレージ アカウント |
AURORA_RUN_ID |
(必須) | aurora-finetune の実行完了後の JOB_NAME |
AURORA_INPUT_CONTAINER |
aurora |
init データを含むコンテナー |
AURORA_ADAPTER_CONTAINER |
aurora |
LoRA チェックポイントを持つコンテナー |
AURORA_INIT_FILE |
init-2021-01-01-00z.npz |
リクエスト用の既定の初期化ファイル |
AURORA_LEAD_HOURS |
6 |
既定の予測リード タイム (6 時間の倍数にする必要があります) |
AURORA_LORA_RANK |
8 |
LoRAのランク(学習時の設定と一致している必要があります) |
AURORA_REQUIRE_GPU_NAME |
A100 |
GPU名の確認(空欄でスキップ) |
SERVICE_NAME |
aurora-serve |
RayService リソースの名前 |
ROUTE_PREFIX |
/aurora |
サービス エンドポイントの HTTP ルート プレフィックス |
CONFIGMAP_NAME |
aurora-serve-scripts |
サービス スクリプトを保持している ConfigMap の名前 |
リソースをクリーンアップする
RayService とその ConfigMap を削除します。
kubectl -n ray delete rayservice ${SERVICE_NAME}
kubectl -n ray delete configmap ${CONFIGMAP_NAME}