AKS üzerinde Ray ile toplu çıkarım çalıştırma

Bu makalede, LLM eğitim örneği tarafından oluşturulan LoRA bağdaştırıcısını kullanarak vLLM ile çevrimdışı toplu çıkarım çalıştıran bir RayJob gönderirsiniz. İş, Azure Blob Depolama'dan viggo test bölümünü ve LoRA bağdaştırıcısını okur, tek bir GPU'da tahminler oluşturur ve sonuçları yükler.

Önemli

AKS dokümantasyonu ve örneklerinde açık kaynaklı yazılımdan bahsedilmektedir. Dağıttığınız yazılım, AKS hizmet düzeyi anlaşmalarından, sınırlı garanti ve Azure desteğinden hariç tutulur. AKS ile birlikte açık kaynak teknolojisini kullanırken, bir plan geliştirmek için ilgili topluluklar ve proje sorumlularından mevcut olan destek seçeneklerine danışın.

Microsoft, AKS üzerinde dağıttığımız açık kaynak paketlerinin oluşturulmasından sorumluluk alır. Bu sorumluluk, yapı, tarama, imzalama, doğrulama ve hızlı düzeltme sürecinin tam sahipliğini içermenin yanı sıra, konteyner görüntülerindeki ikili dosyaların kontrolünü de kapsar. Daha fazla bilgi için AKS için güvenlik açığı yönetimi ve AKS destek kapsamı başlıklarına bakın.

Önkoşullar

Ortam değişkenlerini ayarlama

Kopyalanan depodaki toplu çıkarım örneğine gidin ve gerekli ortam değişkenlerini yapılandırın:

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

Not

Ekip kuyruklarını yapılandırdıysanız (Seçenek B), source env.example öğesini çalıştırmadan önce export QUEUE_NAME=team-a veya export QUEUE_NAME=team-b ayarlayın. Varsayılan değer QUEUE_NAME=default yalnızca tek sıralı yapılandırmayla (Seçenek A) çalışır.

İş yükünü gönderme

Toplu çıkarım RayJob'unu gönderin:

./submit.sh

Betik, çıkarım betiğinden bir ConfigMap oluşturur, bildirim şablonunu envsubst aracılığıyla işler ve uygular. Kueue, yapılandırılan kuyrukta 1 GPU kullanılabilir olduğunda işi kabul eder.

Tip

İşlenen bildirimi kümeye uygulamadan doğrulamak için komutunu çalıştırın ./submit.sh --dry-run .

İlerlemeyi izleme

Yeni bir kabuktaysanız iş adını bulun ve dışarı aktarın:

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

RayJob durumunu ve Kueue kabulünü izleyin:

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

İş tamamlandığında beklenen çıkış:

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

Çalışan günlüklerini takip edin:

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

Sonuçları doğrulama

Blob depolamada tahmin dosyalarını listeleme:

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

Beklenen çıkış:

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

Tahminleri indirin ve inceleyin:

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

Beklenen çıkış:

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

Yapılandırma referansı

Değişken Varsayılan Description
AZURE_STORAGE_ACCOUNT_NAME (gerekli) Modül 1'den depolama hesabı
JOB_NAME batch-inference-<timestamp> Benzersiz RayJob adı
QUEUE_NAME default Kueue LocalQueue adı
LLM_DATA_CONTAINER llm-pipeline Viggo test verileri içeren blob kapsayıcısı
LLM_LORA_CONTAINER llm-pipeline LoRA bağdaştırıcıları olan blob kapsayıcısı
CONFIGMAP_NAME batch-inference-scripts Çıkarım betiğini tutan ConfigMap'in adı

Kaynakları temizle

RayJob'ı ve ConfigMap'ini silin:

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

Tüm altyapıyı yıkmak için bkz. Altyapı dağıtma — Kaynakları temizleme.

Sonraki Adımlar