Ray on AKS でバッチ推論を実行する

この記事では、 LLM トレーニングの例で生成された LoRA アダプターを使用して vLLM オフライン バッチ推論を実行する RayJob を送信します。 ジョブは、viggo テスト分割と LoRA アダプターをAzure Blob Storageから読み取り、1 つの GPU で予測を生成し、結果をアップロードします。

重要

オープンソース ソフトウェアは、AKS のドキュメントとサンプル全体で説明されています。 デプロイするソフトウェアは、AKS サービス レベル アグリーメント、限定保証、Azure サポートから除外されます。 AKS と共にオープンソース テクノロジを使用する場合は、それぞれのコミュニティとプロジェクト保守担当者から受けられるサポート オプションを調べ、計画を策定してください。

Microsoft は、AKS 上に展開するオープンソース パッケージを構築する責任を負います。 その責任には、ビルド、スキャン、署名、検証、修正プログラム プロセスの完全な所有権と、コンテナー イメージ内のバイナリの制御権が伴います。 詳細については、「AKS の脆弱性の管理」と「AKS のサポート範囲」を参照してください。

前提条件

環境変数の設定

複製されたリポジトリのバッチ推論の例に移動し、必要な環境変数を構成します。

cd <path-to-cloned-repo>/AKS/examples/kueue-and-ray-on-aks/3-workloads/batch-inference
export AZURE_STORAGE_ACCOUNT_NAME=$(terraform -chdir=../../1-infrastructure/terraform output -raw storage_account_name)
source env.example

チーム キュー (オプション B) を構成した場合は、export QUEUE_NAME=team-aを実行する前にexport QUEUE_NAME=team-bまたはsource env.exampleを設定します。 既定の QUEUE_NAME=default は、単一キュー構成 (オプション A) でのみ機能します。

ワークロードを送信する

バッチ推論 RayJob を送信します。

./submit.sh

このスクリプトは、推論スクリプトから ConfigMap を作成し、 envsubstを介してマニフェスト テンプレートをレンダリングして適用します。 構成されたキューで 1 GPU が使用可能な場合、Kueue はジョブを許可します。

Tip

./submit.sh --dry-runを実行して、レンダリングされたマニフェストをクラスターに適用せずに検証します。

進行状況の監視

新しいシェルを使用している場合は、ジョブ名を検索してエクスポートします。

export JOB_NAME=$(kubectl -n ray get rayjob --no-headers -o custom-columns=":metadata.name" | grep batch-inference)

RayJob の状態と Kueue の受付状況を確認します。

kubectl -n ray get rayjob ${JOB_NAME} -w
kubectl -n ray get workload -w

ジョブの完了時に予想される出力:

NAME                         JOB STATUS   DEPLOYMENT STATUS   START TIME             END TIME               AGE
batch-inference-xxxxxxxxxx   SUCCEEDED    Complete            2026-01-01T00:00:00Z   2026-01-01T00:09:00Z   9m
NAME                                      QUEUE     RESERVED IN     ADMITTED   FINISHED   AGE
rayjob-batch-inference-xxxxxxxxxx-xxxxx   default   cluster-queue   True       True       9m

作業者のログを追跡します。

kubectl -n ray logs -l ray.io/cluster=$(kubectl -n ray get rayjob ${JOB_NAME} -o jsonpath='{.status.rayClusterName}') -f --tail=100

結果を確認する

BLOB ストレージ内の予測ファイルを一覧表示します。

az storage blob list -c llm-pipeline --prefix "inference/${JOB_NAME}/" \
  --account-name ${AZURE_STORAGE_ACCOUNT_NAME} --auth-mode login -o table

予想される出力:

Name                                                 Blob Type    Blob Tier    Length    Content Type
---------------------------------------------------  -----------  -----------  --------  ------------------------
inference/<job-name>/metrics.json                    BlockBlob    Hot          128       application/octet-stream
inference/<job-name>/predictions.jsonl               BlockBlob    Hot          411777    application/octet-stream

予測をダウンロードして検査します。

az storage blob download -c llm-pipeline \
  -n "inference/${JOB_NAME}/predictions.jsonl" \
  --account-name ${AZURE_STORAGE_ACCOUNT_NAME} --auth-mode login \
  --file /tmp/predictions.jsonl
head -1 /tmp/predictions.jsonl | python3 -m json.tool

予想される出力:

{
    "input": "I'm wondering, have you played any games you found genuinely shocking?",
    "expected": "request(specifier[shocking])",
    "generated": "request_explanation"
}

構成のリファレンス

Variable Default Description
AZURE_STORAGE_ACCOUNT_NAME (必須) モジュール 1 のストレージ アカウント
JOB_NAME batch-inference-<timestamp> 一意の RayJob 名
QUEUE_NAME default Kueue LocalQueue の名前
LLM_DATA_CONTAINER llm-pipeline viggo テスト データを含む BLOB コンテナー
LLM_LORA_CONTAINER llm-pipeline LoRA アダプターを含む BLOB コンテナー
CONFIGMAP_NAME batch-inference-scripts 推論スクリプトを保持する ConfigMap の名前

リソースをクリーンアップする

RayJob とその ConfigMap を削除します。

kubectl -n ray delete rayjob ${JOB_NAME}
kubectl -n ray delete configmap ${CONFIGMAP_NAME}

すべてのインフラストラクチャを破棄するには、「 インフラストラクチャのデプロイ - リソースのクリーンアップ」を参照してください。

次のステップ