Requisitos do código de treinamento

Realize o treinamento personalizado na Vertex AI para executar um código de treinamento de machine learning (ML) na nuvem, em vez de usar o AutoML. Este documento descreve os requisitos a serem considerados ao escrever o código de treinamento.

Escolher uma estrutura de código de treinamento

Primeiro, determine a estrutura que você quer que o código de treinamento de ML use. É possível fornecer o código de treinamento para a Vertex AI de uma das seguintes formas:

  • Um aplicativo de treinamento em Python para usar com um contêiner pré-criado. Crie uma distribuição de origem do Python (em inglês) com o código que treina um modelo de ML e o exporte para o Cloud Storage. Este aplicativo de treinamento pode usar qualquer uma das dependências incluídas no contêiner pré-criado que você pretende usar.

    Use essa opção se um dos contêineres pré-criados da Vertex AI para treinamento incluir todas as dependências necessárias para o treinamento. Por exemplo, para treinar com PyTorch, scikit-learn, TensorFlow ou XGBoost, essa é a melhor opção.

    Para saber mais sobre os requisitos específicos dessa opção, leia o guia sobre como criar um aplicativo de treinamento em Python.

  • Uma imagem de contêiner personalizada. Crie uma imagem de contêiner do Docker com um código que treine um modelo de ML e exporte-o para o Cloud Storage. Inclua as dependências necessárias para o código na imagem do contêiner.

    Use essa opção para usar dependências não incluídas em um dos contêineres pré-criados da Vertex AI para treinamento. Por exemplo, se você quiser treinar usando um framework de ML em Python que não esteja disponível em um contêiner pré-criado ou se quiser treinar usando uma linguagem de programação diferente do Python, isso será a melhor opção.

    Para saber mais sobre os requisitos específicos dessa opção, leia o guia sobre como criar uma imagem de contêiner personalizada.

No restante deste documento, descrevemos os requisitos relevantes para as duas estruturas de código de treinamento.

Requisitos para todos os códigos de treinamento personalizados

Ao escrever um código de treinamento personalizado para a Vertex AI, tenha em mente que o código será executado em uma ou mais instâncias de máquina virtual (VM) gerenciadas pelo Google Cloud. Nesta seção, você verá os requisitos aplicáveis a todos os códigos de treinamento personalizados.

Acessar os serviços do Google Cloud no seu código

Várias das seções a seguir descrevem como acessar outros serviços do Google Cloud pelo código. Para acessar os serviços do Google Cloud, faça o código de treinamento usar o Application Default Credentials (ADC). Muitas bibliotecas de cliente do Google Cloud autenticam com o ADC por padrão. Não é necessário configurar variáveis de ambiente. O Vertex AI configura automaticamente o ADC para se autenticar como o Agente de serviço de código personalizado do Vertex AI no projeto (por padrão) ou como uma conta de serviço personalizada (se você tiver configurado um).

.

No entanto, quando você usa uma biblioteca de cliente do Google Cloud no seu código, a Vertex AI nem sempre se conecta ao projeto correto do Google Cloud por padrão. Se você encontrar erros de permissão, a conexão com o projeto errado pode ser o problema.

Esse problema ocorre porque a Vertex AI não executa o código diretamente no projeto do Google Cloud. Ela executa o código em um dos vários projetos separados gerenciados pelo Google. A Vertex AI usa esses projetos exclusivamente para operações relacionadas ao seu projeto. Portanto, não tente inferir um ID do projeto do ambiente no código de treinamento ou previsão. especificar IDs de projetos explicitamente.

Se você não quiser fixar um ID do projeto no código de treinamento, consulte a variável de ambiente CLOUD_ML_PROJECT_ID: o Vertex AI define essa variável de ambiente em cada contêiner de treinamento personalizado para conter o número do projeto em que você iniciou o treinamento personalizado. Muitas ferramentas do Google Cloud aceitam um número de projeto sempre que recebem um ID do projeto.

Por exemplo, se você quiser acessar uma tabela do BigQuery no mesmo projeto usando o cliente Python para o Google BigQuery, não tente inferir o projeto no código de treinamento:

Seleção de projeto implícita

from google.cloud import bigquery

client = bigquery.Client()

Em vez disso, use um código que selecione explicitamente um projeto:

Seleção explícita do projeto

import os

from google.cloud import bigquery

project_number = os.environ["CLOUD_ML_PROJECT_ID"]

client = bigquery.Client(project=project_number)

Se você encontrar erros de permissão depois de configurar o código dessa maneira, leia a seguinte seção sobre quais recursos seu código pode acessar para ajustar as permissões disponíveis para seu código de treinamento.

