Todos os produtos
Search
Central de documentação

Platform For AI:Create a training job

Última atualização: Sep 22, 2026

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:

  • Restrições de chave: Não deve começar com aliyun ou acs:. Não deve conter http:// ou https://. Comprimento máximo: 128 caracteres. As chaves podem conter apenas letras, números, hifens (-), sublinhados (_) e pontos (.).

  • Restrições de valor: Não deve conter http:// ou https://. Comprimento máximo: 256 caracteres. Separe vários valores com vírgulas.

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:

  • Custom Image: Use imagens personalizadas adicionadas ao PAI. Defina o repositório de imagens como público ou armazene a imagem no Alibaba Cloud Container Registry (ACR). Para mais detalhes, consulte Custom images.

    Nota

    Ao selecionar recursos Lingjun e usar uma imagem personalizada, instale manualmente os drivers RDMA para aproveitar ao máximo a rede RDMA de alto desempenho. Para mais detalhes, consulte RDMA: distributed training with a high-performance network.

  • Image Address: Configure endereços de imagens personalizadas ou oficiais com acesso público.

    • Para endereços de imagens privadas, clique em Enter credentials e configure o nome de usuário e a senha do repositório de imagens.

    • Para aumentar a velocidade de pull da imagem, consulte Image acceleration.

Mount dataset

Os datasets fornecem os arquivos de dados necessários para o treinamento do modelo. Há suporte para os seguintes tipos de dataset:

  • Custom Dataset: Crie um dataset personalizado para armazenar os arquivos de dados necessários para o treinamento. Ative o modo Read-only e selecione uma versão do dataset na lista de versões.

  • Public Dataset: O PAI fornece datasets públicos integrados, que suportam apenas montagem em modo de leitura.

Mount Path: Caminho onde o dataset é montado no contêiner do DLC, por exemplo /mnt/data. Acesse o dataset por meio desse caminho no seu código. Para mais detalhes sobre a configuração de montagem, consulte Use cloud storage.

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.

  • Tipos de origem de dados com suporte: OSS, NAS de uso geral, NAS extremo, CPFS e BMCPFS (disponível apenas com recursos Lingjun).

  • Advanced Settings: Diferentes tipos de origem de dados oferecem recursos específicos por meio de configurações avançadas. Por exemplo:

    • OSS: Defina {"mountType":"ossfs"} nas configurações avançadas para montar o armazenamento OSS usando ossfs.

    • NAS de uso geral e CPFS: Defina o parâmetro nconnect nas configurações avançadas para melhorar o throughput do NAS a partir do contêiner do DLC. Para mais detalhes, consulte How do I improve NAS performance on Linux?. Por exemplo, {"nconnect":"<sample value>"}, onde <sample value> é substituído por um número inteiro positivo específico.

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 MASTER_ADDR e WORLD_SIZE. Referencie-as usando $VARIABLE_NAME. Exemplos de comandos de inicialização:

  • Execute Python: python -c "print('Hello World')"

  • Treinamento distribuído PyTorch em múltiplos nós e múltiplas GPUs: python -m torch.distributed.launch \ --nproc_per_node=2 \ --master_addr=${MASTER_ADDR} \ --master_port=${MASTER_PORT} \ --nnodes=${WORLD_SIZE} \ --node_rank=${RANK} \ train.py --epochs=100

  • Especificar um caminho de script shell como comando de inicialização: /ml/input/config/launch.sh

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

Expanda para mais configurações: variáveis de ambiente, bibliotecas de terceiros, configuração de código

Environment Variable

Além das common PyTorch and TensorFlow environment variables injetadas automaticamente, forneça variáveis de ambiente personalizadas no formato Key:Value. Há suporte para até 20 variáveis de ambiente.

Third-party Libraries

Se a imagem do contêiner não tiver algumas bibliotecas de terceiros, adicione-as por meio de Third-party Libraries. Há suporte para dois métodos:

  • Select from List: Insira os nomes das bibliotecas diretamente na caixa de texto abaixo. Separe vários nomes de bibliotecas com espaços, por exemplo griffon numpy pandas.

  • Directory of requirements.txt: Adicione as bibliotecas a um arquivo requirements.txt, faça o upload para o contêiner do DLC por meio de configuração de código, dataset ou montagem direta e especifique o caminho do arquivo no contêiner na caixa de texto.

Code Builds

