Este guia mostra como usar o ecossistema NVIDIA NeMo num cluster de preparação gerido para o desenvolvimento de modelos de IA generativa completos. Fornece instruções passo a passo para os seguintes fluxos de trabalho distintos, mas relacionados, cada um abordado na sua própria secção dedicada:
- NVIDIA NeMo: para o desenvolvimento de modelos fundamentais, siga estas instruções para realizar a pré-preparação em grande escala, a pré-preparação contínua (CPT) e o ajuste fino supervisionado (SFT).
- NVIDIA NeMo-RL: para o alinhamento de modelos e o ajuste de preferências, use esta secção para aplicar técnicas avançadas, como a aprendizagem por reforço (RL), para alinhar o seu modelo com instruções e preferências humanas.
Quer esteja a criar um modelo de raiz ou a refinar um existente, este documento explica como configurar o seu ambiente, gerir tarefas em contentores e iniciar scripts de preparação no cluster.
NVIDIA NeMo
A estrutura NVIDIA NeMo é uma plataforma ponto a ponto para criar, personalizar e implementar modelos de IA generativa. Esta secção do guia destina-se especificamente a programadores e investigadores focados nas fases fundamentais do desenvolvimento de modelos. Fornece instruções passo a passo para usar o NeMo para realizar a pré-formação em grande escala, a pré-formação contínua (CPT) e o ajuste fino supervisionado (SFT) num cluster de formação gerido.
Este guia de clusters de preparação fornece o fluxo de trabalho completo para executar uma tarefa de preparação com a framework NeMo. O processo está dividido em duas partes principais: a configuração inicial única do seu ambiente e os passos recorrentes para iniciar uma tarefa.
Configure o seu ambiente
Antes de iniciar uma tarefa, tem de preparar o seu ambiente certificando-se de que tem uma imagem de contentor e os scripts de preparação necessários.
Prepare uma imagem de contentor
Tem duas opções para a imagem do contentor: usar uma imagem pré-criada (recomendado) ou criar uma personalizada.
Usar uma imagem pré-criada (recomendado)
As imagens de contentores pré-criadas são fornecidas no formato .squashfs. Copie a imagem adequada para a sua região para o diretório de trabalho.
# Example for the US region
gcloud storage cp gs://vmds-containers-us/nemo_squashfs/nemo-20250721.sqsh .
Crie um contentor personalizado (avançado)
Siga estes passos apenas se os contentores pré-criados não satisfizerem as suas necessidades.
Este procedimento explica como converter uma imagem de contentor personalizada no formato .squashfs usando o enroot.
Passo 1: autentique com o Google Cloud.
Use os seguintes comandos para garantir que a sua Google Cloud conta de utilizador e o registo do Docker onde a sua imagem está alojada estão autenticados:
gcloud auth login
gcloud auth configure-docker us-docker.pkg.dev
Passo 2: crie o script de conversão.
Crie um ficheiro com o nome enroot-convert.sh e adicione o seguinte conteúdo do script. Antes de executar este script, tem de atualizar as variáveis REMOTE_IMG e LOCAL_IMG para apontarem para a imagem do contentor e o caminho de saída escolhido.
#!/bin/bash
#SBATCH --gpus-per-node=8
#SBATCH --exclusive
#SBATCH --mem=0
#SBATCH --ntasks-per-node=1
# Run this script on the slurm login node:
# sbatch -N 1 enroot-convert.sh
set -x
set -e
# The remote docker image URI.
REMOTE_IMG="docker://us-docker.pkg.dev/{YOUR_CONTAINER_IMG_URI}:{YOUR_CONTAINER_IMAGE_TAG}"
# The local path to the to be imported enroot squash file.
LOCAL_IMG="${HOME}/my_nemo.sqsh"
# The path to the enroot config file.
TMP_ENROOT_CONFIG_PATH="/tmp/\$(id -u --name)/config/enroot"
# Download the docker image to each node.
srun -l -N "${SLURM_NNODES}" \
bash -c "
mkdir -p ${TMP_ENROOT_CONFIG_PATH};
echo 'machine us-docker.pkg.dev login oauth2accesstoken password $(gcloud auth print-access-token)' > ${TMP_ENROOT_CONFIG_PATH}/.credentials;
rm -f ${LOCAL_IMG};
ENROOT_CONFIG_PATH=${TMP_ENROOT_CONFIG_PATH} ENROOT_MAX_PROCESSORS=$(( $(nproc) / 2 )) enroot import -o ${LOCAL_IMG} ${REMOTE_IMG};
"
Passo 3: execute o script e valide o resultado.
Execute o script no nó de início de sessão do Slurm.
sbatch -N 1 enroot-convert.sh
Após a conclusão da tarefa, encontre os registos de conversão num ficheiro denominado
slurm-<JOB_ID>.out e a imagem do contentor final no caminho especificado
para LOCAL_IMG.
Transfira as receitas de preparação
As receitas de preparação são armazenadas num repositório googlesource.com privado.
Para aceder a estes ficheiros com a linha de comandos do Git, tem de gerar primeiro credenciais de
autenticação.
Gere credenciais de autenticação.
Aceda ao seguinte URL e siga as instruções no ecrã. Esta ação configura o seu ambiente local para autenticar com o repositório. https://www.googlesource.com/new-password
Clone o repositório.
Depois de as credenciais serem autenticadas, execute o seguinte comando para transferir as receitas.
git clone https://vertex-model-garden.googlesource.com/vertex-oss-training
Inicie uma tarefa de preparação
Depois de configurar o ambiente, pode iniciar uma tarefa de preparação.
Passo 1: defina as variáveis de ambiente
As seguintes variáveis de ambiente podem ser necessárias para o seu trabalho:
- O
HF_TOKENé necessário para transferir modelos e conjuntos de dados do Hugging Face. - O
WANDB_API_KEYé necessário para usar o Weights & Biases para a análise de experiências.
export HF_TOKEN=YOUR_HF_TOKEN
export WANDB_API_KEY=YOUR_WANDB_API_KEY
Passo 2: execute o guião de lançamento
Navegue para o diretório de trabalho e execute o script run.py para iniciar uma tarefa. Este exemplo inicia uma tarefa de preparação de demonstração com o Llama 3.1-2b.
# Set the working directory
export WORK_DIR=$HOME/vertex-oss-training/nemo
cd $WORK_DIR
gcloud storage cp
gs://vmds-containers-<region>/nemo_squashfs/nemo-20250721.sqsh nemo-demo.sqsh
# Launch the training job
export NEMORUN_HOME=$WORK_DIR && \
python3 run.py -e slurm --slurm-type hcc-a3m --partition a3m \
-d $WORK_DIR -i $WORK_DIR/nemo-demo.sqsh \
-s pretrain/llama3p1_2b_pt.py -n 2 \
--experiment-name nemo-demo-run
Parâmetros de lançamento
--slurm-typeé definido com base no tipo de cluster (por exemplo,hcc-a3m,hcc-a3u,hcc-a4).--partitiontem de estar definido como uma partição disponível. Pode verificar os nomes das partições com o comandosinfo.- O script
run.pymonta automaticamente vários diretórios no contentor do Docker, incluindo--log-dir,--cache-dire--data-dir, se estiverem definidos.
Monitorizar o estado e os registos das tarefas
Depois de iniciar a tarefa, é apresentado um bloco de estado:
Experiment Status for nemo-demo-run_1753123402
Task 0: nemo-demo-run
- Status: RUNNING
- Executor: SlurmExecutor on @localhost
- Job id: 75
- Local Directory: $NEMORUN_HOME/experiments/nemo-demo-run/nemo-demo-run_1753123402/nemo-demo-run
Os registos de execução são escritos no caminho apresentado no campo Local Directory do resultado do estado. Por exemplo, pode encontrar os ficheiros de registo num caminho
semelhante ao seguinte:
$NEMORUN_HOME/experiments/nemo-demo-run/nemo-demo-run_1753123402/nemo-demo-run/<JOB_ID>.log
Erros comuns e soluções
Esta secção descreve problemas comuns que podem surgir durante a execução de tarefas e fornece passos recomendados para os resolver.
Erro de partição inválida
Por predefinição, as tarefas tentam ser iniciadas na partição geral. Se a partição geral não existir ou não estiver disponível, a tarefa falha com o seguinte erro:
sbatch: error: invalid partition specified: general
sbatch: error: Batch job submission failed: Invalid partition name specified
Solução:
Especifique uma partição disponível através do argumento --partition ou -p no comando de lançamento.
Para ver uma lista das partições disponíveis, execute o comando sinfo no nó de início de sessão do Slurm.
sinfo
O resultado mostra os nomes das partições disponíveis, como a3u neste exemplo:
| PARTITION | AVAIL | LIMITE.TEMPO | NODES | STATE | NODELIST |
|---|---|---|---|---|---|
| a3u* | cima | infinito | 2 | idle~ | alice-a3u-[2-3] |
| a3u* | cima | infinito | 2 | inativo | alice-a3u-[0-1] |
Erro de transferência do tokenizador
Pode encontrar um OSError relacionado com um link entre dispositivos quando o script tenta transferir o tokenizador GPT2:
OSError: [Errno 18] Invalid cross-device link: 'gpt2-vocab.json' -> '/root/.cache/torch/megatron/megatron-gpt-345m_vocab'
Soluções:
Tem duas opções para resolver este problema:
- Opção n.º 1:
Execute novamente a tarefa. Este erro é frequentemente temporário. Voltar a executar a tarefa com o mesmo
--cache-dirpode resolver o problema. - Opção n.º 2:
Transfira manualmente os ficheiros do tokenizador. Se a nova execução da tarefa falhar,
siga estes passos:
- Transfira os dois ficheiros seguintes:
gpt2-vocab.jsongpt2-merges.txt
- Mova os ficheiros transferidos para a subdiretoria
torch/megatron/na diretoria de cache (por exemplo,<var>YOUR_CACHE_DIR</var>/torch/megatron/). - Mude o nome dos ficheiros da seguinte forma:
- Mude o nome de
gpt2-vocab.jsonparamegatron-gpt-345m_vocab. - Mude o nome de
gpt2-merges.txtparamegatron-gpt-345m_merges.
- Mude o nome de
- Transfira os dois ficheiros seguintes:
NVIDIA NeMo-RL
A framework NVIDIA NeMo-RL foi concebida para alinhar os grandes modelos de linguagem com as preferências e as instruções humanas. Esta secção explica como usar o NeMo-RL num cluster para realizar tarefas de alinhamento avançadas, incluindo o ajuste fino supervisionado (SFT), o ajuste de preferências (como a otimização direta de preferências ou DPO) e a aprendizagem por reforço (RL).
O guia aborda dois fluxos de trabalho principais: executar uma tarefa de preparação em lote padrão e usar o ambiente de desenvolvimento interativo para depuração.
Pré-requisitos
Antes de começar, crie um cluster seguindo as instruções na página Criar cluster ou use um cluster de preparação gerido existente, se tiver um.
Estabeleça ligação ao nó de início de sessão do cluster
Para estabelecer ligação ao nó de início de sessão do cluster, encontre o comando correto da CLI Google Cloud navegando para a página Máquina virtual do Google Compute Engine na consola Google Google Cloud e clicando em SSH > Ver comando da CLI Google Cloud. Vai ter um aspeto semelhante ao seguinte:
ssh $USER_NAME@machine-addr
Exemplo:
ssh $USER_NAME@nic0.sliua3m1-login-001.europe-north1-c.c.infinipod-shared-dev.internal.gcpnode.com
Use a imagem Docker pré-criada
São fornecidos .sqsh ficheiros convertidos para imagens de contentores pré-criadas. Pode
selecionar um contentor para a sua região e defini-lo diretamente como o parâmetro
de imagem do contentor ou transferi-lo para o sistema de ficheiros do cluster.
Para o definir diretamente como o parâmetro de imagem do contentor, use um dos seguintes caminhos.
Tenha em atenção que deve substituir <region> pela sua região específica
(por exemplo, europe, asia, us):
/gcs/vmds-containers-<region>/nemo_rl_squashfs/nemo_rl-h20250923.sqsh
Para transferir a imagem para o armazenamento Lustre do cluster, use o seguinte comando:
gs://vmds-containers-<region>/nemo_rl_squashfs/nemo_rl-h20250923.sqsh DESTINATION
Transferir código
Para aceder à receita de formação com a CLI git, visite https://www.googlesource.com/new-password. Pode transferir a receita com o seguinte comando:
cd $HOME
git clone https://vertex-model-garden.googlesource.com/vertex-oss-training
Inicie tarefas
Passo 1: defina as variáveis de ambiente.
Para extrair modelos e dados do Hugging Face, pode ter de definir o HF_TOKEN.
Para usar o Weights & Biases para a análise de experiências, tem de definir o WANDB_API_KEY. Atualize estas variáveis no seguinte ficheiro:
Ficheiro a atualizar: $HOME/vertex-oss-training/nemo_rl/configs/auth.sh
Se não quiser usar o Weights & Biases, defina logger.wandb_enabled como False
no seu script de lançamento.
Passo 2: transfira ou copie o ficheiro do contentor para a pasta de lançamento.
Eis alguns exemplos.
gcloud storage cp \
gs://vmds-containers-<region>/vmds_nemo_rl_squashfs/nemo_rl-20250923.sqsh \
$HOME/vertex-oss-training/nemo_rl/nemo_rl-h20250923.sqsh
# OR
/gcs/vmds-containers-<region>/vmds_nemo_rl_squashfs/nemo_rl-h20250923.sqsh \
$HOME/vertex-oss-training/nemo_rl/nemo_rl-h20250923.sqsh
cd $HOME/vertex-oss-training/nemo_rl/
# Where region is either `us`, `asia`, or `europe`
Passo 3: prepare ou clone o repositório NeMo-RL.
Crie um clone do código NeMo-RL, se ainda não estiver presente. Tenha em atenção que pode ter de usar git submodule update --init --recursive se já tiver clonado o repositório sem a flag --recursive.
git clone https://github.com/NVIDIA-NeMo/RL --recursive
Passo 4: inicie a tarefa de preparação.
sbatch -N <num_nodes> launch.sh --cluster_type hcc-a3m --job_script algorithms/dpo.sh
Onde:
--cluster-typeé definido com base no tipo de cluster:- A3-Mega:
hcc-a3m - A3-Ultra:
hcc-a3u - A4:
hcc-a4 - A3H:
hcc-a3h
- A3-Mega:
--partitiondeve ser definido em conformidade, ondesinfopode ser usado para verificar as partições do SLURM.
Após o início da tarefa, é criado um novo diretório com o nome do ID da tarefa SLURM na sua localização atual. No interior, encontra todos os registos e pontos de verificação relativos a esta tarefa. Mais precisamente, dentro dessa pasta, encontra os seguintes diretórios e ficheiros:
checkpoints/→ Este diretório está montado no contentor do NeMo-RL e contém todos os pontos de verificação da preparação.ray-logs/→ Este diretório contém os registos do cabeçalho do raio e dos trabalhadores do raio.nemo_rl_output.log→ Este ficheiro contém os registos do Slurm da tarefa enviada.attach.sh(Apenas para tarefas interativas) → Este é um script bash que lhe permite anexar a uma tarefa interativa. Se a tarefa for iniciada com êxito, a criação deste ficheiro pode demorar alguns minutos.
Programação com o NeMo-RL
Configuração interativa
Estão disponíveis duas opções para o desenvolvimento interativo rápido com o NeMo-RL.
nemorlinteractive
Este é um comando auxiliar simples que lhe permite escolher um nó de GPU no cluster (por exemplo, o nó número 5) e, em seguida, acede a um contentor em execução para o NeMo-RL no nó selecionado. Este comando é útil para os fluxos de trabalho de nó único.
Para usar nemorlinteractive, tem de seguir estes passos pré-requisitos:
- Forneça todos os tokens de autorização que quer (por exemplo, HF e WandB) carregados para a tarefa no ficheiro
configs/auth.sh. Defina a variável de ambiente
CLUSTER_TYPEde acordo com a seguinte diretriz:export CLUSTER_TYPE="hcc-a3m" # --> if you have A3-Mega cluster export CLUSTER_TYPE="hcc-a3u" # --> if you have A3-Ultra cluster export CLUSTER_TYPE="hcc-a4" # --> If you have A4 cluster export CLUSTER_TYPE="hcc-a3h" # --> If you have A3H clusterImporte
nemorlinteractiveno seu terminal bash ao obter o ficheirobash_utils.sh:source bash_utils.shExecute o comando
nemorlinteractive. Por exemplo:# Assuming you want to take the compute node number 5. nemorlinteractive 5
Início interativo
Esta opção permite-lhe executar cargas de trabalho de forma interativa em vários nós de computação. As tarefas interativas são mais adequadas para exemplos de utilização de depuração e validação. Estes cargas de trabalho reservam o nó indefinidamente até o programador decidir que a depuração terminou e que quer libertar os recursos.
Seguem-se os passos que têm de ser seguidos para esta opção:
Forneça todos os tokens de autorização que quer (por exemplo, HF e WandB) carregados para a tarefa no ficheiro configs/auth.sh.
sbatch -N <num_nodes> launch.sh --cluster_type hcc-a3m --interactive
Aguarde 2 a 5 minutos e deve ver o ícone
<job_id>/attach.shcriado.Para monitorizar o progresso da verificação de lançamento, selecione
<job_id>/nemo_rl_output.logpara ver o progresso do script de lançamento e selecione<job_id>/ray_logs/para ver o progresso do lançamento do raio principal e dos trabalhadores.Estabeleça ligação ao trabalho interativo. Este script permite-lhe estabelecer ligação novamente, mesmo que perca a ligação:
bash <job_id>/attach.sh
O que se segue?
A execução de uma carga de trabalho pré-criada valida o estado operacional do cluster. O passo seguinte é executar a sua própria aplicação de preparação personalizada.
- Execute a sua própria carga de trabalho personalizada: agrupe o código de preparação num contentor e envie o contentor como um
CustomJobpara o cluster de preparação. Este processo inclui a configuração da tarefa para um ambiente distribuído. - Monitorize as suas tarefas de preparação: acompanhe eficazmente o progresso, a utilização de recursos e os registos das tarefas em execução no seu cluster através da consola ou do Cloud Logging. Google Cloud
- Faça a gestão do cluster: depois de executar os testes, verifique o estado do cluster ou elimine-o para gerir os custos.
- Orquestre tarefas com os Vertex AI Pipelines: depois de executar tarefas manualmente, automatize o processo criando um pipeline para orquestrar os seus fluxos de trabalho de preparação.