Quais recursos seu código pode acessar

Por padrão, o código de treinamento tem acesso aos recursos disponíveis para o agente de serviço de código personalizado da AI da Vertex do projeto. Também é possível configurar o Vertex AI para que o código de treinamento possa acessar mais ou menos recursos.

Por exemplo, considere o acesso do seu código de treinamento aos recursos do Cloud Storage:

Por padrão, a Vertex AI pode acessar qualquer bucket do Cloud Storage no projeto do Google Cloud em que você está fazendo o treinamento personalizado. Também é possível conceder à Vertex AI acesso aos buckets do Cloud Storage em outros projetos ou personalizar com precisão quais buckets um job específico pode acessar usando uma conta de serviço personalizada.

Regras e técnicas de acesso semelhantes se aplicam a tabelas do BigQuery e a outros recursos do Google Cloud. Em geral, é possível alterar os recursos disponíveis para o código de treinamento de uma das seguintes maneiras:

Ler e gravar arquivos do Cloud Storage com o Cloud Storage FUSE

Em todos os jobs de treinamento personalizados, o Vertex AI monta os buckets do Cloud Storage aos quais você tem acesso no diretório /gcs/ do sistema de arquivos de cada nó de treinamento. Como alternativa conveniente ao uso do cliente Python para armazenamento em nuvem ou de outra biblioteca para acessar o Cloud Storage, é possível ler e gravar diretamente no sistema de arquivos local para ler dados do Cloud Storage ou gravar dados. para o Cloud Storage. Por exemplo, para carregar dados de gs://BUCKET/data.csv, use o seguinte código Python:

file = open('/gcs/BUCKET/data.csv', 'r')

O Vertex AI usa o Cloud Storage FUSE para montar os intervalos de armazenamento. Observe que diretórios ativados pelo Cloud Storage FUSE não são compatíveis com POSIX.

As credenciais que você está usando para o treinamento personalizado determinam quais intervalos podem ser acessados dessa maneira. A seção anterior sobre quais recursos seu código pode acessar descreve exatamente quais buckets podem ser acessados por padrão e como personalizar esse acesso.

Carregar dados de entrada

O código de ML geralmente opera em dados de treinamento para treinar um modelo. Não armazene dados de treinamento junto com seu código, independentemente de você criar um aplicativo de treinamento em Python ou uma imagem de contêiner personalizada. Armazenar dados com código pode levar a um projeto mal organizado, dificultar a reutilização do código em diferentes conjuntos de dados e causar erros em grandes conjuntos de dados.

Recomendamos que você escreva o código para carregar dados de uma fonte fora do Vertex AI, como o BigQuery ou o Cloud Storage. Como alternativa, é possível usar um conjunto de dados gerenciados do Vertex AI, mas não recomendamos isso. Os conjuntos de dados gerenciados são mais adequados para modelos do AutoML.

Para ter o melhor desempenho ao carregar dados do Cloud Storage, use um bucket na região em que você está realizando o treinamento personalizado. Para saber como armazenar dados no Cloud Storage, leia Como criar buckets de armazenamento e Como fazer upload de objetos.

Para saber de quais intervalos do Cloud Storage você pode carregar dados, leia a seção anterior sobre quais recursos seu código pode acessar.

Para carregar dados do Cloud Storage no código de treinamento, use o recurso FUSE do Cloud Storage descrito na seção anterior ou use qualquer biblioteca compatível com o ADC. Não é necessário fornecer explicitamente as credenciais de autenticação no código.

Por exemplo, é possível usar uma das bibliotecas de cliente demonstradas no guia do Cloud Storage para Fazer o download de objetos. O cliente Python para Cloud Storage, em particular, está incluído em contêineres pré-criados. A classe tf.io.gfile.GFile do TensorFlow também é compatível com o ADC.

Carregar um conjunto de dados grande

Dependendo do tipo de máquina que você pretende usar durante o treinamento personalizado, as VMs podem não conseguir carregar a totalidade de um conjunto de dados grande na memória.

Se você precisar ler dados muito grandes para caber na memória, faça streaming dos dados ou leia-os incrementalmente. Diferentes frameworks de ML têm práticas recomendadas diferentes para fazer isso. Por exemplo, a classe tf.data.Dataset do TensorFlow pode fazer streaming de dados TFRecord ou de texto do Cloud Storage.

A realização de treinamento personalizado em várias VMs com paralelismo de dados é outra maneira de reduzir a quantidade de dados que cada VM carrega na memória. Consulte a seção Como escrever código para treinamento distribuído deste documento.

Exportar um modelo de ML treinado

