Use o AI Platform Training para executar aplicativos de treinamento do TensorFlow, scikit-learn e XGBoost na nuvem. O AI Platform Training oferece as dependências necessárias para treinar modelos de machine learning usando estes frameworks hospedados nas respectivas versões do ambiente de execução. Além disso, é possível usar contêineres personalizados para executar jobs de treinamento com outros frameworks de machine learning. Nesta página, descrevemos os principais conceitos do AI Platform Training. Se você prefere entrar diretamente no processo de treinamento, veja como iniciar um job relacionado.
Como funciona o treinamento
O AI Platform Training executa o job de treinamento nos recursos de computação na nuvem. É possível treinar um algoritmo integrado (Beta) no conjunto de dados sem gravar um aplicativo de treinamento. Se os algoritmos integrados não forem adequados ao seu caso de uso, crie um aplicativo de treinamento para ser executado no AI Platform Training.
Confira uma visão geral do processo para usar o aplicativo de treinamento:
- Crie um aplicativo em Python para treinar o modelo e o compile como se fosse executá-lo localmente no ambiente de desenvolvimento.
- Receba os dados de treinamento e verificação em uma fonte acessível pelo AI Platform Training. Geralmente, isso significa colocá-los no Cloud Storage, no Bigtable ou em outro serviço do Google Cloud Storage associado ao mesmo projeto do Google Cloud usado no AI Platform Training.
- Quando o aplicativo estiver pronto para ser executado, será preciso empacotá-lo e transferi-lo para um bucket do Cloud Storage que o projeto consiga acessar. Esse processo é automatizado quando você usa a Google Cloud CLI para executar um job de treinamento.
- O serviço de treinamento do AI Platform Training configura os recursos para seu job. Ele aloca uma ou mais máquinas virtuais, denominadas instâncias de treinamento, com base na configuração do job. Cada uma delas é configurada da maneira a seguir:
- Aplicando a imagem da máquina padrão à versão do AI Platform Training usada pelo job.
- Carregando o pacote do aplicativo e instalando-o com
pip
. - Instalando quaisquer outros pacotes que você especificar como dependências.
- O serviço de treinamento executa o aplicativo, passando por qualquer argumento de linha de comando especificado ao criar o job de treinamento.
- É possível conseguir informações sobre o job em execução destas maneiras:
- No Cloud Logging.
- Solicitando detalhes do job ou executando o streaming de registros com a ferramenta de linha de comando
gcloud
. - Fazendo solicitações de status via programação ao serviço de treinamento.
- Quando o job de treinamento é bem-sucedido ou encontra um erro irrecuperável, o AI Platform Training interrompe todos os processos de job e limpa os recursos.
Um aplicativo comum de machine learning
O serviço de treinamento do AI Platform Training foi projetado para ter o menor impacto possível sobre seu aplicativo. Isso significa que é possível se dedicar ao código do modelo.
A maioria dos aplicativos de machine learning:
- oferece um modo de receber dados de treinamento e de avaliação;
- processa instâncias de dados.
- usa dados de avaliação para testar a acurácia do modelo, ou seja, a frequência com que ele prevê o valor certo;
- para aplicativos de treinamento do TensorFlow, oferece um modo de gerar checkpoints em intervalos no processo para receber um snapshot do progresso do modelo;
- oferece um modo de exportar o modelo treinado quando o aplicativo é concluído.
Estrutura do treinamento distribuído
Se você executar um job do TensorFlow distribuído com o AI Platform Training, especifique várias máquinas (nós) em um cluster de treinamento. O serviço de treinamento aloca os recursos para os tipos de máquina que você especificar. O job em execução em um determinado nó é denominado réplica. De acordo com o modelo distribuído do TensorFlow, cada réplica no cluster de treinamento recebe um único papel ou tarefa no treinamento distribuído:
Mestre: apenas uma réplica é designada como worker mestre. Essa tarefa gerencia as outras e relata o status do job como um todo. O serviço de treinamento é executado até que o job seja bem-sucedido ou encontre um erro irrecuperável. No treinamento distribuído, o status da réplica mestre sinaliza o status geral do job.
Se você estiver executando um job de processo único, a réplica única será o mestre do job.
Workers: uma ou mais réplicas são designadas como workers. Elas fazem o trabalho conforme atribuído na configuração do job.
Servidores de parâmetros: uma ou mais réplicas são designadas como servidores de parâmetros. Elas coordenam o estado do modelo compartilhado entre os workers.
Estratégias de treinamento distribuído
Há três estratégias básicas para treinar um modelo com vários nós:
- treinamento com paralelismo de dados e atualizações síncronas
- treinamento com paralelismo de dados e atualizações assíncronas
- treinamento com paralelismo de modelo
Como é possível usar a estratégia com paralelismo de dados seja qual for a estrutura do modelo, este é um bom ponto de partida para aplicar o método de treinamento distribuído ao modelo personalizado. No treinamento com paralelismo de dados, o modelo inteiro é compartilhado com todos os worker nodes. Cada node calcula vetores de gradiente independentemente de alguma parte do conjunto de dados de treinamento, como se fosse um mini-processamento em lote. Os vetores de gradiente calculados são coletados no parameter server node e os parâmetros do modelo são atualizados com a soma total dos vetores de gradiente. Se você distribuir 10.000 lotes entre 10 worker nodes, cada um funcionará em aproximadamente 1.000 lotes.
O treinamento com paralelismo de dados pode ser feito com atualizações síncronas ou assíncronas. Nas atualizações assíncronas, o servidor de parâmetros aplica cada vetor de gradiente de maneira independente, logo após recebê-lo de um dos nós de trabalho, como mostrado no diagrama a seguir.
Para saber como realizar o treinamento distribuído paralelo de dados, leia sobre o MultiWorkerMirroredStrategy
e ParameterServerStrategy
do TensorFlow.
Em seguida, aprenda como configurar o treinamento distribuído no AI Platform Training.
Para saber mais sobre o treinamento com paralelismo de modelo, leia sobre o Mesh TensorFlow (em inglês).
Como empacotar o aplicativo
Antes de executar seu aplicativo de treinamento no AI Platform Training, inclua o aplicativo e as dependências dele em um pacote. Em seguida, faça upload desse pacote para um bucket do Cloud Storage acessível ao seu projeto do Google Cloud.
A Google Cloud CLI automatiza grande parte do processo. Mais especificamente,
é possível usar
gcloud ai-platform jobs submit training
para fazer upload do pacote do aplicativo e enviar o job de treinamento.
Para instruções detalhadas, consulte como empacotar um aplicativo de treinamento.
Como enviar o job de treinamento
O AI Platform Training oferece treinamento de modelo como um serviço assíncrono em lote.
Para enviar um job de treinamento, execute gcloud ai-platform jobs submit training
pela linha de comando ou envie uma solicitação à API em projects.jobs.create.
Consulte as instruções detalhadas sobre como iniciar um job de treinamento.
Código do job
Você precisa dar ao job de treinamento um nome que siga estas regras:
- Ele precisa ser exclusivo no projeto do Google Cloud.
- Ele pode conter apenas letras maiúsculas e minúsculas misturadas, dígitos e sublinhados.
- Começar com uma letra.
- Não ter mais de 128 caracteres.
Use a convenção de nomenclatura de job que quiser. Se você não executar muitos jobs, o nome escolhido poderá não ser muito importante. Caso execute muitos, talvez seja necessário encontrar o ID do job em listas grandes. É recomendável facilitar a distinção entre um ID de job e outro.
Uma técnica comum é definir um nome de base para todos os jobs associados a um determinado modelo e, em seguida, anexar uma string de data/hora. Essa convenção facilita a classificação das listas de jobs por nome, já que todos os jobs de um modelo são agrupados em ordem crescente.
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.
Para especificar um nível de escalonamento, é necessário adicioná-lo ao objeto TrainingInput na configuração do job. Se você estiver usando o comando gcloud
para enviar o job de treinamento, será possível utilizar os mesmos identificadores.
Consulte as definições detalhadas dos níveis de escalonamento e tipos de máquinas.
Ajuste de hiperparâmetros
Se você quiser usar o ajuste de hiperparâmetros, inclua detalhes de configuração ao criar o job de treinamento. Consulte um guia com conceitos sobre o ajuste de hiperparâmetro e como usar esse ajuste.
Regiões e zonas
O Google Cloud usa regiões subdivididas em zonas para definir a localização geográfica dos recursos físicos de computação. Ao executar um job de treinamento no AI Platform Training, você especifica a região onde quer executá-lo.
Ao armazenar o conjunto de dados de treinamento no Cloud Storage, você precisará executar o job de treinamento na mesma região do bucket do Cloud Storage que está sendo usado para os dados de treinamento. Se for preciso executar o job em uma região diferente do bucket de dados, ele poderá levar mais tempo.
Para ver as regiões disponíveis aos serviços do AI Platform Training, incluindo treinamento de modelo e previsão on-line/em lote, leia o guia de regiões.
Como usar job-dir como um diretório de saída comum
Para especificar o diretório de saída do job, defina um diretório de job ao configurá-lo. Quando você envia o job, o AI Platform Training faz o seguinte:
- Valida o diretório para que você corrija qualquer problema antes da execução do job.
- Passa o caminho para seu aplicativo como um argumento de linha de comando chamado
--job-dir
.
É preciso considerar o argumento --job-dir
no aplicativo.
Capture o valor do argumento ao analisar os outros parâmetros e use-o ao salvar a saída do aplicativo. Consulte o guia para iniciar um job de treinamento.
Versão do ambiente de execução
Para treinamento com um dos frameworks de machine learning hospedados pelo AI Platform Training, especifique uma versão do ambiente de execução compatível com o AI Platform Training para usar no job de treinamento. Ela dita as versões do TensorFlow, do scikit-learn, do XGBoost e de outros pacotes do Python que são instaladas nas instâncias de treinamento alocadas. Especifique uma versão que ofereça a funcionalidade de que você precisa. Se você executar o job de treinamento localmente e na nuvem, verifique se os jobs em ambos usam a mesma versão do ambiente de execução.
Dados de entrada
Os dados que podem ser usados no seu job de treinamento precisam seguir as regras abaixo para execução no AI Platform Training:
- Estar em um formato que você possa ler e alimentar no código de treinamento.
- Estar em um local que o código possa acessar. Normalmente, isso significa que precisam ser armazenados usando um dos serviços de Big Data ou de armazenamento do Google Cloud.
Dados de saída
É comum que os aplicativos gerem dados, como checkpoints, durante o treinamento e um modelo salvo quando o treinamento é concluído. É possível gerar outros dados conforme a necessidade do aplicativo. É mais fácil salvar os arquivos de saída em um bucket do Cloud Storage no mesmo projeto do Google Cloud que o job de treinamento.
Como criar jobs de treinamento resilientes a reinicializações da VM
As VMs do Google Cloud são reiniciadas esporadicamente. Para garantir que o job de treinamento seja resiliente a essas reinicializações, salve os checkpoints do modelo regularmente e configure o job para restaurar o checkpoint mais recente.
Geralmente, você salva checkpoints de modelo no caminho do Cloud Storage que você especifica com o argumento --job-dir
no comando gcloud ai-platform jobs submit
training
.
Para implementar a funcionalidade de pontos de verificação, use a API TensorFlow Estimator. Caso seu modelo esteja incorporado a um Estimator, não se preocupe com os eventos de reinicialização nas máquinas virtuais.
Se não for possível compactar seu modelo em um TensorFlow Estimator, crie funcionalidade para salvar e restaurar checkpoints no código de treinamento. O TensorFlow fornece os recursos a seguir no módulo tf.train (em inglês):
Treinamento com GPUs
É possível executar os jobs de treinamento no AI Platform Training com unidades de processamento gráfico (GPUs, na sigla em inglês). Elas são projetadas para executar operações matemáticas intensivas em alta velocidade. Elas podem ser mais eficientes na execução de certas operações com dados do Tensor do que adicionar outra máquina com um ou mais núcleos de CPU.
O serviço de treinamento do AI Platform Training não conta com nenhuma interface especial para trabalhar com GPUs. Especifique máquinas com recurso de GPU para executar o job, e o serviço as aloca para você. Por exemplo, em um job de treinamento do TensorFlow, é possível atribuir operações do TensorFlow para GPUs no código. Quando você especifica um tipo de máquina com acesso de GPU para um tipo de tarefa, cada instância atribuída a essa tarefa é configurada de modo idêntico (como sempre): o serviço executa uma única réplica do código em cada máquina.
Se você estiver treinando com um framework de machine learning diferente com um contêiner personalizado, esse framework pode fornecer uma interface diferente para trabalhar com GPUs.
Alguns modelos não são beneficiados com a execução em GPUs. Recomendamos GPUs para modelos grandes e complexos com muitas operações matemáticas. Mesmo assim, é aconselhável testar o benefício da compatibilidade com GPUs. Basta executar uma pequena amostra dos dados por meio de treinamento.
Veja como usar GPUs no job de treinamento.
Como treinar com TPUs
É possível executar os jobs de treinamento no AI Platform Training com a Cloud TPU.
Consulte como usar TPUs para o job de treinamento.