Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Neste artigo, submetes um RayJob que afina o Qwen2.5-7B-Instruct no conjunto de dados viggo NLG usando LLaMA-Factory e Ray Train distribuído. A tarefa utiliza quatro workers, cada um com uma GPU, lê os dados de treino do Armazenamento de Blobs do Azure e envia o adaptador LoRA treinado para inferência em etapas posteriores.
Importante
O software de código aberto é mencionado em toda a documentação e amostras do AKS. O software que você implanta é excluído dos contratos de nível de serviço do AKS, da garantia limitada e do suporte do Azure. Ao usar a tecnologia de código aberto ao lado do AKS, consulte as opções de suporte disponíveis nas respetivas comunidades e mantenedores do projeto para desenvolver um plano.
A Microsoft assume a responsabilidade pela criação dos pacotes de código aberto que implantamos no AKS. Essa responsabilidade inclui ter a propriedade completa do processo de compilação, digitalização, assinatura, validação e correção rápida, juntamente com o controlo dos binários nas imagens de contentor. Para obter mais informações, consulte Gestão de vulnerabilidades para AKS e Cobertura de suporte AKS.
Pré-requisitos
- Infraestrutura implementada seguindo Implementar a infraestrutura para Ray e Kueue no AKS.
- Filas do Kueue configuradas de acordo com Configurar filas do Kueue para cargas de trabalho do Ray no AKS.
- Pelo menos quatro GPUs A100 disponíveis no cluster (este exemplo usa quatro trabalhadores com uma GPU cada).
- Conjunto de dados Viggo carregado no armazenamento de blobs em
llm-pipeline/data/(efetuado automaticamente pelo módulo de infraestrutura do Terraform). -
envsubstinstalado (gettextpacote para Linux,brew install gettextno macOS).
Definir variáveis de ambiente
Navegue até ao exemplo de treino do LLM no repositório clonado e configure as variáveis de ambiente necessárias:
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
Nota
Se configurou filas de equipa (Opção B), defina export QUEUE_NAME=team-a ou export QUEUE_NAME=team-b antes de executar source env.example. O padrão QUEUE_NAME=default só funciona com a configuração de fila única (Opção A).
Enviar a carga de trabalho
Submeta o RayJob de treino distribuído:
./submit.sh
O script cria um ConfigMap a partir do script de treino, renderiza o modelo de manifesto com quatro trabalhadores da GPU via envsubst, e aplica-o. Kueue admite a tarefa quando quatro GPUs estão disponíveis na fila configurada.
Sugestão
Execute ./submit.sh --dry-run para validar o manifesto renderizado sem o aplicar ao cluster.
Monitorizar progresso
Localize e exporte o nome da tarefa caso esteja numa nova shell:
export JOB_NAME=$(kubectl -n ray get rayjob --no-headers -o custom-columns=":metadata.name" | grep llm-training)
Monitorize o estado do RayJob e a admissão do Kueue:
kubectl -n ray get rayjob ${JOB_NAME} -w
kubectl -n ray get workload -w
Saída esperada quando o trabalho for concluído:
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
Siga os registos do pod head:
kubectl -n ray logs -f -l ray.io/cluster=$(kubectl -n ray get rayjob ${JOB_NAME} -o jsonpath='{.status.rayClusterName}') -c ray-head
Verificar resultados
Verifica o upload do adaptador LoRA:
az storage blob list -c llm-pipeline --prefix lora/ \
--account-name ${AZURE_STORAGE_ACCOUNT_NAME} --auth-mode login -o table
Produção esperada:
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
Verifique se foi gravado o ponteiro latest.txt (usado pelo exemplo de inferência em lote para deteção automática):
az storage blob download -c llm-pipeline -n lora/latest.txt \
--account-name ${AZURE_STORAGE_ACCOUNT_NAME} --auth-mode login
Produção esperada:
azure://llm-pipeline@<storage-account>.blob.core.windows.net/lora/<job-name>
Referência de configuração
| Variável | Predefinição | Description |
|---|---|---|
AZURE_STORAGE_ACCOUNT_NAME |
(obrigatório) | Conta de armazenamento do Módulo 1 |
NUM_WORKERS |
4 |
Réplicas de trabalhadores de GPU (4 x 1 GPU cada) |
QUEUE_NAME |
default |
Nome da LocalQueue do Kueue |
LLM_DATA_CONTAINER |
llm-pipeline |
Contentor de blob para dados de entrada |
LLM_LORA_CONTAINER |
llm-pipeline |
Contentor de blob para carregamento do LoRA |
CONFIGMAP_NAME |
llm-training-scripts |
Nome para o ConfigMap que contém o script de treino |
Limpeza de recursos
Apague o RayJob e o seu ConfigMap:
kubectl -n ray delete rayjob ${JOB_NAME}
kubectl -n ray delete configmap ${CONFIGMAP_NAME}