O código de ML geralmente exporta um modelo treinado no final do treinamento, na forma de um ou mais artefatos do modelo. Use os artefatos do modelo para receber predições.

Após a conclusão do treinamento personalizado, não será mais possível acessar as VMs que executaram o código de treinamento. Portanto, seu código de treinamento precisa exportar artefatos de modelo a um local fora da Vertex AI.

Recomendamos que você exporte artefatos de modelo para um bucket do Cloud Storage. Conforme descrito na seção anterior sobre quais recursos seu código pode acessar, a Vertex AI pode acessar qualquer bucket do Cloud Storage no projeto do Google Cloud em que você esteja realizando o treinamento personalizado. Usar uma biblioteca compatível com o ADC para exportar os artefatos do modelo. Por exemplo, as APIs do TensorFlow para salvar modelos Keras podem exportar artefatos diretamente para um caminho do Cloud Storage.

Se você quiser usar um modelo treinado para exibir previsões na Vertex AI, o código precisará exportar os artefatos do modelo em um formato compatível com um dos contêineres pré-criados para previsão. Saiba mais no guia sobre como exportar artefatos de modelo para predição.

Variáveis de ambiente para diretórios especiais do Cloud Storage

Se você especificar o campo baseOutputDirectory da API, a Vertex AI define as seguintes variáveis de ambiente quando executar o código de treinamento:

Os valores dessas variáveis de ambiente diferem um pouco de acordo com o ajuste de hiperparâmetro. Para saber mais, consulte a referência da APIbaseOutputDirectory.

O uso dessas variáveis de ambiente facilita a reutilização do mesmo código de treinamento várias vezes, como dados ou opções de configuração diferentes, e salva os artefatos de modelo e pontos de verificação em diferentes locais, simplesmente alterando abaseOutputDirectory API. No entanto, não é obrigatório usar as variáveis de ambiente no seu código se você não quiser. Por exemplo, é possível fixar locais no código para salvar checkpoints e exportar artefatos de modelo.

Além disso, se você usar um TrainingPipeline para o treinamento personalizado e não especificar o campo modelToUpload.artifactUri, a Vertex AI usará o valor da variável de ambiente AIP_MODEL_DIR para o modelToUpload.artifactUri. Para o ajuste de hiperparâmetros, a Vertex AI usa o valor da variável de ambiente AIP_MODEL_DIR da melhor avaliação.

Garanta a resiliência a reinicializações

As VMs que executam seu código de treinamento são reiniciadas de vez em quando. Por exemplo, o Google Cloud pode precisar reiniciar a VM por motivos de manutenção. Quando uma VM é reiniciada, a Vertex AI começa a executar o código novamente desde o início.

Se você espera que o código de treinamento seja executado por mais de quatro horas, adicione vários comportamentos ao código para torná-lo resiliente a reinicializações:

  • Exporte com frequência o progresso de treinamento para o Cloud Storage pelo menos uma vez a cada quatro horas. Assim, você não perderá o progresso se as VMs forem reiniciadas.

  • No início do código de treinamento, verifique se o andamento do treinamento já existe no local de exportação. Nesse caso, carregue o estado de treinamento salvo em vez de começar do treinamento do zero.

Quatro horas é uma recomendação, não um limite rígido. Se a resiliência for uma prioridade, considere adicionar esses comportamentos ao código, mesmo que você não espere que ele seja executado por tanto tempo.

A maneira de realizar esses comportamentos depende do framework de ML que você usa. Por exemplo, se você usa o Keras do TensorFlow, saiba como usar o callback ModelCheckpoint para esse fim.

Para saber mais sobre como a Vertex AI gerencia VMs, consulte Noções básicas sobre o serviço de treinamento personalizado.

Requisitos para recursos de treinamento personalizados opcionais

Se você quiser usar determinados recursos de treinamento personalizados opcionais, talvez precise fazer outras alterações no código de treinamento. Nesta seção, descrevemos os requisitos de código para ajuste de hiperparâmetros, GPUs, treinamento distribuído e o TensorBoard da Vertex AI.

Escrever código para ajuste de hiperparâmetros

A Vertex AI pode realizar o ajuste de hiperparâmetros no código de treinamento de ML. Saiba mais sobre como o ajuste de hiperparâmetros na Vertex AI funciona e como configurar um recurso HyperparameterTuningJob.

Se você quiser usar o ajuste de hiperparâmetros, o código de treinamento precisará:

  • Analise argumentos de linha de comando que representam os hiperparâmetros que você quer ajustar. Use os valores analisados para definir os hiperparâmetros para treinamento.

  • Informe intermitentemente a métrica de ajuste de hiperparâmetro à Vertex AI.

Analisar argumentos de linha de comando

Para o ajuste de hiperparâmetros, a Vertex AI executa o código de treinamento várias vezes, com diferentes argumentos de linha de comando a cada vez. O código de treinamento precisa analisar esses argumentos de linha de comando e usá-los como hiperparâmetros para treinamento. Por exemplo, para ajustar a taxa de aprendizado do otimizador, analise um argumento de linha de comando chamado --learning_rate. Saiba como configurar quais argumentos de linha de comando a Vertex AI fornece.

Recomendamos que você use a biblioteca argparse do Python para analisar argumentos de linha de comando.

Gerar relatórios sobre a métrica de ajuste de hiperparâmetro

O código de treinamento precisa informar de modo intermitente a métrica de hiperparâmetros que você está tentando otimizar para a Vertex AI. Por exemplo, se você quiser maximizar a precisão do modelo, informe essa métrica ao final de cada período de treinamento. A Vertex AI usa essas informações para decidir quais hiperparâmetros usar no próximo teste de treinamento. Saiba mais sobre como selecionar e especificar uma métrica de ajuste de hiperparâmetros.

Use a biblioteca cloudml-hypertune do Python para relatar a métrica de ajuste de hiperparâmetro. Essa biblioteca está incluída em todos os contêineres pré-criados para treinamento, e é possível usar pip para instalá-la em um contêiner personalizado.

Para saber como instalar e usar essa biblioteca, consulte o repositório cloudml-hypertune do GitHub ou consulte o codelab Vertex AI: ajuste de hiperparâmetros.

Escrever código para GPUs

Selecione VMs com unidades de processamento gráfico (GPUs, na sigla em inglês) para executar o código de treinamento personalizado. Saiba mais sobre como configurar o treinamento personalizado para usar VMs ativadas por GPU.

Se você quer treinar com GPUs, verifique se o código de treinamento pode aproveitá-las. Dependendo do framework de ML que você usar, isso poderá exigir alterações no código. Por exemplo, se você usar o Keras do TensorFlow, só precisará ajustar seu código se quiser usar mais de uma GPU. Alguns frameworks de ML não podem usar GPUs.

Além disso, verifique se o contêiner é compatível com GPUs: selecione umum contêiner pré-construído para treinamento compatível com GPUs ou instalar asKit de ferramentas CUDA CUDA eNVIDIA Cucu no seu contêiner personalizado. Uma maneira de fazer isso é usar a imagem base do repositório nvidia/cuda do Docker. Outra maneira é usar uma instância do Deep Learning Containers do como a imagem base.

Escreva código para treinamento distribuído

Para treinar em grandes conjuntos de dados, é possível executar o código em várias VMs em um cluster distribuído, gerenciado pela Vertex AI. Saiba como configurar várias VMs para treinamento.

Alguns frameworks de ML, como o TensorFlow e o PyTorch, permitem executar códigos de treinamento idênticos em várias máquinas, coordenando automaticamente como dividir o trabalho com base. sobre as variáveis de ambiente definidas em cada máquina. Descubra se a Vertex AI define variáveis de ambiente para tornar isso possível para o framework de ML desejado.

Como alternativa, você pode executar um contêiner diferente em cada um dos vários pools de workers. Um pool de workers é um grupo de VMs configuradas para usar as mesmas opções de computação e contêiner. Nesse caso, talvez você ainda queira usar as variáveis de ambiente definidas pela Vertex AI para coordenar a comunicação entre as VMs. É possível personalizar o código de treinamento de cada pool para executar as tarefas arbitrárias que você quiser: A maneira de fazer isso depende da sua meta e do framework de ML que você usa.

Rastreie e visualize experimentos de treinamento personalizados usando do TensorBoard da Vertex AI

O Vertex TensorBoard é uma versão gerenciada do TensorBoard, um projeto de código aberto do Google para visualizar experimentos de machine learning. Com o TensorBoard da Vertex AI, é possível rastrear, visualizar e comparar experimentos de ML e compartilhá-los com sua equipe.

Para usar o TensorBoard da Vertex AI com o treinamento personalizado, faça o seguinte:

  • Crie uma instância do TensorBoard da Vertex AI no projeto para armazenar seus experimentos.

  • Configure uma conta de serviço para executar o job de treinamento personalizado com as permissões apropriadas.

  • Ajuste o código de treinamento personalizado para gravar registros compatíveis com o TensorBoard no Cloud Storage.

Para um guia passo a passo sobre como começar com esses requisitos, consulte Como usar o TensorBoard da Vertex AI com treinamento personalizado.

A seguir