O AI Platform Training oferece treinamento de modelo como um serviço assíncrono em lote.
Nesta página, descrevemos como configurar e enviar um job de treinamento executando
gcloud ai-platform jobs submit training
a partir da linha de comando ou enviando uma solicitação para a API em
projects.jobs.create.
Antes de começar
Antes de enviar um job de treinamento, é necessário empacotar o aplicativo, bem como fazer upload dele e de qualquer dependência incomum para um bucket do Cloud Storage. Observação: se você usar o Google Cloud CLI para enviar o job, poderá empacotar o aplicativo e enviá-lo na mesma etapa.
Como configurar o job
Para transferir os parâmetros ao serviço de treinamento, é preciso definir os membros do
recurso Job
, que inclui os itens no
recurso TrainingInput
.
Se você usa Google Cloud CLI para enviar seus jobs de treinamento:
- Especifique os parâmetros de treinamento mais comuns como sinalizadores do
comando
gcloud ai-platform jobs submit training
. - Transmita os parâmetros restantes em um arquivo de configuração YAML, denominado
config.yaml
por convenção. O arquivo de configuração espelha a estrutura da representação JSON do recursoJob
. O caminho do arquivo de configuração é transmitido na sinalização--config
do comandogcloud ai-platform jobs submit training
. Se o caminho para o arquivo de configuração forconfig.yaml
, defina--config=config.yaml
.
Como coletar os dados de configuração do job
As propriedades a seguir são usadas para definir o job.
- Nome do job (
jobId
) - : o nome que será usado para o job. Use apenas letras maiúsculas e minúsculas, números e sublinhados, começando com uma letra.
- Configuração do cluster (
scaleTier
) - Um nível de escalonamento
que especifica o tipo de cluster de processamento para executar o job. Se o nível de escalonamento for
CUSTOM
, especifique explicitamente o número e o tipo de máquinas a serem usadas. - Configuração do disco (
diskConfig
) - Configuração do disco de inicialização para cada VM de treinamento. Esse campo é opcional.
Por padrão, cada VM é executada com um disco de inicialização
pd-ssd
de 100 GB. A especificação desse campo pode gerar cobranças de disco adicionais. - Pacote do aplicativo de treinamento (
packageUris
) - Um aplicativo de treinamento empacotado, organizado em um local do Cloud Storage. Caso esteja usando o Google Cloud CLI, a etapa de empacotamento do aplicativo será amplamente automatizada. Confira os detalhes no guia sobre como empacotar o aplicativo.
- Nome do módulo (
pythonModule
) - O nome do módulo principal em seu pacote. O módulo principal é o arquivo Python chamado para iniciar o aplicativo. Se você usar o
gcloud
para enviar o job, especifique o nome do módulo principal na sinalização--module-name
. Consulte o guia sobre como empacotar o aplicativo. - Região (
region
) - A região do Compute Engine em que o job será executado. Execute o job de treinamento na mesma região do bucket do Cloud Storage que armazena os dados de treinamento. Veja as regiões disponíveis para os serviços do AI Platform Training.
- Diretório do job (
jobDir
) - O caminho para um local do Cloud Storage a ser usado para saída do job.
A maioria dos aplicativos de treinamento salva checkpoints durante o treinamento e salva o modelo treinado em um arquivo no final do job. Você precisa de um
local do Cloud Storage para salvá-los. Seu projeto do Google Cloud
precisa ter acesso de gravação a esse bucket. O
serviço de treinamento transmite automaticamente o caminho que você definiu para o diretório
do job ao seu aplicativo de treinamento como um argumento da linha de comandos chamado
job_dir
. Você pode analisá-lo junto com os outros argumentos do seu aplicativo e usá-lo no seu código. A vantagem de usar o diretório do job é que o serviço de treinamento valida o diretório antes de iniciar seu aplicativo. - Versão do ambiente de execução (
runtimeVersion
) - A versão do ambiente de execução do AI Platform Training que será usada no job.
- Versão do Python (
pythonVersion
) - A versão do Python a ser usada para o job. O Python 3.5 está disponível nas versões 1.13 a 1.14 do ambiente de execução. Já o Python 3.7 está disponível nas versões 1.15 e posteriores.
- Tempo máximo de espera (
scheduling.maxWaitTime
) - Uma duração máxima de espera em segundos com o sufixo
s
(por exemplo,3600s
) determina por quanto tempo você permite que seu job permaneça nos estadosQUEUED
ePREPARING
. O AI Platform Training nem sempre inicia o job imediatamente devido a restrições de recursos. Especifique este campo se não quiser esperar mais do que uma determinada duração para o job ser executado. A duração limitada começa quando você cria o job. Se o job ainda não tiver inserido o estadoRUNNING
até o final deste período, o AI Platform Training cancelará o job. Esse campo é opcional e não tem um limite como padrão. Se você especificar esse campo, será necessário definir o valor como pelo menos1800s
(30 minutos). - Tempo máximo de execução (
scheduling.maxRunningTime
) - Uma duração máxima de execução em segundos com o sufixo
s
(por exemplo,7200s
) para seu job de treinamento. A duração limitada começa quando o job entra no estadoRUNNING
. Se o job continuar em execução após esse período, ele será cancelado pelo AI Platform Training. Este campo é opcional, e o padrão é sete dias (604800s
). - Conta de serviço (
serviceAccount
) - O endereço de e-mail de uma conta de serviço para o AI Platform Training usar quando executar seu aplicativo de treinamento. Isso pode fornecer ao aplicativo de treinamento acesso aos recursos do Google Cloud sem conceder acesso direto ao agente de serviço do AI Platform do projeto. Este campo é opcional. Saiba mais sobre os requisitos para contas de serviço personalizadas.
Como formatar os parâmetros de configuração
A maneira como você especificará os detalhes de configuração depende de como você inicia o job de treinamento:
gcloud
Forneça os detalhes de configuração do job para o
comando gcloud ai-platform jobs submit training
.
Existem duas maneiras de fazer isso:
- com sinalizações da linha de comando
- Em um arquivo YAML que representa o recurso
Job
. Nomeie esse arquivo como quiser. Por convenção, o nome éconfig.yaml
.
Mesmo se você usar um arquivo YAML, alguns detalhes precisam ser fornecidos como sinalizações de linha de comando. Por exemplo, é necessário fornecer o sinalizador --module-name
e pelo menos um sinal de --package-path
ou --packages
. Caso use o --package-path
, também deverá incluir --job-dir
ou --staging-bucket
.
Além disso, forneça a sinalização --region
ou defina uma região padrão para seu cliente gcloud
.
Essas opções (e qualquer outra que você fornecer como sinalização de linha de comando) substituirão os valores das opções no arquivo de configuração.
Exemplo 1: neste exemplo, você pode escolher um cluster de máquina pré-configurado e fornecer todos os detalhes necessários como sinalizações de linha de comando ao enviar o job. Não é necessário usar qualquer arquivo de configuração. Consulte o guia sobre como enviar o job na próxima seção.
Exemplo 2: o exemplo a seguir mostra o conteúdo do arquivo de configuração para um job com um cluster de processamento personalizado. Esse arquivo inclui alguns, mas não todos os detalhes de configuração, supondo que você fornecerá os demais detalhes necessários (como sinalizações de linha de comando) ao enviar o job.
trainingInput:
scaleTier: CUSTOM
masterType: complex_model_m
workerType: complex_model_m
parameterServerType: large_model
workerCount: 9
parameterServerCount: 3
runtimeVersion: '2.11'
pythonVersion: '3.7'
scheduling:
maxWaitTime: 3600s
maxRunningTime: 7200s
No exemplo acima, é especificada a versão 3.7 do Python, que é disponibilizada quando você usa a versão 1.15 ou posterior do ambiente de execução do AI Platform Training. Nele também são configuradas máquinas virtuais de worker e de servidor de parâmetros. Configure essas máquinas somente se você realizar treinamentos distribuídos usando o TensorFlow ou contêineres personalizados. Saiba mais sobre os tipos de máquinas.
Python
Ao enviar um job de treinamento
usando a biblioteca de cliente das APIs do Google para Python, defina
sua configuração em um dicionário com a mesma estrutura do
recurso Job
. Isso assume a forma de um dicionário com duas chaves: jobId
e trainingInput
, com seus respectivos dados sendo o nome do job e um segundo dicionário com chaves para os objetos no recurso TrainingInput
.
O exemplo a seguir mostra como criar uma representação Job para um job com cluster de processamento personalizado.
training_inputs = {
'scaleTier': 'CUSTOM',
'masterType': 'complex_model_m',
'workerType': 'complex_model_m',
'parameterServerType': 'large_model',
'workerCount': 9,
'parameterServerCount': 3,
'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',
'scheduling': {'maxWaitTime': '3600s', 'maxRunningTime': '7200s'},
}
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 devem ser nomeadas exatamente como mostradas, para corresponder aos nomes nos recursos Job
e TrainingInput
.
No exemplo acima, é especificada a versão 3.7 do Python, que é disponibilizada quando você usa a versão 1.15 ou posterior do ambiente de execução do AI Platform Training. Nele também são configuradas máquinas virtuais de worker e de servidor de parâmetros. Configure essas máquinas somente se você realizar treinamentos distribuídos usando o TensorFlow ou contêineres personalizados. Saiba mais sobre os tipos de máquinas.
Como enviar o job
Ao enviar um job de treinamento, especifique dois conjuntos de sinalizações:
- Parâmetros de configuração do job: o AI Platform Training precisa desses valores para configurar recursos na nuvem e implantar o aplicativo em cada nó no cluster de processamento.
- Argumentos do usuário ou parâmetros do aplicativo: O AI Platform Training transmite o valor dessas sinalizações para o aplicativo.
Crie o job:
gcloud
Envie um job de treinamento usando o
comando gcloud ai-platform jobs submit training
.
Primeiramente, defina algumas variáveis de ambiente contendo os detalhes da configuração. Para criar o nome do job, o código a seguir acrescenta a data e a hora ao nome do modelo:
PACKAGE_PATH="/path/to/your/application/sources"
now=$(date +"%Y%m%d_%H%M%S")
JOB_NAME="your_name_$now"
MODULE_NAME="trainer.task"
JOB_DIR="gs://your/chosen/job/output/path"
REGION="us-east1"
RUNTIME_VERSION="2.11"
O envio de job a seguir corresponde à configuração do exemplo 1 acima, em que você escolhe um nível de escalonamento pré-configurado (basic
) e decide fornecer todos os detalhes de configuração por meio de sinalizações de linha de comando. Não é necessário um arquivo config.yaml
:
gcloud ai-platform jobs submit training $JOB_NAME \
--scale-tier basic \
--package-path $PACKAGE_PATH \
--module-name $MODULE_NAME \
--job-dir $JOB_DIR \
--region $REGION \
-- \
--user_first_arg=first_arg_value \
--user_second_arg=second_arg_value
O exemplo de envio de job a seguir corresponde ao arquivo de configuração do exemplo 2 acima, em que apenas algumas configurações estão no arquivo e você fornece os demais detalhes por meio de sinalizações de linha de comando:
gcloud ai-platform jobs submit training $JOB_NAME \
--package-path $PACKAGE_PATH \
--module-name $MODULE_NAME \
--job-dir $JOB_DIR \
--region $REGION \
--config config.yaml \
-- \
--user_first_arg=first_arg_value \
--user_second_arg=second_arg_value
Observações:
- Caso especifique uma opção no arquivo de configuração (
config.yaml
) e como uma sinalização de linha de comando, o valor na linha de comando modificará o valor no arquivo de configuração. - A sinalização
--
vazia marca o fim das sinalizações específicas dogcloud
e o início doUSER_ARGS
que você quer passar para seu aplicativo. - Sinalizações específicas do AI Platform Training, como
--module-name
,--runtime-version
e--job-dir
, precisam ser inseridas antes da sinalização--
vazia. O serviço do AI Platform Training interpreta essas sinalizações. - É necessário que a sinalização
--job-dir
, se especificada, venha antes da sinalização vazia--
porque o AI Platform Training usa--job-dir
para validar o caminho. - Seu aplicativo também precisa manipular a sinalização
--job-dir
, se especificada. Mesmo que a sinalização venha antes do--
vazio,--job-dir
também será passado ao seu aplicativo como uma sinalização de linha de comando. - Defina quantos
USER_ARGS
forem necessários. O AI Platform Training transmite--user_first_arg
,--user_second_arg
e assim por diante para o aplicativo.
Python
Use a biblioteca de cliente de APIs do Google para Python para chamar a API AI Platform Training and Prediction sem gerar solicitações HTTP manualmente. Antes de executar o seguinte exemplo de código, é necessário configurar a autenticação.
Salve o ID do projeto no formato necessário para as APIs, "projects/projectname":
project_name = 'my_project_name' project_id = 'projects/{}'.format(project_name)
Consiga uma representação em Python dos serviços do AI Platform Training:
cloudml = discovery.build('ml', 'v1')
Crie e envie a solicitação: Observe que
job_spec
foi criado na etapa anterior em que você formatou os parâmetros de configuraçãorequest = cloudml.projects().jobs().create(body=job_spec, parent=project_id) response = request.execute()
Identifique os erros HTTP. A maneira mais simples é colocar o comando anterior em um bloco de
try
:try: response = request.execute() # You can put your code for handling success (if any) here. except errors.HttpError, err: # Do whatever error response is appropriate for your application. # For this example, just send some text to the logs. # You need to import logging for this to work. logging.error('There was an error creating the training job.' ' Check the details:') logging.error(err._get_reason())
A seguir
- Monitore ou visualize o job de treinamento durante a execução.
- Saiba mais sobre como especificar tipos de máquinas.
- Saiba como configurar um job de ajuste de hiperparâmetro.
- Prepare-se para implantar o modelo treinado para previsão.