この記事では、 LLM トレーニングの例で生成された LoRA アダプターを使用して vLLM オフライン バッチ推論を実行する RayJob を送信します。 ジョブは、viggo テスト分割と LoRA アダプターをAzure Blob Storageから読み取り、1 つの GPU で予測を生成し、結果をアップロードします。
重要
オープンソース ソフトウェアは、AKS のドキュメントとサンプル全体で説明されています。 デプロイするソフトウェアは、AKS サービス レベル アグリーメント、限定保証、Azure サポートから除外されます。 AKS と共にオープンソース テクノロジを使用する場合は、それぞれのコミュニティとプロジェクト保守担当者から受けられるサポート オプションを調べ、計画を策定してください。
Microsoft は、AKS 上に展開するオープンソース パッケージを構築する責任を負います。 その責任には、ビルド、スキャン、署名、検証、修正プログラム プロセスの完全な所有権と、コンテナー イメージ内のバイナリの制御権が伴います。 詳細については、「AKS の脆弱性の管理」と「AKS のサポート範囲」を参照してください。
前提条件
- AKS 上に Ray と Kueue のインフラストラクチャをデプロイするに従ってデプロイされたインフラストラクチャ。
- AKS 上の Ray ワークロード用に Kueue キューを構成した後に構成された Kueue キュー。
- クラスターで使用可能な A100 GPU が少なくとも 1 つ。
- LLM トレーニングは、 AKS で Ray を使用して LLM をトレーニング した後に完了しました。LoRA アダプターは BLOB ストレージ内の
llm-pipeline/lora/に存在する必要があります。 -
envsubstインストール済み (Linuxgettextパッケージ、macOSbrew install gettext)。
環境変数の設定
複製されたリポジトリのバッチ推論の例に移動し、必要な環境変数を構成します。
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}
すべてのインフラストラクチャを破棄するには、「 インフラストラクチャのデプロイ - リソースのクリーンアップ」を参照してください。