AKS’de Ray ile bir LLM eğitin

Bu makalede, LLaMA-Factory ve dağıtılmış Ray Train kullanarak Qwen2.5-7B-Instruct'ı viggo NLG veri kümesinde ince ayarlayan bir RayJob gönderirsiniz. İş, her biri bir GPU’ya sahip dört çalışan kullanır, eğitim verilerini Azure Blob Depolama’dan okur ve eğitilmiş LoRA bağdaştırıcısını sonraki çıkarım işlemleri için 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 LLM eğitim ö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/llm-training
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

Dağıtılmış eğitim RayJob’unu gönderin:

./submit.sh

Betik, eğitim betiğinden bir ConfigMap oluşturur, envsubst aracılığıyla dört GPU çalışanıyla bildirim şablonunu oluşturur ve uygular. Kueue, yapılandırılan kuyrukta dört 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 llm-training)

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
llm-training-xxxxxxxxxx   SUCCEEDED    Complete            2026-01-01T00:00:00Z   2026-01-01T00:19:00Z   19m
NAME                                   QUEUE     RESERVED IN     ADMITTED   FINISHED   AGE
rayjob-llm-training-xxxxxxxxxx-xxxxx   default   cluster-queue   True       True       19m

Baş pod günlüklerini takip edin:

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

Sonuçları doğrulama

LoRA adaptörünün yüklemesini kontrol edin:

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

Beklenen çıkış:

Name                                       Blob Type    Blob Tier    Length    Content Type
-----------------------------------------  -----------  -----------  --------  ------------------------
lora/latest.txt                            BlockBlob    Hot          86        application/octet-stream
lora/<job-name>/rng_state_3.pth            BlockBlob    Hot          14725     application/octet-stream

latest.txt işaretçisinin yazıldığını doğrulayın (otomatik bulma için toplu çıkarım örneğinde kullanılır):

az storage blob download -c llm-pipeline -n lora/latest.txt \
  --account-name ${AZURE_STORAGE_ACCOUNT_NAME} --auth-mode login

Beklenen çıkış:

azure://llm-pipeline@<storage-account>.blob.core.windows.net/lora/<job-name>

Yapılandırma referansı

Değişken Varsayılan Description
AZURE_STORAGE_ACCOUNT_NAME (gerekli) Modül 1'den depolama hesabı
NUM_WORKERS 4 GPU worker kopyaları (her biri 1 GPU olmak üzere 4 adet)
QUEUE_NAME default Kueue LocalQueue adı
LLM_DATA_CONTAINER llm-pipeline Giriş verileri için blob kapsayıcısı
LLM_LORA_CONTAINER llm-pipeline LoRA yükleme için Blob kapsayıcısı
CONFIGMAP_NAME llm-training-scripts Eğitim 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}

Sonraki Adımlar