Faça o upload dos arquivos de código necessários para o treinamento para o contêiner do DLC. Há suporte para os seguintes métodos de configuração:

  • Online configuration: Se você tiver um repositório git existente e tiver permissões de acesso, vincule-o usando Crie uma configuração de código para que o DLC possa recuperar o código do job.

  • Local Upload: Clique no botão image.png para fazer o upload de arquivos de código locais. Após um upload bem-sucedido, configure o Mount path para um caminho específico dentro do contêiner, por exemplo /mnt/data.

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

  • Public Resources:

    • Modelo de faturamento: pagamento conforme o uso.

    • Ideal para cargas de trabalho com jobs esporádicos e sem requisitos rígidos de tempo. Recursos públicos podem exigir fila.

    • Limites de recursos: até 2 GPUs e 8 núcleos de CPU. Para exceder esses limites, entre em contato com o gerente da sua conta e solicite o aumento da cota.

  • Resource Quota: Inclui recursos de computação de uso geral ou recursos Lingjun.

    • Modelo de faturamento: Assinatura.

    • Ideal para cenários com alto volume de jobs que exigem recursos estáveis e garantidos.

    • Parâmetros especiais:

      • Resource Quota: Defina a quantidade de GPU, CPU e outros recursos. Para saber como preparar cotas de recursos, consulte Crie uma cota de recursos.

      • Priority: Indica a prioridade de execução de jobs simultâneos. Intervalo de valores: [1, 9], onde 1 é a prioridade mais baixa.

    • Pré-verificação: Verifica automaticamente o modelo de GPU e a compatibilidade da imagem antes do envio do job. Isso detecta erros de configuração antecipadamente e evita falhas no job.

  • Preemptible Resources:

    • Modelo de faturamento: pagamento conforme o uso.

    • Ideal para cenários sensíveis a custos. O preço de recursos spot é menor que o do pagamento conforme o uso.

    • Sem garantia de disponibilidade. Os recursos podem não estar imediatamente disponíveis ou podem ser recuperados. Para mais informações, consulte Use a preemptible job.

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.

  • Uso de recursos públicos: Os seguintes parâmetros podem ser configurados:

    • Number of Nodes: Número de nós que executam o job do DLC.

    • Resource Type: Selecione o tipo de instância. O console exibe o preço correspondente. Para mais informações sobre faturamento, consulte DLC billing.

  • Uso de cotas de recursos: Configure o número de nós, núcleos de CPU, GPUs, memória (GiB) e memória compartilhada (GiB) para cada tipo de nó. Os seguintes parâmetros especiais também estão disponíveis:

    • Node-Specific Scheduling: Execute jobs em nós de computação específicos.

    • Idle Resources: Ao usar recursos de tempo ocioso, os jobs podem ser executados na capacidade ociosa de outras cotas, o que melhora a utilização de recursos. No entanto, quando a cota original precisa desses recursos, os jobs de tempo ocioso são encerrados automaticamente e os recursos são devolvidos. Para mais informações, consulte Use idle-time resources.

    • CPU Affinity: Ative a afinidade de CPU para vincular processos a núcleos de CPU específicos. Isso reduz cache misses e trocas de contexto, melhorando o desempenho. Ideal para cenários com requisitos de alto desempenho e tempo real.

  • Uso de recursos spot: Além da contagem de nós e do tipo de instância, configure o parâmetro Bid Price, que define o lance máximo para recursos spot. Clique no botão image para selecionar um método de lance:

    • Por desconto: O preço máximo baseia-se no preço de mercado do tipo de instância, com opções discretas de 10% a 90% do preço de mercado, representando o limite do lance. Os recursos spot são alocados quando o lance máximo é maior ou igual ao preço de mercado e há capacidade suficiente disponível.

    • Por preço: O intervalo de lance máximo está dentro do intervalo de preço de mercado.

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:

  • Intelligent: Os jobs de GPU são consolidados no menor número possível de nós de GPU, enquanto os jobs de CPU são distribuídos pelos nós de CPU. Esta é a estratégia padrão.

  • Centralized: Os jobs são consolidados no menor número possível de nós. Esta estratégia ajuda a reduzir a fragmentação de recursos e é ideal para treinamento de modelos em GPU.

  • Spread: Os jobs são distribuídos pelos nós. Esta estratégia melhora a taxa de sucesso de retirada da fila do job e é ideal para jobs de CPU distribuídos.

Nota

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.

Expanda para mais configurações: duração máxima de execução, período de retenção, configurações avançadas do framework

Maximum Duration

Defina a duração máxima de execução de um job. Jobs que excedem essa duração são interrompidos automaticamente. Padrão: 30 dias.

