O PAI-DLC permite criar rapidamente jobs de treinamento em nó único ou distribuídos. O Kubernetes provisiona os nós de computação automaticamente, eliminando a necessidade de comprar máquinas manualmente ou configurar ambientes de execução. Ele oferece suporte a TensorFlow, PyTorch e outros frameworks populares de deep learning, com opções flexíveis de configuração de recursos.
Início rápido
Com o reconhecimento de dígitos manuscritos MNIST como exemplo, este guia orienta você no treinamento em nó único e GPU única, além do treinamento distribuído em múltiplos nós e múltiplas GPUs com o DLC. Para mais detalhes, consulte Get started with Deep Learning Containers (DLC).
Referência de parâmetros do console
Informações básicas
Parâmetro | Descrição |
Job Name | Defina um nome facilmente identificável para o job. |
Tag | Aplique tags padronizadas aos seus jobs. As tags fornecem a base para arquivar jobs por rótulo, analisar a distribuição de jobs e rastrear o consumo de recursos. Aplicam-se as seguintes restrições:
Para obter diretrizes sobre a padronização de tags, consulte Standardize tagging for DLC, DSW, and EAS. |
Task Description | Use este campo para descrever a finalidade, o contexto ou outras informações sobre o job. |
Informações de ambiente
Parâmetro | Descrição |
Image Configuration | Além da Alibaba Cloud Image, há suporte para os seguintes tipos de imagem:
|
Mount dataset | Os datasets fornecem os arquivos de dados necessários para o treinamento do modelo. Há suporte para os seguintes tipos de dataset:
Mount Path: Caminho onde o dataset é montado no contêiner do DLC, por exemplo Importante Se você usar um dataset CPFS, configure uma VPC para o DLC que corresponda à VPC do CPFS. Caso contrário, o job enviado pode permanecer no estado de ambiente Preparing por um período prolongado. |
Mount storage | Monte caminhos de origem de dados diretamente para ler os dados necessários ou armazenar arquivos intermediários e de resultados.
Para mais informações, consulte Use cloud storage. |
Startup Command | Defina o comando de inicialização do job. Há suporte para comandos Shell. O DLC injeta automaticamente common PyTorch and TensorFlow environment variables, como
Importante O caminho de montagem configurado para o código (como /mnt/data) é o local dos seus arquivos de código dentro do contêiner do DLC. O comando de inicialização deve referenciar os arquivos de código usando esse caminho. Por exemplo, se o caminho de montagem do código for /mnt/data e seu arquivo de código for train.py, o comando de inicialização deverá ser: python /mnt/data/train.py |
Informações de recursos
Parâmetro | Descrição |
Resource Type | O padrão é General Computing. O Lingjun Intelligence Resources está disponível nas seguintes regiões: China (Ulanqab), Singapore, China (Shenzhen), China (Beijing), China (Shanghai), China (Hangzhou), China (Guangzhou), China (Hong Kong), Malaysia, Germany e Atlanta. |
Source |
|
Framework | Há suporte para os seguintes frameworks e ferramentas de treinamento de deep learning: TensorFlow, PyTorch, ElasticBatch, XGBoost, OneFlow, MPIJob, Ray, Custom, DataJuicer e MPI. Nota Quando o Resource Quota está definido como recursos Lingjun, há suporte apenas para jobs TensorFlow, PyTorch, ElasticBatch, MPIJob e Ray. |
Job Resource | Com base no Framework selecionado, configure recursos para os tipos de nó Worker, PS, Chief, Evaluator e GraphLearn. Ao usar o framework Ray, clique em Add Role para personalizar as funções do Worker e permitir a execução mista de recursos heterogêneos.
|
Scheduling Policy | Personalize a estratégia de agendamento de recursos do contêiner com base nos seus cenários de negócios e nas características do job:
|
O DLC não permite modificar diretamente o tipo de instância de um job enviado. Para alterar o tipo de instância (por exemplo, para mudar para uma instância que suporte rede de alto desempenho eRDMA, como ecs.ebmgn8v.48xlarge), use o recurso Clone Job para criar um novo job, selecione o tipo de instância de destino e envie-o. A plataforma ativa automaticamente a rede de alto desempenho e configura os parâmetros relacionados ao NCCL. Para alterar o NVIDIA driver e a versão do CUDA de uma instância, use o recurso de configuração de instância e altere a versão do driver (por exemplo, para a versão 580). A plataforma faz o pull automático da imagem correspondente do DLC com base na nova configuração para atualizar o ambiente de execução. Isso conclui a alteração do driver, a atualização do CUDA ou a substituição do driver da GPU.
Configuração de VPC
Se nenhuma VPC for configurada, a rede pública e o gateway público serão usados. Como o gateway público tem largura de banda limitada, os jobs podem sofrer lentidão ou falhar durante a execução.
-
Configure uma VPC e selecione o vSwitch e o grupo de segurança correspondentes para melhorar a largura de banda, a estabilidade e a segurança da rede. O cluster que executa seus jobs também pode acessar diretamente os services dentro dessa VPC.
ImportanteAo usar uma VPC, certifique-se de que as instâncias do grupo de recursos do job, o armazenamento do dataset (OSS) e o repositório de código estejam todos dentro da mesma VPC na mesma região e que a conectividade de rede esteja estabelecida.
Ao usar um dataset CPFS, configure uma VPC que corresponda à VPC do CPFS. Caso contrário, o job de treinamento do DLC enviado pode permanecer no estado de ambiente Preparing por um período prolongado.
Ao enviar jobs do DLC usando recursos spot Lingjun, configure uma VPC.
Além disso, configure o Internet Access Gateway. Há suporte para as seguintes opções:
Public Gateway: A largura de banda é limitada. Durante períodos de alta concorrência ou ao baixar arquivos grandes, a velocidade da rede pode não atender à demanda.
Private Gateway: Para superar a limitação de largura de banda do gateway público, crie um gateway NAT na VPC do DLC, associe um EIP e configure entradas SNAT. Para mais detalhes, consulte Improve internet access with a private gateway.
Tolerância a falhas e diagnósticos
Parâmetro | Descrição |
Automatic Fault Tolerance | Após ativar o recurso Automatic Fault Tolerance e configurar os parâmetros relevantes, o sistema fornece recursos de monitoramento e controle de jobs. Ele detecta erros no nível do algoritmo em tempo real e toma medidas corretivas, o que melhora a utilização da GPU. Para mais detalhes, consulte AIMaster: An elastic and automatic fault tolerance engine. Nota Quando a tolerância a falhas automática está ativada, o sistema inicia uma instância AIMaster junto com as instâncias do job, consumindo recursos de computação adicionais. Detalhes de uso de recursos da instância AIMaster:
|
Sanity Check | Após ativar o recurso Sanity Check, a verificação de integridade inspeciona minuciosamente os recursos envolvidos no treinamento, isola automaticamente os nós com falha e aciona operações automatizadas em segundo plano. Isso reduz a probabilidade de problemas durante os estágios iniciais do treinamento e melhora a taxa de sucesso. Para mais detalhes, consulte SanityCheck: Compute health checks. Nota Há suporte para o recurso de verificação de integridade apenas em jobs de treinamento PyTorch enviados com cotas de recursos Lingjun e quando a contagem de GPUs é maior que 0. |
Funções e permissões
A configuração da função RAM da instância é descrita abaixo. Para mais detalhes, consulte Configure a RAM role for DLC.
Função RAM da instância | Descrição |
Default Role of PAI | Opera com base na função de service AliyunPAIDLCDefaultRole, que tem acesso apenas ao MaxCompute e ao OSS, com permissões mais granulares. Credenciais temporárias emitidas com base na função padrão do PAI:
|
Custom Role | Selecione ou especifique uma função RAM personalizada. Ao acessar cloud services de dentro da instância usando credenciais temporárias do STS, as permissões são consistentes com as da função personalizada. |
Does Not Associate Role | Nenhuma função RAM está associada ao job do DLC. Esta é a opção padrão. |
Documentação relacionada
Visualize informações básicas do job, visualizações de recursos e logs de operação. Para mais detalhes, consulte Visualize detalhes do job de treinamento.
Visualize os detalhes de faturamento da execução do job. Para mais detalhes, consulte Billing details.
Para problemas e soluções comuns de jobs do DLC, consulte FAQ about DLC.
Para casos de uso do DLC, consulte DLC use cases.
Perguntas frequentes
P: O que devo fazer se receber um erro BadRequest sobre a seleção de uma origem de dados NAS com um destino de montagem ao criar um job de treinamento?
Esse erro ocorre quando a origem de dados NAS não possui um destino de montagem. Crie um novo destino de montagem no console do NAS, selecione-o como a origem de dados na configuração Mount dataset ou Mount storage ao criar o job de treinamento e reenvie o job.
P: Os jobs de treinamento do DLC podem exportar métricas para o Weights & Biases (W&B)?
Sim, o DLC oferece suporte à exportação de métricas de treinamento para o W&B, mas os seguintes pré-requisitos devem ser atendidos:
Conectividade de rede: Certifique-se de que os nós de treinamento do PAI possam acessar o endpoint público api.wandb.ai. Se estiver usando uma VPC, configure um gateway NAT.
Gerenciamento de chaves: Injete a chave da API do W&B por meio de variáveis de ambiente. Não a codifique diretamente no seu código.
Conformidade: Faça o upload apenas de métricas escalares não sensíveis. Não faça o upload de dados brutos ou detalhes confidenciais do modelo.
P: Um job do DLC com falha ainda aparece na lista de jobs?
A aparição depende do motivo da falha:
Jobs que falham devido a recursos insuficientes aparecem temporariamente na lista de jobs do console do DLC e são removidos após a exclusão.
Quando a API retorna um erro diretamente (com um RequestID) devido a parâmetros de solicitação inválidos, nenhum registro é mantido na lista de jobs. A mensagem de erro é exibida apenas na página de operação.
P: O que devo fazer se vir uma mensagem de "proteção de segurança da conta acionada" ou "alocação de recursos suspensa" ao criar um job do DLC?
Essa mensagem geralmente é acionada por políticas de controle de risco da conta. Use a ferramenta de diagnóstico de autoatendimento do Alibaba Cloud (https://smartservice.console.alibabacloud.com/service/self-service-center/search?questionId=27591) para diagnosticar por que o pagamento ou a alocação de recursos não podem prosseguir e envie uma contestação. Assim que a contestação for aprovada, tente criar o job novamente.
Apêndice
Crie um job usando o SDK ou CLI
Python SDK
Etapa 1: Instale a ferramenta Alibaba Cloud Credentials
Ao chamar a OpenAPI usando um SDK do Alibaba Cloud para gerenciar recursos, instale a ferramenta Credentials para configurar suas credenciais. Requisitos:
Versão do Python >= 3.7.
Use os SDKs V2.0 do Alibaba Cloud.
pip install alibabacloud_credentials
Etapa 2: Obtenha o AccessKey da sua conta
Este exemplo usa informações do AccessKey (AK) para configurar credenciais de acesso. Para evitar o vazamento de credenciais, armazene seu AccessKey em variáveis de ambiente. Os nomes das variáveis de ambiente para o ID e o segredo são ALIBABA_CLOUD_ACCESS_KEY_ID e ALIBABA_CLOUD_ACCESS_KEY_SECRET.
Para obter informações sobre como obter um AccessKey, consulte Crie um AccessKey.
Para obter informações sobre como configurar variáveis de ambiente, consulte Configure environment variables.
Para outros métodos de configuração de credenciais, consulte Gerencie credenciais de acesso.
Etapa 3: Instale o SDK do Python
-
Instale o SDK do workspace.
pip install alibabacloud_aiworkspace20210204==3.0.1 -
Instale o SDK do DLC.
pip install alibabacloud_pai_dlc20201203==1.4.17
Etapa 4: Envie um job
Envie um job usando recursos públicos
O código de exemplo a seguir mostra como criar e enviar um job:
Envie um job usando uma cota de recursos de assinatura
Faça login no PAI console.
Visualize o ID do workspace: no painel de navegação à esquerda, clique em Workspace List. Encontre o workspace de destino, clique no ícone ⓘ ao lado do nome e copie o Workspace ID no painel de informações que aparece.
Visualize o ID da cota de recursos do seu grupo de recursos dedicados: no painel de navegação à esquerda, escolha AI Computing Resources > Resource Quota. Clique na aba General Computing Resources e obtenha o Quota ID da cota de recursos de destino na coluna Name/ID na lista de cotas de recursos.
-
Use o código a seguir para criar e enviar um job. Para obter a lista de imagens públicas disponíveis, 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
Envie um job usando recursos spot
-
SpotDiscountLimit (Desconto 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 (Preço 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}')
As configurações principais são descritas a seguir:
Parâmetro | Descrição |
SpotStrategy | A estratégia de lance. O tipo de lance só entra em vigor quando este parâmetro está definido como SpotWithPriceLimit. |
SpotDiscountLimit | Usa o desconto spot como método de lance. Nota
|
SpotPriceLimit | Usa o preço spot como método de lance. |
UserVpc | Obrigatório ao enviar um job usando recursos spot Lingjun. Configure a VPC, o vSwitch e o security groupID da região onde o job é executado. |
Ao criar um job do DLC chamando uma API ou usando um SDK (createJob), não é possível fazer o upload diretamente de arquivos de código locais. Primeiro, faça o upload do seu código para um dos seguintes locais:
Repositório git: Crie uma configuração de código no AI Assets Management e vincule-a à URL do repositório git.
Armazenamento OSS: Após fazer o upload do código para o OSS, disponibilize-o para o job montando-o como um dataset.
Imagem personalizada: Empacote o código em uma imagem docker.
Linha de comando
Etapa 1: Baixe o cliente e conclua a autenticação do usuário
Baixe a ferramenta cliente para Linux 64 bits ou Mac com base no seu sistema operacional e conclua a autenticação do usuário. Para mais detalhes, consulte Preparations.
Etapa 2: Envie um job
Faça login no PAI console.
Siga estas instruções para visualizar o ID do seu workspace (WorkspaceID) na página de lista de workspaces: no painel de navegação à esquerda, clique em Workspace List. Encontre o workspace de destino, clique no ícone ⓘ à direita do nome e visualize o Workspace ID no painel de informações que aparece.
Siga estas instruções para visualizar o ID da sua cota de recursos: no painel de navegação à esquerda, escolha AI Computing Resources > Resource Quota. Selecione a aba para o tipo de recurso de destino (como General Computing Resources) e obtenha o ID da cota de recursos na coluna Name/ID na lista de cotas de recursos.
-
Prepare um arquivo de parâmetros com base no seguinte conteúdo
tfjob.params. Para mais informações sobre como configurar o arquivo de parâmetros, consulte Envie comandos.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> -
Use o código de exemplo a seguir para passar o parâmetro params_file. Isso envia o job do DLC para o workspace e a cota de recursos especificados.
./dlc submit tfjob --job_file ./tfjob.params -
Use o seguinte comando para visualizar o job do DLC que você enviou.
./dlc get job <jobID>
Lista de parâmetros avançados
Parâmetro (chave) | Tipos de framework suportados | Descrição | Valor do parâmetro |
| ALL | Configura uma política personalizada de liberação de recursos. Este parâmetro é opcional. Se você não o configurar, todos os recursos do Pod serão liberados quando o job terminar. Se você o configurar, o único valor com suporte é pod-exit, que libera os recursos de um Pod quando o Pod é encerrado. | pod-exit |
| ALL | Especifica se deve ativar jumbo frames. Há suporte para este parâmetro apenas em AI Computing Resources - General Computing 2.0. O valor padrão é false, o que significa desativado. |
|
| ALL | Especifica se o IBGDA deve ser ativado quando o driver da GPU é carregado. |
|
| ALL | Especifica se o módulo de kernel GDRCopy deve ser instalado. A versão atualmente instalada é a 2.4.4. |
|
| ALL | Especifica se o NUMA deve ser ativado. |
|
| ALL | Ao enviar um job, este parâmetro verifica se os recursos totais (especificações do nó) na cota atendem às especificações de todas as funções no job. |
|
| PyTorch | Especifica se a conectividade de rede entre workers deve ser permitida.
Após a ativação, o nome de domínio de cada worker é o nome do worker, como |
|
| PyTorch | Permite definir as portas de rede expostas em cada worker. Use este parâmetro junto com Se deixado sem configuração, apenas a porta 23456 é exposta no master por padrão. Certifique-se de não incluir a porta 23456 nesta lista de portas personalizadas. Importante Este parâmetro é mutuamente exclusivo com | Um conjunto de strings separadas por ponto e vírgula, onde cada string é um único número de porta ou um intervalo de portas conectado por um hífen, como |
| PyTorch | Permite solicitar um número de portas de rede a serem expostas em cada worker. Use este parâmetro junto com Se deixado sem configuração, apenas a porta 23456 é exposta no master por padrão. O DLC atribui portas aleatoriamente aos workers com base no número de portas definido no parâmetro. Os números de porta atribuídos são passados para o worker por meio da variável de ambiente Importante
| Inteiro (máximo: 65536) |
| Ray | Quando o framework é o Ray, configure manualmente o RayRuntimeEnv para definir o ambiente de execução. Importante As variáveis de ambiente e as configurações de bibliotecas de terceiros são substituídas por esta configuração. | Configure variáveis de ambiente e bibliotecas de terceiros ( |
| Ray | Endereço externo do Redis GCS. | String |
| Ray | Nome de usuário externo do Redis GCS. | String |
| Ray | Senha externa do Redis GCS. | String |
| Ray | O número de tentativas para o submitter. | Inteiro positivo (int) |
| Ray | Configura a memória compartilhada para um nó. Por exemplo, para configurar 1 GiB de memória compartilhada para cada nó, use a seguinte configuração: | Inteiro positivo (int) |
para selecionar um método de lance: