Estos contenidos se han traducido de forma automática para su comodidad, pero Huawei Cloud no garantiza la exactitud de estos. Para consultar los contenidos originales, acceda a la versión en inglés.
Actualización más reciente 2024-09-14 GMT+08:00

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