Retention Period

Configure por quanto tempo os jobs concluídos ou com falha são retidos. A retenção continua a consumir recursos. Jobs que excedem essa duração são excluídos.

Importante

Jobs do DLC excluídos não podem ser restaurados. Prossiga com cautela.

Start Developer Machine

Quando a origem do recurso é uma cota de recurso, inicie uma instância DSW para depuração online. Na área de lista de instâncias da página de visão geral do job, clique em DSW na coluna Actions para acessar a instância.

Advanced Framework Configuration

Para obter a lista de parâmetros configuráveis e seus valores, consulte Advanced parameter list.

  • Há suporte para os parâmetros ReleaseResourcePolicy, EnableNvidiaIBGDA, EnableNvidiaGDRCopy, EnablePaiNUMACoreBinding e EnableResourcePreCheck em todos os frameworks.

  • Quando o framework é o PyTorch, os parâmetros com suporte são: createSvcForAllWorkers, customPortList e customPortNumPerWorker.

    Importante

    Como os recursos Lingjun não oferecem capacidade de porta personalizada, não há suporte para o parâmetro customPortNumPerWorker ao enviar jobs do DLC com recursos Lingjun.

  • Quando o framework é o Ray, os parâmetros com suporte são: RayRuntimeEnv, RayRedisAddress, RayRedisUsername, RayRedisPassword, RaySubmitterBackoffLimit e RayObjectStoreMemoryBytes. As variáveis de ambiente e as configurações de bibliotecas de terceiros serão substituídas pela configuração RayRuntimeEnv.

Há suporte para os seguintes formatos de configuração:

  • Texto simples: Configure como uma string separada por vírgulas (,) em que cada entrada segue o formato key=value. A chave é um parâmetro avançado com suporte e o valor é o valor correspondente do parâmetro.

  • JSON

Cenários típicos de configuração:

  • Cenário 1: Configuração avançada do PyTorch

    Os parâmetros de configuração avançada permitem a conectividade de rede entre Workers, o que possibilita abordagens de treinamento mais flexíveis. Por exemplo, use as portas expostas adicionais para iniciar um framework como o Ray dentro do contêiner do DLC e combine-o com o PyTorch para treinamento distribuído avançado. Exemplo de configuração:

    createSvcForAllWorkers=true,customPortNumPerWorker=100

    Em seguida, use o Startup Command para configurar as variáveis de ambiente $JOB_NAME e $CUSTOM_PORTS. Isso permite obter o nome de domínio e os números de porta disponíveis, além de iniciar e conectar-se a frameworks como o Ray.

  • Cenário 2: Configurar manualmente o RayRuntimeEnv para o framework Ray (incluindo dependências e variáveis de ambiente)

    Exemplo de configuração:

    {"RayRuntimeEnv": "{pip: requirements.txt, env_vars: {key: value}}"}
  • Cenário 3: Política personalizada de liberação de recursos

    Atualmente, a única política de liberação com suporte é pod-exit, que libera recursos automaticamente quando o seu Pod é encerrado. Exemplo de configuração:

    {
          "ReleaseResourcePolicy": "pod-exit"
        }

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.

    Importante
    • Ao 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:

  • Cota de recursos: 1 núcleo de CPU e 1 GiB de memória.

  • Recursos públicos: Usa o tipo de instância ecs.c6.large.

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:

  • Ao acessar tabelas do MaxCompute, tem as mesmas permissões que o proprietário da instância DLC.

  • Ao acessar o OSS, só é possível acessar o bucket padrão do OSS configurado para o workspace atual.

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

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.

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:

Código de exemplo para criar e enviar um job

#!/usr/bin/env python3

from __future__ import print_function

import json
import time

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 (
    ListJobsRequest,
    ListEcsSpecsRequest,
    CreateJobRequest,
    GetJobRequest,
)

from alibabacloud_aiworkspace20210204.client import Client as AIWorkspaceClient
from alibabacloud_aiworkspace20210204.models import (
    ListWorkspacesRequest,
    CreateDatasetRequest,
    ListDatasetsRequest,
    ListImagesRequest,
    ListCodeSourcesRequest
)

def create_nas_dataset(client, region, workspace_id, name,
                       nas_id, nas_path, mount_path):
    '''Create a NAS dataset.
    '''
    response = client.create_dataset(CreateDatasetRequest(
        workspace_id=workspace_id,
        name=name,
        data_type='COMMON',
        data_source_type='NAS',
        property='DIRECTORY',
        uri=f'nas://{nas_id}.{region}{nas_path}',
        accessibility='PRIVATE',
        source_type='USER',
        options=json.dumps({
            'mountPath': mount_path
        })
    ))
    return response.body.dataset_id

def create_oss_dataset(client, region, workspace_id, name,
                       oss_bucket, oss_endpoint, oss_path, mount_path):
    '''Create an OSS dataset.
    '''
    response = client.create_dataset(CreateDatasetRequest(
        workspace_id=workspace_id,
        name=name,
        data_type='COMMON',
        data_source_type='OSS',
        property='DIRECTORY',
        uri=f'oss://{oss_bucket}.{oss_endpoint}{oss_path}',
        accessibility='PRIVATE',
        source_type='USER',
        options=json.dumps({
            'mountPath': mount_path
        })
    ))
    return response.body.dataset_id

def wait_for_job_to_terminate(client, job_id):
    while True:
        job = client.get_job(job_id, GetJobRequest()).body
        print('job({}) is {}'.format(job_id, job.status))
        if job.status in ('Succeeded', 'Failed', 'Stopped'):
            return job.status
        time.sleep(5)
    return None

def main():

    # Please make sure that your primary account has authorized DLC and has sufficient permissions.
    region_id = '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()

    # 1. create client;
    workspace_client = AIWorkspaceClient(
        config=Config(
            credential=cred,
            region_id=region_id,
            endpoint="aiworkspace.{}.aliyuncs.com".format(region_id),
        )
    )

    dlc_client = DLCClient(
         config=Config(
            credential=cred,
            region_id=region_id,
            endpoint='pai-dlc.{}.aliyuncs.com'.format(region_id),
         )
    )

    print('------- Workspaces -----------')
    # Get the list of workspaces. You can also specify the workspace name you created in the workspace_name parameter.
    workspaces = workspace_client.list_workspaces(ListWorkspacesRequest(
        page_number=1, page_size=1, workspace_name='',
        module_list='PAI'
    ))
    for workspace in workspaces.body.workspaces:
        print(workspace.workspace_name, workspace.workspace_id,
              workspace.status, workspace.creator)

    if len(workspaces.body.workspaces) == 0:
        raise RuntimeError('found no workspaces')

    workspace_id = workspaces.body.workspaces[0].workspace_id

    print('------- Images ------------')
    # Get the list of images.
    images = workspace_client.list_images(ListImagesRequest(
        labels=','.join(['system.supported.dlc=true',
                         'system.framework=Tensorflow 1.15',
                         'system.pythonVersion=3.6',
                         'system.chipType=CPU'])))
    for image in images.body.images:
        print(json.dumps(image.to_map(), indent=2))

    image_uri = images.body.images[0].image_uri

    print('------- Datasets ----------')
    # Get the dataset.
    datasets = workspace_client.list_datasets(ListDatasetsRequest(
        workspace_id=workspace_id,
        name='example-nas-data', properties='DIRECTORY'))
    for dataset in datasets.body.datasets:
        print(dataset.name, dataset.dataset_id, dataset.uri, dataset.options)

    if len(datasets.body.datasets) == 0:
        # Create the dataset if the current dataset does not exist.
        dataset_id = create_nas_dataset(
            client=workspace_client,
            region=region_id,
            workspace_id=workspace_id,
            name='example-nas-data',
            # NAS file system ID.
            # General-purpose NAS: 31a8e4****.
            # Extreme NAS: Must start with "extreme-", e.g., extreme-0015****.
            # CPFS: Must start with "cpfs-", e.g., cpfs-125487****.
            nas_id='***',
            nas_path='/',
            mount_path='/mnt/data/nas')
        print('create dataset with id: {}'.format(dataset_id))
    else:
        dataset_id = datasets.body.datasets[0].dataset_id

    print('------- Code Sources ----------')
    # Get the list of code sources.
    code_sources = workspace_client.list_code_sources(ListCodeSourcesRequest(
        workspace_id=workspace_id))
    for code_source in code_sources.body.code_sources:
        print(code_source.display_name, code_source.code_source_id, code_source.code_repo)

    print('-------- ECS SPECS ----------')
    # Get the list of ECS specifications for DLC.
    ecs_specs = dlc_client.list_ecs_specs(ListEcsSpecsRequest(page_size=100, sort_by='Memory', order='asc'))
    for spec in ecs_specs.body.ecs_specs:
        print(spec.instance_type, spec.cpu, spec.memory, spec.memory, spec.gpu_type)

    print('-------- Create Job ----------')
    # Create a DLC job.
    create_job_resp = dlc_client.create_job(CreateJobRequest().from_map({
        'WorkspaceId': workspace_id,
        'DisplayName': 'sample-dlc-job',
        'JobType': 'TFJob',
        'JobSpecs': [
            {
                "Type": "Worker",
                "Image": image_uri,
                "PodCount": 1,
                "EcsSpec": ecs_specs.body.ecs_specs[0].instance_type,
            },
        ],
        "UserCommand": "echo 'Hello World' && ls -R /mnt/data/ && sleep 30 && echo 'DONE'",
        'DataSources': [
            {
                "DataSourceId": dataset_id,
            },
        ],
    }))
    job_id = create_job_resp.body.job_id

    wait_for_job_to_terminate(dlc_client, job_id)

    print('-------- List Jobs ----------')
    # Get the list of DLC jobs.
    jobs = dlc_client.list_jobs(ListJobsRequest(
        workspace_id=workspace_id,
        page_number=1,
        page_size=10,
    ))
    for job in jobs.body.jobs:
        print(job.display_name, job.job_id, job.workspace_name,
              job.status, job.job_type)
    pass

