Como especificar tipos de máquinas ou níveis de escalonamento

Ao executar um job de treinamento no AI Platform Training, especifique o número e os tipos de máquinas que serão necessários. Para facilitar o processo, escolha uma opção em um conjunto de especificações de cluster predefinidas chamadas níveis de escalonamento. Como alternativa, é possível escolher um nível personalizado e especificar os tipos de máquina por conta própria.

Como especificar a configuração

A especificação da sua configuração de cluster dependerá de como você planeja executar o job de treinamento:

gcloud

Crie um arquivo de configuração YAML que represente o objeto TrainingInput e especifique o identificador do nível de escalonamento e os tipos de máquina nesse arquivo. É possível nomear esse arquivo como quiser. Por convenção, o nome é config.yaml.

O exemplo a seguir mostra o conteúdo do arquivo de configuração, config.yaml, para um job com um cluster de processamento personalizado.

trainingInput:
  scaleTier: CUSTOM
  masterType: n1-highcpu-16
  workerType: n1-highcpu-16
  parameterServerType: n1-highmem-8
  evaluatorType: n1-highcpu-16
  workerCount: 9
  parameterServerCount: 3
  evaluatorCount: 1

Forneça o caminho para o arquivo YAML na sinalização --config ao executar o comando gcloud ai-platform jobs submit training:

gcloud ai-platform jobs submit training $JOB_NAME \
        --package-path $TRAINER_PACKAGE_PATH \
        --module-name $MAIN_TRAINER_MODULE \
        --job-dir $JOB_DIR \
        --region $REGION \
        --config config.yaml \ 
        -- \
        --user_first_arg=first_arg_value \
        --user_second_arg=second_arg_value

Como alternativa, especifique detalhes de configuração de cluster com sinalizações de linha de comando, em vez de em um arquivo de configuração. Saiba mais sobre como usar essas sinalizações.

No exemplo a seguir, mostramos como enviar um job de treinamento com uma configuração semelhante ao exemplo anterior, mas sem usar um arquivo de configuração:

gcloud ai-platform jobs submit training $JOB_NAME \
        --package-path $TRAINER_PACKAGE_PATH \
        --module-name $MAIN_TRAINER_MODULE \
        --job-dir $JOB_DIR \
        --region $REGION \
        --scale-tier custom \
        --master-machine-type n1-highcpu-16 \
        --worker-machine-type n1-highcpu-16 \
        --parameter-server-machine-type n1-highmem-8 \
        --worker-count 9 \
        --parameter-server-count 3 \
        -- \
        --user_first_arg=first_arg_value \
        --user_second_arg=second_arg_value

Saiba mais sobre como executar um job de treinamento.

Python

Especifique o identificador do nível de escalonamento e os tipos de máquina no objeto TrainingInput na configuração do job.

Veja no exemplo a seguir como criar uma representação "Job" para um job com cluster de processamento personalizado.

training_inputs = {'scaleTier': 'CUSTOM',
    'masterType': 'n1-highcpu-16',
    'workerType': 'n1-highcpu-16',
    'parameterServerType': 'n1-highmem-8',
    'evaluatorType': 'n1-highcpu-16',
    'workerCount': 9,
    'parameterServerCount': 3,
    'evaluatorCount': 1,
    'packageUris': ['gs://my/trainer/path/package-0.0.0.tar.gz'],
    'pythonModule': 'trainer.task'
    'args': ['--arg1', 'value1', '--arg2', 'value2'],
    'region': 'us-central1',
    'jobDir': 'gs://my/training/job/directory',
    'runtimeVersion': '2.11',
    'pythonVersion': '3.7'}

job_spec = {'jobId': my_job_name, 'trainingInput': training_inputs}

Observe que training_inputs e job_spec são identificadores arbitrários: nomeie esses dicionários como quiser. No entanto, as chaves do dicionário precisam ser nomeadas exatamente como mostradas, para corresponder aos nomes nos recursos Job e TrainingInput.

Níveis de escalonamento

O Google pode otimizar a configuração dos níveis de escalonamento de jobs diferentes ao longo do tempo, de acordo com o feedback dos clientes e a disponibilidade de recursos da nuvem. Cada nível de escalonamento é definido com base na adequação dele a determinados tipos de jobs. Geralmente, quanto mais avançado ele for, mais máquinas serão alocadas para o cluster e mais avançadas serão as especificações de cada máquina virtual. Conforme a complexidade do nível de escalonamento aumenta, o custo por hora dos jobs de treinamento também fica maior. Ele é medido em unidades de treinamento. Consulte a página de preços para calcular o custo do job.

O AI Platform Training não é compatível com treinamento distribuído ou treinamento com aceleradores para código de scikit-learn ou XGBoost. Se o job de treinamento executar código de scikit-learn ou XGBoost, será necessário definir o nível de escalonamento como BASIC ou CUSTOM.

Veja a seguir os identificadores de níveis de escalonamento:

Nível de escalonamento do AI Platform Training
BASIC

Uma única instância de worker. Esse nível é adequado para aprender como usar o AI Platform Training e para testar novos modelos usando pequenos conjuntos de dados.

Nome da máquina do Compute Engine: n1-standard-4

STANDARD_1

Uma instância mestre mais quatro workers e três servidores de parâmetros. Use este nível de escalonamento somente se você estiver treinando com o TensorFlow ou usando contêineres personalizados.

Nome da máquina do Compute Engine, mestre: n1-highcpu-8, workers: n1-highcpu-8, servidores de parâmetros: n1-standard-4

PREMIUM_1

Uma instância mestre mais 19 workers e 11 servidores de parâmetros. Use este nível de escalonamento somente se você estiver treinando com o TensorFlow ou usando contêineres personalizados.

Nome da máquina do Compute Engine, mestre: n1-highcpu-16, workers: n1-highcpu-16, servidores de parâmetros: n1-highmem-8

BASIC_GPU

Uma instância única de worker com uma GPU NVIDIA Tesla K80. Para saber mais sobre as unidades de processamento gráfico (GPUs, na sigla em inglês), consulte a seção sobre o treinamento com GPUs. Use este nível de escalonamento somente se você estiver treinando com o TensorFlow ou usando contêineres personalizados.

Nome da máquina do Compute Engine: n1-standard-8 com uma GPU k80

BASIC_TPU

Uma VM mestre e uma Cloud TPU com oito núcleos da TPU v2. Consulte como usar TPUs para o job de treinamento. Use este nível de escalonamento somente se você estiver treinando com o TensorFlow ou usando contêineres personalizados.

Nome da máquina do Compute Engine, mestre: n1-standard-4, workers: Cloud TPU (8 núcleos de TPU v2)

CUSTOM

CUSTOM não é um nível definido. Na verdade, ele permite que você use sua própria especificação de cluster. Ao usar esse nível, defina valores para configurar o cluster de processamento de acordo com estas diretrizes:

  • Defina TrainingInput.masterType para especificar o tipo de máquina a ser usado para seu nó mestre. Essa é a única configuração obrigatória. Veja abaixo descrições sobre os tipos de máquinas.
  • Defina TrainingInput.workerCount para especificar o número de workers a serem usados. Se você especificar um ou mais workers, também defina TrainingInput.workerType para determinar o tipo de máquina a ser usado nos nós de trabalho. Especifique os workers somente se você estiver treinando com o TensorFlow ou usando contêineres personalizados.
  • Defina TrainingInput.parameterServerCount para especificar o número de servidores de parâmetros a serem usados. Se você especificar um ou mais servidores de parâmetros, também defina TrainingInput.parameterServerType para determinar o tipo de máquina que eles usarão. Especifique os servidores de parâmetros somente se você estiver treinando com o TensorFlow ou usando contêineres personalizados.
  • É possível definir TrainingInput.evaluatorCount para especificar o número de avaliadores a serem usados. Se você especificar um ou mais avaliadores, também precisará definir TrainingInput.evaluatorType para especificar o tipo de máquina que será usado para os avaliadores. Só especifique avaliadores se estiver treinando com o TensorFlow ou usando contêineres personalizados.

Tipos de máquinas do nível de escala personalizado

Use um nível de escala personalizada para um controle mais preciso sobre o cluster de processamento que você usa para treinar seu modelo. Na configuração do job, especifique a configuração no objeto TrainingInput. Se você estiver usando o comando gcloud ai-platform jobs submit training para enviar o job de treinamento, será possível utilizar os mesmos identificadores.

  • Defina o nível de escalonamento (scaleTier) como CUSTOM.

  • Defina valores para o número de workers (workerCount), servidores de parâmetros (parameterServerCount) e avaliadores (evaluatorCount) de que você precisa.

    O AI Platform Training é compatível com treinamento distribuído somente quando você treina com o TensorFlow ou usa um contêiner personalizado. Se seu job de treinamento executar o código scikit-learn ou XGBoost, não especifique workers, servidores de parâmetros ou avaliadores.

  • Defina o tipo de máquina para o worker mestre (masterType). Se você optou por usar workers, servidores de parâmetros ou avaliadores, defina tipos de máquina para eles nos campos workerType, parameterServerType e evaluatorType, respectivamente.

    É possível especificar tipos de máquina diferentes para masterType, workerType, parameterServerType e evaluatorType, mas não para instâncias individuais. Por exemplo, é possível usar um tipo de máquina n1-highmem-8 para seus servidores de parâmetros, mas não é possível definir alguns servidores para usar n1-highmem-8 e outros para usar n1-highcpu-16.

  • Se você precisar de apenas um worker com uma configuração personalizada e não de um cluster completo, especifique um nível de escalonamento personalizado com um tipo de máquina somente para o mestre. Assim, você terá apenas um worker. Este é um exemplo do arquivo config.yaml:

    trainingInput:
      scaleTier: CUSTOM
      masterType: n1-highcpu-16
    

tipos de máquina do Compute Engine

É possível usar os nomes de determinados tipos de máquina predefinidos do Compute Engine para os masterType, workerType, parameterServerType e evaluatorType do job. Se você estiver treinando com o TensorFlow ou usando contêineres personalizados, poderá usar vários tipos de GPUs com esses tipos de máquina.

A lista a seguir contém os identificadores de tipo de máquina do Compute Engine que são possíveis usar para seu job de treinamento:

  • e2-standard-4
  • e2-standard-8
  • e2-standard-16
  • e2-standard-32
  • e2-highmem-2
  • e2-highmem-4
  • e2-highmem-8
  • e2-highmem-16
  • e2-highcpu-16
  • e2-highcpu-32
  • n2-standard-4
  • n2-standard-8
  • n2-standard-16
  • n2-standard-32
  • n2-standard-48
  • n2-standard-64
  • n2-standard-80
  • n2-highmem-2
  • n2-highmem-4
  • n2-highmem-8
  • n2-highmem-16
  • n2-highmem-32
  • n2-highmem-48
  • n2-highmem-64
  • n2-highmem-80
  • n2-highcpu-16
  • n2-highcpu-32
  • n2-highcpu-48
  • n2-highcpu-64
  • n2-highcpu-80
  • n1-standard-4
  • n1-standard-8
  • n1-standard-16
  • n1-standard-32
  • n1-standard-64
  • n1-standard-96
  • n1-highmem-2
  • n1-highmem-4
  • n1-highmem-8
  • n1-highmem-16
  • n1-highmem-32
  • n1-highmem-64
  • n1-highmem-96
  • n1-highcpu-16
  • n1-highcpu-32
  • n1-highcpu-64
  • n1-highcpu-96
  • c2-standard-4
  • c2-standard-8
  • c2-standard-16
  • c2-standard-30
  • c2-standard-60
  • m1-ultramem-40
  • m1-ultramem-80
  • m1-ultramem-160
  • m1-megamem-96
  • a2-highgpu-1g* (prévia)
  • a2-highgpu-2g* (prévia)
  • a2-highgpu-4g* (prévia)
  • a2-highgpu-8g* (prévia)
  • a2-megagpu-16g* (prévia)

Para saber mais sobre as especificações técnicas de cada tipo de máquina, leia a documentação do Compute Engine sobre tipos de máquinas.

Tipos de máquina legados

Em vez de usar tipos de máquina do Compute Engine para seu job, especifique nomes de tipo de máquinas legadas. Esses tipos de máquina fornecem os mesmos recursos de memória e vCPU que os tipos de máquina equivalentes do Compute Engine, mas eles têm outras limitações de configuração:

  • Não é possível personalizar o uso da GPU por meio de um acceleratorConfig. No entanto, alguns tipos de máquinas legadas incluem GPUs. Veja a tabela a seguir:

  • Se a configuração do job de treinamento usar várias máquinas, não será possível misturar tipos de máquinas do Compute Engine com máquinas legadas. Todos os workers mestre, workers, servidores de parâmetros e avaliadores precisam usar tipos de máquinas de um grupo ou de outro.

    Por exemplo, se você configurar masterType para ser n1-highcpu-32 (um tipo de máquina do Compute Engine), não será possível definir workerType como complex_model_m (um tipo de máquina legado), mas será possível defini-lo como n1-highcpu-16 (outro tipo de máquina do Compute Engine).

Na tabela a seguir, descrevemos os tipos de máquinas legados:

Tipos de máquina legados
standard

Configuração básica de máquina, adequada para treinar modelos simples com conjuntos de dados pequenos a moderados.

Nome da máquina do Compute Engine: n1-standard-4

large_model

Uma máquina com muita memória, adequada especialmente para servidores de parâmetros quando o modelo é grande. Ela tem muitas camadas ocultas ou com muitos nós.

Nome da máquina do Compute Engine: n1-highmem-8

complex_model_s

Uma máquina adequada para a instância mestre e trabalhos do cluster quando o modelo requer mais computação do que a máquina padrão consegue processar satisfatoriamente.

Nome da máquina do Compute Engine: n1-highcpu-8

complex_model_m

Uma máquina com aproximadamente o dobro do número de núcleos e da memória do "complex_model_s".

Nome da máquina do Compute Engine: n1-highcpu-16

complex_model_l

Uma máquina com aproximadamente o dobro do número de núcleos e da memória de "complex_model_m".

Nome da máquina do Compute Engine: n1-highcpu-32

standard_gpu

Uma máquina equivalente à "standard" que também inclui uma GPU NVIDIA Tesla K80. Use esse tipo de máquina somente se você estiver treinando com o TensorFlow ou usando contêineres personalizados.

Nome da máquina do Compute Engine: n1-standard-8 com uma GPU k80

complex_model_m_gpu

Uma máquina equivalente ao tipo complex_model_m que também inclui quatro GPUs NVIDIA Tesla K80. Use este tipo de máquina somente se você estiver treinando com o TensorFlow ou usando contêineres personalizados.

Nome da máquina do Compute Engine: n1-standard-16-k80x4

complex_model_l_gpu

Uma máquina equivalente ao tipo complex_model_l que também inclui oito GPUs NVIDIA Tesla K80. Use este tipo de máquina somente se você estiver treinando com o TensorFlow ou usando contêineres personalizados.

Nome da máquina do Compute Engine: n1-standard-32-k80x8

standard_p100

Uma máquina equivalente à "standard" que também inclui uma GPU NVIDIA Tesla P100. Use esse tipo de máquina somente se você estiver treinando com o TensorFlow ou usando contêineres personalizados.

Nome da máquina do Compute Engine: n1-standard-8-p100x1

complex_model_m_p100

Uma máquina equivalente ao tipo complex_model_m que também inclui quatro GPUs NVIDIA Tesla P100. Use este tipo de máquina somente se você estiver treinando com o TensorFlow ou usando contêineres personalizados.

Nome da máquina do Compute Engine: n1-standard-16-p100x4

standard_v100

Uma máquina equivalente a "standard" que também inclui uma única GPU NVIDIA Tesla V100. Use esse tipo de máquina somente se você estiver treinando com o TensorFlow ou usando contêineres personalizados.

Nome da máquina do Compute Engine: n1-standard-8-v100x1

large_model_v100

Uma máquina equivalente a "large_model" que também inclui uma única GPU NVIDIA Tesla V100. Use esse tipo de máquina somente se você estiver treinando com o TensorFlow ou usando contêineres personalizados.

Nome da máquina do Compute Engine: n1-highmem-8-v100x1

complex_model_m_v100

Uma máquina equivalente ao tipo complex_model_m que também inclui quatro GPUs NVIDIA Tesla V100. Use este tipo de máquina somente se você estiver treinando com o TensorFlow ou usando contêineres personalizados.

Nome da máquina do Compute Engine: n1-standard-16-v100x4

complex_model_l_v100

Uma máquina equivalente ao tipo complex_model_l que também inclui oito GPUs NVIDIA Tesla V100. Use este tipo de máquina somente se você estiver treinando com o TensorFlow ou usando contêineres personalizados.

Nome da máquina do Compute Engine: n1-standard-32-v100x8

Como treinar com GPUs e TPUs

Alguns níveis de escalonamento e tipos de máquinas legadas incluem unidades de processamento gráfico (GPUs, na sigla em inglês). Também é possível anexar a opção de várias GPUs se você usa um tipo de máquina do Compute Engine. Para saber mais, leia sobre o treinamento com GPUs.

Para treinar com Unidades de Processamento de Tensor (TPUs, na sigla em inglês), use o nível de escalonamento BASIC_TPU ou o tipo de máquina cloud_tpu. O tipo de máquina cloud_tpu conta com opções especiais de configuração: é possível usá-lo com máquinas do Compute Engine ou legadas, além de poder configurá-las para usar oito núcleos de TPU v2 ou v3. Veja como usar TPUs para o job de treinamento.

A seguir