O PAI-DLC cria jobs de treinamento em nó único ou distribuídos no Kubernetes, eliminando a necessidade de provisionar instâncias ou configurar ambientes. Ele oferece suporte a múltiplos frameworks de deep learning e configurações flexíveis de recursos.
Início rápido
Para um tutorial baseado em MNIST sobre treinamento distribuído com GPU única ou multi-nó e multi-GPU, consulte o Início Rápido de Treinamento Distribuído DLC.
Parâmetros do console
Informações básicas
Configure o Job Name e a Tag.
Informações de ambiente
|
Parâmetro |
Descrição |
|
Image Configuration |
Além de selecionar uma Alibaba Cloud Image, você pode usar os seguintes tipos de imagem:
|
|
Mount dataset |
Os datasets fornecem os arquivos de dados necessários para o treinamento do modelo. O PAI oferece suporte a dois tipos de datasets:
Mount Path: Caminho no contêiner DLC onde o dataset é montado, por exemplo, Importante
Se você configurar um dataset CPFS, configure uma VPC para o DLC e garanta que ela seja a mesma VPC do sistema de arquivos CPFS. Caso contrário, o job enviado poderá permanecer no estado "Preparing" por um longo período. |
|
Mount storage |
Também é possível montar um caminho de origem de dados para ler informações ou armazenar arquivos intermediários e resultados.
|
|
Startup Command |
Defina o comando de inicialização do job. Comandos Shell são suportados. O DLC injeta automaticamente variáveis de ambiente comuns para PyTorch e TensorFlow, como
|
Informações de recursos
|
Parâmetro |
Descrição |
|
Resource Type |
O valor padrão é General Computing. Os Lingjun Intelligence Resources estão disponíveis nas seguintes regiões: China (Ulanqab), Singapura, China (Shenzhen), China (Pequim), China (Xangai), China (Hangzhou), China (Guangzhou), China (Hong Kong), Malásia (Kuala Lumpur), Alemanha (Frankfurt) e Atlanta. |
|
Source |
|
|
Framework |
Frameworks e ferramentas de treinamento de deep learning suportados: TensorFlow, PyTorch, ElasticBatch, XGBoost, OneFlow, MPIJob, Ray, Custom, DataJuicer e MPI. Nota
Ao selecionar Resource Quota e usar recursos de computação Lingjun AI, envie apenas 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. Se escolher o framework Ray, clique em Add Role para personalizar funções de Worker e executar jobs em recursos heterogêneos.
|
Configuração de VPC
Sem uma VPC, o job utiliza um Public Gateway com largura de banda limitada, o que pode tornar o job lento ou causar falhas.
-
Configure uma VPC com vSwitch e grupo de segurança para melhorar a largura de banda, a estabilidade e a segurança. O cluster do job pode acessar diretamente serviços dentro da VPC.
ImportanteSe utilizar uma VPC, garanta que as instâncias do grupo de recursos do job e o armazenamento de datasets (OSS) estejam em uma VPC na mesma região e que a VPC esteja conectada à rede do repositório de código.
Se utilizar um dataset CPFS, configure uma VPC e garanta que a VPC selecionada seja a mesma do sistema de arquivos CPFS. Caso contrário, o job de treinamento DLC enviado poderá permanecer no estado "Preparing" por um longo período.
Configure uma VPC ao enviar um job DLC que utilize recursos de computação Lingjun AI preemptíveis.
Também é possível configurar um Internet Access Gateway usando um dos seguintes métodos:
Public Gateway: Possui largura de banda limitada que pode ser insuficiente durante acessos de alta concorrência ou downloads de arquivos grandes.
Private Gateway: Para superar os limites de largura de banda do Public Gateway, crie um NAT Gateway de Internet na VPC do DLC, vincule um EIP e configure entradas SNAT. Melhorar a velocidade de acesso à rede pública usando um gateway privado.
Tolerância a falhas e diagnóstico
|
Parâmetro |
Descrição |
|
Automatic Fault Tolerance |
Ative a Automatic Fault Tolerance e configure os parâmetros necessários para detectar e mitigar erros no nível do algoritmo, melhorando a utilização da GPU. AIMaster: Um mecanismo elástico de tolerância a falhas automáticas. Nota
Ao ativar a tolerância automática a falhas, uma instância AIMaster é iniciada e executada junto com a instância do job. Isso consome uma quantidade específica de recursos de computação. A instância AIMaster utiliza os seguintes recursos:
|
|
Sanity Check |
Ative o Sanity Check para verificar abrangentemente os recursos de treinamento, isolar nós com falha e acionar processos automatizados de O&M no backend. Reduz falhas iniciais e melhora a taxa de sucesso. SanityCheck: Verificação de integridade de recursos de computação. Nota
O recurso de verificação de integridade é suportado apenas para jobs de treinamento PyTorch enviados usando uma cota de recursos de computação Lingjun AI e que possuam contagem de GPU maior que 0. |
Funções e permissões
Configurações de função RAM da instância. Configurar uma função RAM do DLC.
|
Função RAM da instância |
Descrição |
|
Default Role of PAI |
A função padrão do PAI concede as seguintes permissões via credenciais temporárias STS:
|
|
Custom Role |
Selecione ou insira uma função RAM personalizada. A instância assume as permissões dessa função ao acessar serviços em nuvem através de credenciais temporárias STS. |
|
Does Not Associate Role |
Nenhuma função RAM é associada ao job DLC. Esta é a opção padrão. |
Tópicos relacionados
Detalhes do job, uso de recursos e logs de operação: Visualize detalhes do treinamento.
Detalhes de faturamento: Detalhes da fatura.
Problemas comuns e soluções: FAQ do DLC.
Casos de uso: Casos de uso do DLC.
Apêndice
Criar um job via SDK ou CLI
Python SDK
Etapa 1: Instale a ferramenta Credentials
Instale a ferramenta Credentials para autenticação do SDK. Requisitos:
Python 3.7 ou posterior.
Alibaba Cloud SDK série 2.0.
pip install alibabacloud_credentials
Etapa 2: Obter um AccessKey
Este exemplo usa um par de AccessKey. Armazene os valores do AccessKey como variáveis de ambiente para evitar riscos de segurança. A variável de ambiente para o AccessKey ID é ALIBABA_CLOUD_ACCESS_KEY_ID, e a variável de ambiente para o segredo do AccessKey é ALIBABA_CLOUD_ACCESS_KEY_SECRET.
Obter um par de AccessKey: Criar um AccessKey.
Definir variáveis de ambiente: Configurar variáveis de ambiente.
Outros métodos de credencial: Instale a ferramenta Credentials.
Etapa 3: Instale os SDKs 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 o job
Recursos públicos
O código de exemplo a seguir cria e envia um job.
Cota de recursos por assinatura
Faça login no PAI console.
Para visualizar o ID do seu workspace: No painel de navegação à esquerda, clique em Workspaces. Localize o workspace desejado, clique no ícone ⓘ ao lado do nome e visualize/copie o Workspace ID no cartão de informações exibido.
Para visualizar o ID da sua cota de recursos para o grupo de recursos dedicados: No painel de navegação à esquerda, escolha AI Computing Resources > Resource Quotas. Clique na aba General-purpose Computing Resources e obtenha o Quota ID na coluna Name/ID da lista de cotas de recursos.
-
Use o código a seguir para criar e enviar um job. Para obter uma lista de imagens públicas disponíveis, consulte Etapa 2: Preparar uma imagem.
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' # An AccessKey pair provides full API access. For security purposes, we recommend that you use a RAM user for API access and daily O&M. # Do not hard-code your AccessKey ID and AccessKey secret in your code. This may lead to AccessKey leakage and compromise the security of all resources in your account. # This example shows how to use the Credentials SDK to read the AccessKey from environment variables for 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, you can refer to the public image list in the documentation or provide your own image URL. 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 job's execution details. req = CreateJobRequest( resource_id='<Replace with the ID of your resource quota>', workspace_id='<Replace with your 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
Instâncias 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 ID of the region in which the DLC job resides, such as cn-hangzhou. cred = CredClient() workspace_id = '12****' # The ID of the workspace to which the DLC job belongs. 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 region_id = '<region-id>' cred = CredClient() workspace_id = '12****' 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", "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'", })) job_id = create_job_resp.body.job_id print(f'jobId is {job_id}')
A tabela a seguir descreve os parâmetros principais.
|
Parâmetro |
Descrição |
|
SpotStrategy |
Política de lance. Os parâmetros de tipo de lance só entram em vigor se você definir este parâmetro como SpotWithPriceLimit. |
|
SpotDiscountLimit |
Tipo de lance por desconto spot. Nota
|
|
SpotPriceLimit |
Tipo de lance por preço spot. |
|
UserVpc |
Este parâmetro é obrigatório ao usar recursos Lingjun para enviar jobs. Configure a VPC, o vSwitch e o ID do grupo de segurança para a região onde o job reside. |
CLI
Etapa 1: Baixe o cliente e autenticar
Baixe a ferramenta cliente para Linux (64 bits) ou macOS e conclua a autenticação. Preparações.
Etapa 2: Envie o job
Faça login no PAI console.
-
Para visualizar o ID do seu workspace:
No painel de navegação à esquerda, clique em Workspaces. Localize o workspace desejado, clique no ícone ⓘ ao lado do nome e visualize o Workspace ID no cartão de informações exibido.
-
Para visualizar o ID da sua cota de recursos:
No painel de navegação à esquerda, escolha AI Computing Resources > Resource Quotas. Selecione a aba do tipo de recurso desejado, como General-purpose Computing Resources, e obtenha o ID da cota de recursos na coluna Name/ID.
-
Crie um arquivo de parâmetros chamado
tfjob.paramscom o seguinte conteúdo. Detalhes do arquivo de parâmetros: Comando de envio.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=<Replace with your resource quota ID> workspace_id=<Replace with your WorkspaceID> -
Execute o comando a seguir para enviar o job DLC para um workspace e cota de recursos especificados, usando o parâmetro '--job_file' para indicar o caminho do seu arquivo de parâmetros.
./dlc submit tfjob --job_file ./tfjob.params -
Execute o comando a seguir para visualizar o job DLC que você enviou.
./dlc get job <jobID>
Parâmetros avançados
|
Parâmetro |
Frameworks suportados |
Descrição |
Valor |
|
|
ALL |
Por padrão, todos os recursos do pod são liberados após a conclusão do job. O único outro valor suportado é 'pod-exit', que libera os recursos de um pod assim que ele é encerrado. |
pod-exit |
|
|
ALL |
Especifica se o recurso IBGDA deve ser ativado quando o driver da GPU é carregado. |
|
|
|
ALL |
Especifica se o módulo de kernel GDRCopy deve ser instalado. (Versão: 2.4.4) |
|
|
|
ALL |
Especifica se o vínculo de núcleo NUMA deve ser ativado. |
|
|
|
ALL |
Especifica se deve verificar se o total de recursos (especificações de nó) na cota pode atender às especificações de todas as funções no job durante o envio. |
|
|
|
PyTorch |
Especifica se a comunicação de rede entre workers é permitida.
Após ativar este recurso, o nome de domínio de cada worker será igual ao seu nome de worker, como |
|
|
|
PyTorch |
Permite especificar as portas de rede a serem abertas em cada worker, podendo ser usado com Se este parâmetro não for configurado, apenas a porta 23456 no worker master será aberta por padrão. Portanto, certifique-se de que a porta 23456 não esteja incluída nesta lista de portas personalizadas. Importante
Este parâmetro e |
Um conjunto de strings separadas por ponto e vírgula, onde cada string é um número de porta ou um intervalo de portas conectado por um hífen, como |
|
|
PyTorch |
Permite solicitar várias portas de rede para cada worker e pode ser usado com Se esta configuração não for definida, apenas a porta 23456 será aberta no nó master por padrão. O DLC atribui portas aleatoriamente aos nós worker com base na quantidade de portas especificada. Os números de porta atribuídos são passados para os nós worker através da variável de ambiente Importante
|
Um número inteiro até 65536. |
|
|
Ray |
Quando o framework é Ray, configure manualmente o RayRuntimeEnv para definir o ambiente de execução. Importante
Esta configuração substitui outras definições de variáveis de ambiente e bibliotecas de terceiros. |
Configure variáveis de ambiente e bibliotecas de terceiros ( |
|
|
Ray |
Endereço do servidor Redis GCS externo. |
String |
|
|
Ray |
Nome de usuário para o servidor Redis GCS externo. |
String |
|
|
Ray |
Senha para o servidor Redis GCS externo. |
String |
|
|
Ray |
Número de tentativas do submitter. |
Inteiro positivo (int) |
|
|
Ray |
Configura 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: