Trénujte LLM pomocí Raye v AKS

V tomto článku odešlete úlohu RayJob, která pomocí LLaMA-Factory a distribuovaného Ray Train jemně doladí model Qwen2.5-7B-Instruct na datové sadě viggo NLG. Úloha používá čtyři pracovní procesy, z nichž každý má jedno GPU, čte trénovací data z Azure Blob Storage a nahrává natrénovaný adaptér LoRA pro následnou inferenci.

Important

Opensourcový software je zmíněn v dokumentaci a ukázkách AKS. Software, které nasadíte, je vyloučeno z dohod o úrovni služeb AKS, omezené záruky a podpory Azure. Při používání open-source technologií spolu s AKS konzultujte dostupné možnosti podpory od příslušných komunit a správců projektů, abyste vytvořili plán.

Microsoft přebírá odpovědnost za vytváření balíčků s otevřeným zdrojovým kódem, které nasazujeme na AKS. Tato odpovědnost zahrnuje plnou správu procesu sestavení, skenování, podepisování, validace a hotfixů, spolu s kontrolou nad binárními soubory v kontejnerových obrazech. Další informace najdete v tématu Řízení zranitelností pro AKS a Podpora pro AKS a rozsah pokrytí.

Prerequisites

  • Infrastruktura nasazená po nasazení infrastruktury pro Ray a Kueue v AKS
  • Fronty Kueue nakonfigurované podle Konfigurace front Kueue pro úlohy Ray v AKS.
  • V clusteru musí být k dispozici alespoň čtyři GPU A100 (v tomto příkladu se používají čtyři workery, každý s jedním GPU).
  • Datová sada Viggo byla nahrána do úložiště objektů blob v umístění llm-pipeline/data/ (automaticky modulem Terraform pro infrastrukturu).
  • envsubst nainstalováno (gettext balíček v Linuxu, brew install gettext v macOS).

Nastavení proměnných prostředí

Přejděte do příkladu trénování LLM v naklonovaném úložišti a nakonfigurujte požadované proměnné prostředí:

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

Note

Pokud jste nakonfigurovali týmové fronty (možnost B), nastavte export QUEUE_NAME=team-a nebo export QUEUE_NAME=team-b před spuštěním source env.example. Výchozí QUEUE_NAME=default funguje pouze s jednofrontovou konfigurací (možnost A).

Odeslání úlohy

Odešlete distribuovanou trénovací úlohu RayJob:

./submit.sh

Skript vytvoří objekt ConfigMap z trénovacího skriptu, vykreslí šablonu manifestu se čtyřmi pracovními procesy GPU prostřednictvím envsubsta použije ji. Kueue připouští úlohu, když jsou v nakonfigurované frontě k dispozici čtyři GPU.

Tip

Spusťte ./submit.sh --dry-run, chcete-li ověřit vykreslený manifest bez jeho použití v clusteru.

Monitorování postupu

Pokud jste v novém prostředí, vyhledejte a exportujte název úlohy:

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

Podívejte se na stav RayJob a přijetí Kueue:

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

Očekávaný výstup po dokončení úlohy:

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

Sledujte logy hlavního podu:

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

Ověření výsledků

Zkontrolujte nahraný adaptér LoRA:

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

Očekávaný výstup:

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

Ověřte, že byl zapsán ukazatel latest.txt (používá ho například dávkové vyhodnocování pro automatické zjišťování):

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

Očekávaný výstup:

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

Referenční informace ke konfiguraci

Proměnné Výchozí Description
AZURE_STORAGE_ACCOUNT_NAME (povinné) Účet úložiště z modulu 1
NUM_WORKERS 4 Repliky GPU workerů (4x, každá s 1 GPU)
QUEUE_NAME default Název Kueue LocalQueue
LLM_DATA_CONTAINER llm-pipeline Kontejner objektů blob pro vstupní data
LLM_LORA_CONTAINER llm-pipeline Kontejner objektů blob pro nahrání modelu LoRA
CONFIGMAP_NAME llm-training-scripts Název objektu ConfigMap s trénovacím skriptem

Vyčistěte zdroje

Odstraňte RayJob a jeho objekt ConfigMap:

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

Další kroky