Jalankan inferensi batch dengan Ray di AKS

Dalam artikel ini, Anda mengajukan RayJob yang menjalankan inferensi batch offline vLLM menggunakan adaptor LoRA yang dihasilkan oleh contoh pelatihan LLM. Tugas tersebut membaca split data uji Viggo dan adaptor LoRA dari Azure Blob Storage, menghasilkan prediksi menggunakan satu GPU, dan mengunggah hasilnya.

Penting

Perangkat lunak sumber terbuka disebutkan di seluruh dokumentasi dan sampel AKS. Perangkat lunak yang Anda sebarkan dikecualikan dari perjanjian tingkat layanan AKS, garansi terbatas, dan dukungan Azure. Saat Anda menggunakan teknologi sumber terbuka bersama AKS, konsultasikan opsi dukungan yang tersedia dari masing-masing komunitas dan pengelola proyek untuk mengembangkan rencana.

Microsoft bertanggung jawab untuk membangun paket sumber terbuka yang kami sebarkan di AKS. Tanggung jawab itu termasuk memiliki kepemilikan lengkap atas proses build, pemindaian, penandatanganan, validasi, dan perbaikan cepat, bersama dengan kontrol atas file biner dalam gambar kontainer. Untuk informasi selengkapnya, lihat Manajemen kerentanan untuk AKS dan Cakupan dukungan AKS.

Prasyarat

Mengatur variabel lingkungan

Navigasikan ke contoh inferensi batch di repositori kloning dan konfigurasikan variabel lingkungan yang diperlukan:

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

Catatan

Jika Anda mengonfigurasi antrean tim (Opsi B), atur export QUEUE_NAME=team-a atau export QUEUE_NAME=team-b sebelum menjalankan source env.example. Default QUEUE_NAME=default hanya berfungsi dengan konfigurasi antrean tunggal (Opsi A).

Kirim beban kerja

Kirimkan inferensi batch RayJob:

./submit.sh

Skrip membuat ConfigMap dari skrip inferensi, merender templat manifes menggunakan envsubst, lalu menerapkannya. Kueue mengakui pekerjaan ketika 1 GPU tersedia dalam antrean yang dikonfigurasi.

Tip

Jalankan ./submit.sh --dry-run untuk memvalidasi manifes yang dirender tanpa menerapkannya ke kluster.

Memantau kemajuan

Temukan dan ekspor nama pekerjaan jika Anda berada di shell baru:

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

Pantau status RayJob dan status penerimaan Kueue:

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

Output yang diharapkan ketika pekerjaan selesai:

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

Pantau log pekerja:

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

Memverifikasi hasil

Mencantumkan file prediksi dalam penyimpanan blob:

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

Output yang diharapkan:

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

Unduh dan periksa prediksi:

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

Output yang diharapkan:

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

Referensi konfigurasi

Variabel Default Description
AZURE_STORAGE_ACCOUNT_NAME (diperlukan) Akun penyimpanan dari Modul 1
JOB_NAME batch-inference-<timestamp> Nama RayJob unik
QUEUE_NAME default Nama Antrean Lokal Kueue
LLM_DATA_CONTAINER llm-pipeline Kontainer blob dengan data pengujian viggo
LLM_LORA_CONTAINER llm-pipeline Wadah blob dengan adaptor LoRA
CONFIGMAP_NAME batch-inference-scripts Nama untuk ConfigMap yang menyimpan skrip inferensi

Membersihkan sumber daya

Hapus RayJob dan ConfigMap-nya:

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

Untuk meruntuhkan semua infrastruktur, lihat Menyebarkan infrastruktur — Membersihkan sumber daya.

Langkah berikutnya