PAI-DLC le permite crear rápidamente trabajos de entrenamiento en un solo nodo o distribuidos. Kubernetes aprovisiona automáticamente los nodos de cómputo en segundo plano, lo que elimina la necesidad de comprar máquinas manualmente o configurar entornos de ejecución. Admite TensorFlow, PyTorch y otros framework populares de aprendizaje profundo, con opciones flexibles de configuración de recursos.
Inicio rápido
Con el reconocimiento de dígitos manuscritos MNIST como ejemplo, esta guía le muestra cómo ejecutar entrenamientos en un solo nodo con una GPU y entrenamientos distribuidos en varios nodos con múltiples GPU mediante DLC. Para más detalles, consulte Get started with Deep Learning Containers (DLC).
Referencia de parámetros de la consola
Información básica
Parámetro | Descripción |
Job Name | Establezca un nombre fácil de identificar para el trabajo. |
Tag | Aplique etiquetas estandarizadas a sus trabajos. Las etiquetas son la base para archivar trabajos por etiqueta, analizar su distribución y rastrear el consumo de recursos. Se aplican las siguientes restricciones:
Para obtener orientación sobre el etiquetado estandarizado, consulte Standardize tagging for DLC, DSW, and EAS. |
Task Description | Utilice este campo para describir el propósito, el contexto u otra información relevante del trabajo. |
Información del entorno
Parámetro | Descripción |
Image Configuration | Además de la opción Alibaba Cloud Image, se admiten los siguientes tipos de imagen:
|
Mount dataset | Los conjuntos de datos proporcionan los archivos de datos necesarios para el entrenamiento del modelo. Se admiten los dos tipos siguientes:
Mount Path: es la ruta donde se monta el conjunto de datos en el contenedor DLC, por ejemplo, Importante Si utiliza un conjunto de datos CPFS, debe configurar una VPC para DLC que coincida con la VPC de CPFS. De lo contrario, el trabajo enviado podría permanecer en el estado Preparing environment durante un periodo prolongado. |
Mount storage | También puede montar rutas de origen de datos directamente para leer los datos requeridos o almacenar archivos intermedios y de resultados.
Para más información, consulte Use cloud storage. |
Startup Command | Establezca el comando de inicio del trabajo. Se admiten comandos de shell. DLC inyecta automáticamente common PyTorch and TensorFlow environment variables como
Importante La ruta de montaje configurada para el código (como /mnt/data) es la ubicación de sus archivos de código dentro del contenedor DLC. Su comando de inicio debe hacer referencia a los archivos de código mediante esta ruta. Por ejemplo, si la ruta de montaje del código es /mnt/data y su archivo de código es train.py, el comando de inicio debe ser: python /mnt/data/train.py |
Información de recursos
Parámetro | Descripción |
Resource Type | El valor predeterminado es General Computing. La opción Lingjun Intelligence Resources está disponible en las siguientes regiones: China (Ulanqab), Singapore, China (Shenzhen), China (Beijing), China (Shanghai), China (Hangzhou), China (Guangzhou), China (Hong Kong), Malaysia, Germany y Atlanta. |
Source |
|
Framework | Se admiten los siguientes framework y herramientas de entrenamiento de aprendizaje profundo: TensorFlow, PyTorch, ElasticBatch, XGBoost, OneFlow, MPIJob, Ray, Custom, DataJuicer y MPI. Nota Cuando Resource Quota se establece en recursos Lingjun, solo se admiten trabajos de TensorFlow, PyTorch, ElasticBatch, MPIJob y Ray. |
Job Resource | Según el Framework seleccionado, puede configurar recursos para los tipos de nodo Worker, PS, Chief, Evaluator y GraphLearn. Si utiliza el framework Ray, haga clic en Add Role para personalizar roles de Worker, lo que permite la ejecución combinada de recursos heterogéneos.
|
Scheduling Policy | Puede personalizar la estrategia de programación de recursos del contenedor según sus escenarios de negocio y las características del trabajo:
|
DLC no admite modificar directamente el tipo de instancia de un trabajo ya enviado. Para cambiar el tipo de instancia (por ejemplo, para cambiar a una instancia compatible con redes de alto rendimiento eRDMA, como ecs.ebmgn8v.48xlarge), utilice la función Clone Job para crear un nuevo trabajo, seleccione el tipo de instancia deseado y envíelo. La plataforma habilita automáticamente las redes de alto rendimiento y configura los parámetros relacionados con NCCL. Para cambiar la versión del controlador de NVIDIA y de CUDA de una instancia, utilice la función de configuración de instancias para modificar la versión del controlador (por ejemplo, a la versión 580). La plataforma descarga automáticamente la imagen de DLC correspondiente según la nueva configuración para actualizar el entorno de ejecución, lo que completa el cambio de controlador, la actualización de CUDA o el reemplazo del controlador de GPU.
Configuración de VPC
Si no se configura ninguna VPC, se utilizan la red pública y la puerta de enlace pública. Dado que la puerta de enlace pública tiene un ancho de banda limitado, los trabajos pueden experimentar lentitud o no ejecutarse correctamente.
-
Configurar una VPC y seleccionar el vSwitch y el security group correspondientes mejora el ancho de banda, la estabilidad y la seguridad de la red. Además, el clúster que ejecuta sus trabajos puede acceder directamente a los servicios dentro de esta VPC.
ImportanteCuando utilice una VPC, asegúrese de que las instancias del resource group del trabajo, el almacenamiento del conjunto de datos (OSS) y el repositorio de código se encuentren en la misma VPC dentro de la misma región, y de que exista conectividad de red.
Cuando utilice un conjunto de datos CPFS, debe configurar una VPC que coincida con la VPC de CPFS. De lo contrario, el trabajo de entrenamiento de DLC enviado podría permanecer en el estado Preparing environment durante un periodo prolongado.
Cuando envíe trabajos de DLC con recursos spot de Lingjun, debe configurar una VPC.
Además, puede configurar la Internet Access Gateway. Se admiten las dos opciones siguientes:
Public Gateway: el ancho de banda es limitado. Durante periodos de alta concurrencia o al descargar archivos grandes, es posible que la velocidad de la red no cubra la demanda.
Private Gateway: para superar la limitación de ancho de banda de la puerta de enlace pública, cree una puerta de enlace NAT en la VPC de DLC, asocie una EIP y configure entradas SNAT. Para más detalles, consulte Improve internet access with a private gateway.
Tolerancia a fallos y diagnósticos
Parámetro | Descripción |
Automatic Fault Tolerance | Después de habilitar la función Automatic Fault Tolerance y configurar los parámetros correspondientes, el sistema ofrece capacidades de monitoreo y control de trabajos. Detecta errores a nivel de algoritmo en tiempo real y toma medidas correctivas, lo que mejora el uso de la GPU. Para más detalles, consulte AIMaster: An elastic and automatic fault tolerance engine. Nota Cuando se habilita la tolerancia automática a fallos, el sistema inicia una instancia AIMaster junto con las instancias del trabajo, lo que consume recursos de cómputo adicionales. Detalles del uso de recursos de la instancia AIMaster:
|
Sanity Check | Tras habilitar la función Sanity Check, la comprobación de estado inspecciona a fondo los recursos involucrados en el entrenamiento, aísla automáticamente los nodos defectuosos y activa operaciones automatizadas en segundo plano. Esto reduce de manera efectiva la probabilidad de problemas durante las etapas iniciales del entrenamiento y mejora su tasa de éxito. Para más detalles, consulte SanityCheck: Compute health checks. Nota La función de comprobación de estado solo se admite para trabajos de entrenamiento de PyTorch enviados con cuotas de recursos Lingjun y cuando la cantidad de GPU es mayor que 0. |
Roles y permisos
A continuación se describe la configuración del rol RAM de la instancia. Para más detalles, consulte Configure a RAM role for DLC.
Rol RAM de la instancia | Descripción |
Default Role of PAI | Opera con base en el rol de servicio AliyunPAIDLCDefaultRole, que solo tiene acceso a MaxCompute y OSS, con permisos más detallados. Credenciales temporales emitidas con base en el rol predeterminado de PAI:
|
Custom Role | Seleccione o especifique un rol RAM personalizado. Al acceder a servicios en la nube desde la instancia mediante credenciales temporales STS, los permisos coinciden con los del rol personalizado. |
Does Not Associate Role | No se asocia ningún rol RAM con el trabajo de DLC. Esta es la opción predeterminada. |
Documentación relacionada
Consulte la información básica del trabajo, las vistas de recursos y los registros de operación. Para más detalles, consulte View training job details.
Consulte los detalles de facturación de la ejecución del trabajo. Para más detalles, consulte Billing details.
Para conocer los problemas comunes de los trabajos de DLC y sus soluciones, consulte FAQ about DLC.
Para consultar casos de uso de DLC, consulte DLC use cases.
Preguntas frecuentes
P: ¿Qué debo hacer si recibo un error BadRequest al seleccionar un origen de datos NAS con un destino de montaje cuando creo un trabajo de entrenamiento?
Este error ocurre cuando al origen de datos NAS le falta un destino de montaje. Cree un nuevo destino de montaje en la consola de NAS, luego selecciónelo como origen de datos en la configuración de Mount dataset o Mount storage al crear el trabajo de entrenamiento y vuelva a enviar el trabajo.
P: ¿Los trabajos de entrenamiento de DLC pueden exportar métricas a Weights & Biases (W&B)?
Sí, DLC admite la exportación de métricas de entrenamiento a W&B, pero deben cumplirse los siguientes requisitos previos:
Conectividad de red: asegúrese de que los nodos de entrenamiento de PAI puedan acceder al endpoint público api.wandb.ai. Si utiliza una VPC, configure una puerta de enlace NAT.
Gestión de claves: inyecte la clave de API de W&B mediante variables de entorno. No la incluya de forma codificada en su código.
Cumplimiento: cargue únicamente métricas escalares no confidenciales. No cargue datos sin procesar ni detalles confidenciales del modelo.
P: ¿Un trabajo de DLC con errores sigue apareciendo en la lista de trabajos?
Su aparición depende del motivo del error:
Los trabajos que fallan por falta de recursos aparecen temporalmente en la lista de trabajos de la consola de DLC y se eliminan después de borrarlos.
Cuando la API devuelve un error directamente (con un RequestID) debido a parámetros de solicitud no válidos, no se guarda ningún registro en la lista de trabajos. El mensaje de error solo se muestra en la página de operación.
P: ¿Qué debo hacer si veo un mensaje de "account security protection triggered" o "resource allocation suspended" al crear un trabajo de DLC?
Este mensaje suele activarse por las políticas de control de riesgos de la cuenta. Utilice la herramienta de diagnóstico de autoservicio de Alibaba Cloud (https://smartservice.console.alibabacloud.com/service/self-service-center/search?questionId=27591) para diagnosticar por qué no se puede continuar con el pago o la asignación de recursos, y envíe una apelación. Una vez aprobada la apelación, podrá intentar crear el trabajo nuevamente.
Apéndice
Crear un trabajo mediante el SDK o CLI
Python SDK
Paso 1: Instalar la herramienta Alibaba Cloud Credentials
Cuando llama a OpenAPI mediante un SDK de Alibaba Cloud para gestionar recursos, debe instalar la herramienta Credentials para configurar sus credenciales. Requisitos:
Versión de Python >= 3.7.
Utilice los SDK de Alibaba Cloud V2.0.
pip install alibabacloud_credentials
Paso 2: Obtener el AccessKey de su cuenta
Este ejemplo utiliza la información de AccessKey (AK) para configurar las credenciales de acceso. Para evitar la filtración de credenciales, se recomienda almacenar su AccessKey en variables de entorno. Los nombres de las variables de entorno para el ID y el secreto son ALIBABA_CLOUD_ACCESS_KEY_ID y ALIBABA_CLOUD_ACCESS_KEY_SECRET.
Para obtener información sobre cómo conseguir un AccessKey, consulte Create an AccessKey.
Para obtener información sobre cómo configurar variables de entorno, consulte Configure environment variables.
Para conocer otros métodos de configuración de credenciales, consulte Manage access credentials.
Paso 3: Instalar el SDK de Python
-
Instale el SDK del espacio de trabajo.
pip install alibabacloud_aiworkspace20210204==3.0.1 -
Instale el SDK de DLC.
pip install alibabacloud_pai_dlc20201203==1.4.17
Paso 4: Enviar un trabajo
Envío de un trabajo mediante recursos públicos
A continuación se muestra un código de ejemplo que indica cómo crear y enviar un trabajo:
Envío de un trabajo mediante una cuota de recursos de suscripción
Inicie sesión en la PAI console.
Consulte el identificador del espacio de trabajo: en el panel de navegación izquierdo, haga clic en Workspace List. Busque el espacio de trabajo deseado, haga clic en el icono ⓘ junto a su nombre y copie el valor de Workspace ID en el panel de información que aparece.
Consulte el identificador de la cuota de recursos de su resource group dedicado. En el panel de navegación izquierdo, elija AI Computing Resources > Resource Quota. Haga clic en la pestaña General Computing Resources y obtenga el identificador de la cuota de recursos deseada en la columna Name/ID de la lista.
-
Utilice el siguiente código para crear y enviar un trabajo. Para consultar la lista de imágenes públicas disponibles, consulte Step 2: Prepare an image.
from alibabacloud_pai_dlc20201203.client import Client from alibabacloud_credentials.client import Client as CredClient from alibabacloud_tea_openapi.models import Config from alibabacloud_pai_dlc20201203.models import ( CreateJobRequest, JobSpec, ResourceConfig, GetJobRequest ) # Initialize a Client to access the DLC API. region = 'cn-hangzhou' # The Alibaba Cloud account AccessKey has access permissions to all APIs. It is recommended to use RAM users for API access or daily operations and maintenance. # It is highly recommended not to save AccessKey ID and AccessKey Secret directly in the project code to prevent leak risks, which could threaten the security of all resources under your account. # This example uses the Credentials SDK to read the AccessKey from environment variables by default for identity authentication. cred = CredClient() client = Client( config=Config( credential=cred, region_id=region, endpoint=f'pai-dlc.{region}.aliyuncs.com', ) ) # Declare the resource configuration for the job. For image selection, refer to the public image list in the documentation, or you can pass in your own image address. spec = JobSpec( type='Worker', image=f'registry-vpc.cn-hangzhou.aliyuncs.com/pai-dlc/tensorflow-training:1.15-cpu-py36-ubuntu18.04', pod_count=1, resource_config=ResourceConfig(cpu='1', memory='2Gi') ) # Declare the execution content of the job. req = CreateJobRequest( resource_id='<Replace with your own resource quota ID>', workspace_id='<Replace with your own WorkspaceID>', display_name='sample-dlc-job', job_type='TFJob', job_specs=[spec], user_command='echo "Hello World"', ) # Submit the job. response = client.create_job(req) # Get the job ID. job_id = response.body.job_id # Query the job status. job = client.get_job(job_id, GetJobRequest()).body print('job status:', job.status) # View the command executed by the job. job.user_command
Envío de un trabajo mediante recursos spot
-
SpotDiscountLimit (descuento spot)
#!/usr/bin/env python3 from alibabacloud_tea_openapi.models import Config from alibabacloud_credentials.client import Client as CredClient from alibabacloud_pai_dlc20201203.client import Client as DLCClient from alibabacloud_pai_dlc20201203.models import CreateJobRequest region_id = '<region-id>' # The region ID where the DLC job is located, for example, cn-hangzhou for China (Hangzhou). cred = CredClient() workspace_id = '12****' # The workspace ID where the DLC job is located. dlc_client = DLCClient( Config(credential=cred, region_id=region_id, endpoint='pai-dlc.{}.aliyuncs.com'.format(region_id), protocol='http')) create_job_resp = dlc_client.create_job(CreateJobRequest().from_map({ 'WorkspaceId': workspace_id, 'DisplayName': 'sample-spot-job', 'JobType': 'PyTorchJob', 'JobSpecs': [ { "Type": "Worker", "Image": "dsw-registry-vpc.<region-id>.cr.aliyuncs.com/pai/pytorch-training:1.12-cpu-py39-ubuntu20.04", "PodCount": 1, "EcsSpec": 'ecs.g7.xlarge', "SpotSpec": { "SpotStrategy": "SpotWithPriceLimit", "SpotDiscountLimit": 0.4, } }, ], 'UserVpc': { "VpcId": "vpc-0jlq8l7qech3m2ta2****", "SwitchId": "vsw-0jlc46eg4k3pivwpz8****", "SecurityGroupId": "sg-0jl4bd9wwh5auei9****", }, "UserCommand": "echo 'Hello World' && ls -R /mnt/data/ && sleep 30 && echo 'DONE'", })) job_id = create_job_resp.body.job_id print(f'jobId is {job_id}') -
SpotPriceLimit (precio spot)
#!/usr/bin/env python3 from alibabacloud_tea_openapi.models import Config from alibabacloud_credentials.client import Client as CredClient from alibabacloud_pai_dlc20201203.client import Client as DLCClient from alibabacloud_pai_dlc20201203.models import CreateJobRequest # The region ID where the DLC job is located, for example, cn-hangzhou. region_id = '<region-id>' # Initialize the credentials client to handle authentication. cred = CredClient() # The workspace ID where the DLC job is located. workspace_id = '12****' # Initialize the DLC client with the required configuration. dlc_client = DLCClient( Config(credential=cred, region_id=region_id, endpoint='pai-dlc.{}.aliyuncs.com'.format(region_id), protocol='http')) # Create a DLC job with spot instance configuration (SpotWithPriceLimit). create_job_resp = dlc_client.create_job(CreateJobRequest().from_map({ 'WorkspaceId': workspace_id, 'DisplayName': 'sample-spot-job', 'JobType': 'PyTorchJob', 'JobSpecs': [ { "Type": "Worker", "Image": "dsw-registry-vpc.<region-id>.cr.aliyuncs.com/pai/pytorch-training:1.12-cpu-py39-ubuntu20.04", "PodCount": 1, "EcsSpec": 'ecs.g7.xlarge', "SpotSpec": { "SpotStrategy": "SpotWithPriceLimit", "SpotPriceLimit": 0.011, } }, ], 'UserVpc': { "VpcId": "vpc-0jlq8l7qech3m2ta2****", "SwitchId": "vsw-0jlc46eg4k3pivwpz8****", "SecurityGroupId": "sg-0jl4bd9wwh5auei9****", }, "UserCommand": "echo 'Hello World' && ls -R /mnt/data/ && sleep 30 && echo 'DONE'", })) # Get and print the created job ID. job_id = create_job_resp.body.job_id print(f'jobId is {job_id}')
La siguiente tabla describe las configuraciones clave:
Parámetro | Descripción |
SpotStrategy | Estrategia de puja. El tipo de puja solo surte efecto cuando este parámetro se establece en SpotWithPriceLimit. |
SpotDiscountLimit | Usa el descuento spot como método de puja. Nota
|
SpotPriceLimit | Usa el precio spot como método de puja. |
UserVpc | Obligatorio cuando se envía un trabajo con recursos spot de Lingjun. Configure la VPC, el vSwitch y el identificador del security group de la región donde se ejecuta el trabajo. |
Cuando crea un trabajo de DLC mediante una llamada a la API o un SDK (createJob), no es posible cargar archivos de código local directamente. Primero debe subir el código a alguna de las siguientes ubicaciones:
Repositorio Git: cree una configuración de código en AI Assets Management y vincúlela a la URL del repositorio Git.
Almacenamiento OSS: después de cargar el código en OSS, póngalo a disposición del trabajo al montarlo como un conjunto de datos.
Imagen personalizada: empaquete el código en una imagen Docker.
Línea de comandos
Paso 1: Descargar el cliente y completar la autenticación de usuario
Descargue la herramienta cliente para Linux de 64 bits o para Mac según su sistema operativo y complete la autenticación de usuario. Para obtener más detalles, consulte Preparations.
Paso 2: Enviar un trabajo
Inicie sesión en la PAI console.
-
Siga estas instrucciones para consultar el identificador de su espacio de trabajo (WorkspaceID) en la página de lista de espacios de trabajo.
En el panel de navegación izquierdo, haga clic en Workspace List. Busque el espacio de trabajo deseado, haga clic en el icono ⓘ a la derecha de su nombre y consulte el valor de Workspace ID en el panel de información que aparece.
-
Siga estas instrucciones para consultar el identificador de su cuota de recursos.
En el panel de navegación izquierdo, elija AI Computing Resources > Resource Quota. Seleccione la pestaña correspondiente al tipo de recurso deseado (por ejemplo, General Computing Resources) y obtenga el identificador de la cuota de recursos en la columna Name/ID de la lista.
-
Prepare un archivo de parámetros con base en el siguiente contenido
tfjob.params. Para obtener más información sobre cómo configurar el archivo de parámetros, consulte Submit commands.name=test_cli_tfjob_001 workers=1 worker_cpu=4 worker_gpu=0 worker_memory=4Gi worker_shared_memory=4Gi worker_image=registry-vpc.cn-beijing.aliyuncs.com/pai-dlc/tensorflow-training:1.12.2PAI-cpu-py27-ubuntu16.04 command=echo good && sleep 120 resource_id=<your_resource_quota_id> workspace_id=<your_workspace_id> -
Utilice el siguiente código de ejemplo para pasar el parámetro
params_file. Esto envía el trabajo de DLC al espacio de trabajo y a la cuota de recursos especificados../dlc submit tfjob --job_file ./tfjob.params -
Ejecute el siguiente comando para consultar el trabajo de DLC que envió.
./dlc get job <jobID>
Lista de parámetros avanzados
Parámetro (clave) | Tipos de framework compatibles | Descripción | Valor del parámetro |
| ALL | Configura una política personalizada de liberación de recursos. Este parámetro es opcional. Si no lo configura, todos los recursos de Pod se liberan cuando finaliza el trabajo. Si lo configura, el único valor admitido es | pod-exit |
| ALL | Indica si se habilitan los jumbo frames. Solo es compatible con AI Computing Resources - General Computing 2.0. El valor predeterminado es |
|
| ALL | Indica si se habilita IBGDA cuando se carga el controlador de GPU. |
|
| ALL | Indica si se instala el módulo de kernel GDRCopy. La versión instalada actualmente es la 2.4.4. |
|
| ALL | Indica si se habilita NUMA. |
|
| ALL | Cuando se envía un trabajo, este parámetro comprueba si los recursos totales (especificaciones de nodo) de la cuota cumplen con las especificaciones de todos los roles del trabajo. |
|
| PyTorch | Indica si se permite la conectividad de red entre workers.
Una vez habilitado, el nombre de dominio de cada worker coincide con su nombre, por ejemplo, |
|
| PyTorch | Permite definir los puertos de red expuestos en cada worker. Puede usar este parámetro junto con Si no se configura, de forma predeterminada solo se expone el puerto 23456 en el master. Asegúrese de no incluir el puerto 23456 en esta lista personalizada. Importante Este parámetro es mutuamente excluyente con | Un conjunto de cadenas separadas por punto y coma, donde cada cadena es un número de puerto individual o un rango de puertos unidos por un guion, como |
| PyTorch | Permite solicitar una cantidad específica de puertos de red para exponer en cada worker. Puede usar este parámetro junto con Si no se configura, de forma predeterminada solo se expone el puerto 23456 en el master. DLC asigna puertos aleatorios a los workers según la cantidad definida en el parámetro. Los números de puerto asignados se pasan al worker mediante la variable de entorno Importante
| Entero (máximo: 65536) |
| Ray | Cuando el framework es Ray, puede configurar manualmente RayRuntimeEnv para definir el entorno de ejecución. Importante Las variables de entorno y las configuraciones de bibliotecas de terceros se sobrescriben con esta configuración. | Configure las variables de entorno y las bibliotecas de terceros ( |
| Ray | Dirección externa de Redis para GCS. | Cadena |
| Ray | Nombre de usuario externo de Redis para GCS. | Cadena |
| Ray | Contraseña externa de Redis para GCS. | Cadena |
| Ray | Número de reintentos para el submitter. | Entero positivo (int) |
| Ray | Configura la memoria compartida de un nodo. Por ejemplo, para asignar 1 GiB de memoria compartida a cada nodo, utilice la siguiente configuración: | Entero positivo (int) |
para seleccionar un método de oferta: