TensorFlow
O ModelArts fornece várias estruturas de IA para diferentes mecanismos. Quando você usa esses mecanismos para o treinamento do modelo, os comandos de inicialização durante o treinamento precisam ser adaptados de acordo. Esta seção apresenta como fazer adaptações ao mecanismo do TensorFlow.
Princípio de inicialização do TensorFlow
Especificações e número de nós
Neste caso, GPU: 8 × NVIDIA-V100 | CPU: 72 cores | Memory: 512 GB é usada como exemplo para descrever como alocar recursos de ModelArts para trabalhos de nó único e distribuídos.
Para um trabalho de nó único (executado em apenas um nó), o ModelArts inicia um contêiner de treinamento que usa exclusivamente os recursos no nó.
Para um trabalho distribuído (executando em mais de um nó), o ModelArts inicia um servidor de parâmetros (PS) e um trabalhador no mesmo nó. O PS possui os recursos de computação da CPU: 36 cores | Memory: 256 GB e o worker possui GPU: 8 xNVIDIA-V100 | CPU: 36 cores | Memory: 256 GB.
Somente recursos de CPU e memória são alocados para um PS, enquanto um worker também pode possuir placas de aceleração (exceto para especificações de CPU puras). Neste exemplo, cada worker possui oito placas de aceleração NVIDIA V100. Se um PS e um worker forem iniciados no mesmo nó, os recursos de disco serão compartilhados por ambas as partes.
Comunicação de rede
- Para um trabalho de nó único, nenhuma comunicação de rede é necessária.
- Para um trabalho distribuído, as comunicações de rede são necessárias em nós e entre nós.
Em nós
Um PS e um worker podem se comunicar em nós por meio de uma rede de contêineres ou de uma rede de host.
- Uma rede de contêineres é usada quando você executa um trabalho de treinamento em nós usando recursos compartilhados.
- Quando você executa um trabalho de treinamento em nós usando um pool dedicado, a rede host é usada se o nó for configurado com NICs de RoCE, e a rede de contêiner é usada se o nó for configurado com NICs de InfiniBand.
Entre os nós
Para um trabalho distribuído, um PS e um worker podem se comunicar entre nós. O ModelArts fornece NICs de InfiniBand e RoCE com uma largura de banda de até 100 Gbit/s.
Comandos de inicialização
Por padrão, o serviço de treinamento usa o interpretador python na imagem do trabalho para iniciar o script de treinamento. Para obter o interpretador python, execute o comando which python. O diretório de trabalho durante a inicialização é /home/ma-user/user-job-dir/<The code directory name>, que é o diretório retornado executando pwd ou os.getcwd() em python.
- Comando de inicialização para nó único de placa única
python <Relative path of the startup file> <Job parameters>
- Relative path of the startup file: caminho do arquivo de inicialização relativo a /home/ma-user/user-job-dir/<The code directory name>
- Job parameters: parâmetros de execução configurados para um trabalho de treinamento
Figura 1 Criar um trabalho de treinamento
Configure os parâmetros consultando a figura acima. Em seguida, execute o seguinte comando no fundo do console:
python /home/ma-user/modelarts/user-job-dir/gpu-train/train.py --epochs 5
- Comando de inicialização para trabalhos distribuídos
python --task_index ${VC_TASK_INDEX} --PS_hosts ${TF_PS_HOSTS} --worker_hosts ${TF_WORKER_HOSTS} --job_name ${MA_TASK_NAME} <Relative path of the startup file> <Job parameters>
- VC_TASK_INDEX: número de série da tarefa, por exemplo, 0/1/2.
- TF_PS_HOSTS: matriz de endereços de nós PS, por exemplo, [xx-PS-0.xx:TCP_PORT,xx-PS-1.xx:TCP_PORT]. O valor de TCP_PORT é uma porta aleatória que varia de 5.000 a 10.000.
- TF_WORKER_HOSTS: matriz de endereços de nós de trabalho, por exemplo, [xx-worker-0.xx:TCP_PORT,xx-worker-1.xx:TCP_PORT]. O valor de TCP_PORT é uma porta aleatória que varia de 5.000 a 10.000.
- MA_TASK_NAME: nome da tarefa, que pode ser PS ou work.
- Relative path of the startup file: caminho do arquivo de inicialização relativo a /home/ma-user/user-job-dir/<The code directory name>
- Job parameters: parâmetros de execução configurados para um trabalho de treinamento
Figura 2 Criar um trabalho de treinamento
Configure os parâmetros consultando a figura acima. Em seguida, execute o seguinte comando no fundo do console:
python --task_index "$VC_TASK_INDEX" --PS_hosts "$TF_PS_HOSTS" --worker_hosts "$TF_WORKER_HOSTS" --job_name "$MA_TASK_NAME" /home/ma-user/modelarts/user-job-dir/gpu-train/train.py --epochs 5