if __name__ == '__main__':
    main()

Envie um job usando uma cota de recursos de assinatura

  1. Faça login no PAI console.

  2. 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.

  3. 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.

  4. 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

  • SpotDiscountLimit e SpotPriceLimit não podem ser definidos ao mesmo tempo.

  • Para recursos spot Lingjun, há suporte apenas para SpotDiscountLimit como tipo de lance.

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.

Nota

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

  1. Faça login no PAI console.

  2. 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.

  3. 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.

  4. 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>
  5. 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
  6. 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

ReleaseResourcePolicy

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

EnableJumboFrame

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.

true ou false

EnableNvidiaIBGDA

ALL

Especifica se o IBGDA deve ser ativado quando o driver da GPU é carregado.

true ou false

EnableNvidiaGDRCopy

ALL

Especifica se o módulo de kernel GDRCopy deve ser instalado. A versão atualmente instalada é a 2.4.4.

true ou false

EnablePaiNUMACoreBinding

ALL

Especifica se o NUMA deve ser ativado.

true ou false

EnableResourcePreCheck

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.

true ou false

createSvcForAllWorkers

PyTorch

Especifica se a conectividade de rede entre workers deve ser permitida.

  • Se definido como true, todos os workers do PyTorch podem se comunicar entre si pela rede.

  • Se definido como false ou deixado sem configuração, apenas o master pode ser acessado por padrão.

Após a ativação, o nome de domínio de cada worker é o nome do worker, como dlcxxxxx-master-0. O nome do job (dlcxxxxx) é então passado para o worker por meio da variável de ambiente JOB_NAME. Em seguida, determine o nome de domínio do worker específico que deseja acessar.

true ou false

customPortList

PyTorch

Permite definir as portas de rede expostas em cada worker. Use este parâmetro junto com createSvcForAllWorkers para ativar a conectividade de rede entre workers.

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 customPortNumPerWorker. Não os defina ao mesmo tempo.

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 10000;10001-10010 (que é convertido em 11 números de porta consecutivos de 10000 a 10010).

customPortNumPerWorker

PyTorch

Permite solicitar um número de portas de rede a serem expostas em cada worker. Use este parâmetro junto com createSvcForAllWorkers para ativar a conectividade de rede entre workers.

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 CUSTOM_PORTS para consulta. O formato é um conjunto de números de porta separados por ponto e vírgula.

Importante
  • Este parâmetro é mutuamente exclusivo com customPortList. Não os defina ao mesmo tempo.

  • Os recursos de computação Lingjun não oferecem suporte a portas personalizadas. Portanto, ao enviar um job do DLC usando recursos de computação Lingjun, não há suporte para o parâmetro customPortNumPerWorker.

Inteiro (máximo: 65536)

RayRuntimeEnv

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 ({pip: requirements.txt, env_vars: {key: value}})

RayRedisAddress

Ray

Endereço externo do Redis GCS.

String

RayRedisUsername

Ray

Nome de usuário externo do Redis GCS.

String

RayRedisPassword

Ray

Senha externa do Redis GCS.

String

RaySubmitterBackoffLimit

Ray

O número de tentativas para o submitter.

Inteiro positivo (int)

RayObjectStoreMemoryBytes

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:

{
      "RayObjectStoreMemoryBytes": "1073741824"
    }

Inteiro positivo (int)