TensorFlow
ModelArts ofrece múltiples marcos de IA para diferentes motores. Cuando se utilizan estos motores para el entrenamiento de modelos, los comandos de arranque durante el entrenamiento deben adaptarse en consecuencia. Esta sección describe cómo realizar adaptaciones al motor de TensorFlow.
Principio de inicio de TensorFlow
Especificaciones y número de nodos
En este caso, se utiliza GPU: 8 × NVIDIA-V100 | CPU: 72 cores | Memory: 512 GB como ejemplo para describir cómo asignar recursos de ModelArts para trabajos de nodo singular y distribuidos.
Para un trabajo de nodo singular (que solo se ejecuta en un nodo), ModelArts inicia un contenedor de entrenamiento que utiliza exclusivamente los recursos del nodo.
Para un trabajo distribuido (que se ejecuta en más de un nodo), ModelArts inicia un servidor de parámetros (PS) y un trabajador en el mismo nodo. El PS posee los recursos de cómputo de CPU: 36 cores | Memory: 256 GB y el trabajador posee GPU: 8 xNVIDIA-V100 | CPU: 36 cores | Memory: 256 GB.
Solo los recursos de CPU y memoria se asignan a un PS, mientras que un trabajador también puede poseer tarjetas de aceleración (excepto para las especificaciones de CPU puras). En este ejemplo, cada trabajador posee ocho tarjetas de aceleración de NVIDIA V100. Si un PS y un trabajador se inician en el mismo nodo, los recursos de disco son compartidos por ambas partes.
Comunicación de red
- Para un trabajo de nodo singular, no se requiere la comunicación de red.
- Para un trabajo distribuido, se requieren comunicaciones de red dentro de los nodos y entre nodos.
Dentro de los nodos
Un PS y un trabajador pueden comunicarse en nodos con una red de contenedor o una red host.
- Se utiliza una red de contenedor cuando se ejecuta un trabajo de entrenamiento en nodos que utilizan los recursos compartidos.
- Cuando ejecuta un trabajo de entrenamiento en nodos que utilizan un grupo dedicado, se utiliza la red host si el nodo está configurado con NIC de RoCE y la red de contenedor si el nodo está configurado con NIC de InfiniBand.
Entre los nodos
Para un trabajo distribuido, un PS y un trabajador pueden comunicarse entre nodos. ModelArts proporciona las NIC de InfiniBand y de RoCE con un ancho de banda de hasta 100 Gbit/s.
Comandos de arranque
De forma predeterminada, el servicio de entrenamiento utiliza el intérprete de Python en la imagen del trabajo para iniciar el script de entrenamiento. Para obtener el intérprete python, ejecute el comando which python. El directorio de trabajo durante el inicio es /home/ma-user/user-job-dir/<The code directory name>, que es el directorio devuelto al ejecutar pwd u os.getcwd() en python.
- Comando de arranque para la tarjeta única del nodo singular
python <Relative path of the startup file> <Job parameters>
- Relative path of the startup file: ruta del archivo de inicio relativo a /home/ma-user/user-job-dir/<The code directory name>
- Job parameters: parámetros de ejecución configurados para un trabajo de entrenamiento
Figura 1 Creación de un trabajo de entrenamiento
Configure los parámetros de acuerdo con la figura anterior. Luego, ejecute el siguiente comando en segundo plano de la consola:
python /home/ma-user/modelarts/user-job-dir/gpu-train/train.py --epochs 5
- Comando de arranque para trabajos distribuidos
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 serie de la tarea, por ejemplo, 0/1/2.
- TF_PS_HOSTS, matriz de direcciones de nodos PS, por ejemplo, [xx-PS-0.xx:TCP_PORT,xx-PS-1.xx:TCP_PORT]. El valor de TCP_PORT es un puerto aleatorio que va de 5,000 a 10,000.
- TF_WORKER_HOSTS, matriz de direcciones de nodos de trabajo, por ejemplo, [xx-worker-0.xx:TCP_PORT,xx-worker-1.xx:TCP_PORT]. El valor de TCP_PORT es un puerto aleatorio que va de 5,000 a 10,000.
- MA_TASK_NAME: nombre de la tarea, que puede ser PS o trabajador.
- Relative path of the startup file: ruta del archivo de inicio relativo a /home/ma-user/user-job-dir/<The code directory name>
- Job parameters: parámetros de ejecución configurados para un trabajo de entrenamiento
Figura 2 Creación de un trabajo de entrenamiento
Configure los parámetros de acuerdo con la figura anterior. Luego, ejecute el siguiente comando en segundo plano de la consola:
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