Criar uma imagem de contêiner personalizada para treinamento

Usar uma imagem de contêiner personalizada oferece a maior flexibilidade para treinamento na Vertex AI. Para saber a diferença entre usar uma imagem de contêiner personalizada e usar um aplicativo de treinamento em Python com um contêiner pré-criado, leia os requisitos de código de treinamento.

O guia percorre as seguintes etapas:

  1. Como criar um contêiner personalizado:
    1. Gravando um Dockerfile que configure o contêiner para trabalhar com a Vertex AI e inclua as dependências necessárias do aplicativo de treinamento.
    2. Criando e executando o contêiner do Docker no local.
  2. Enviando a imagem do contêiner para o Artifact Registry

Antes de começar

Para configurar um repositório da API Artifact Registry e configurar o Docker no seu ambiente de desenvolvimento, siga o Guia de início rápido do Artifact Registry para Docker. Especificamente, conclua as seguintes etapas do guia de início rápido:

  • Antes de começar
  • Escolha um shell
  • Crie um repositório do Docker
  • Configurar a autenticação

Criar uma imagem de contêiner personalizada

Recomendamos dois fluxos de trabalho possíveis para criar uma imagem de contêiner personalizada:

  • Escreva o código de treinamento. Em seguida, use o comando local-run da CLI gcloud para criar e testar uma imagem de contêiner personalizada com base no código de treinamento sem que você mesmo grave um Dockerfile.

    Esse fluxo de trabalho poderá ser mais direto se você não conhecer o Docker. Se você seguir esse fluxo de trabalho, ignore o restante desta seção.

  • Escreva o código de treinamento. Em seguida, grave um Dockerfile e crie uma imagem de contêiner com base nele. Por fim, teste o contêiner localmente.

    Esse fluxo de trabalho oferece mais flexibilidade, porque você pode personalizar sua imagem de contêiner o quanto quiser.

O restante desta seção apresenta um exemplo do último fluxo de trabalho.

Código de treinamento

Escreva o código de treinamento com qualquer dependência em qualquer linguagem de programação. Verifique se o código atende aos requisitos de código de treinamento. Se você planeja usar o ajuste de hiperparâmetros, a GPUs ou o treinamento distribuído, leia as seções correspondentes do documento. Essas seções descrevem considerações específicas sobre o uso dos recursos com contêineres personalizados.

Criar um DockerFile

Crie um Dockerfile que especifique todas as instruções necessárias para criar a imagem do contêiner.

Nesta seção, mostraremos como criar um exemplo genérico de um Dockerfile para usar no treinamento personalizado. Para saber mais sobre como criar uma imagem de contêiner, leia o guia de início rápido da documentação do Docker.

Para ser usado com a Vertex AI, o Dockerfile precisa incluir comandos que processem as tarefas a seguir:

  • Escolher uma imagem de base.
  • Instalar dependências extras.
  • Copiar o código de treinamento para a imagem.
  • Configurar o ponto de entrada para a Vertex AI para invocar seu código de treinamento

O Dockerfile pode incluir outras lógicas, dependendo das suas necessidades. Para mais informações sobre cada instrução específica, consulte a referência do Dockerfile.

Comando do Dockerfile Descrição Exemplos
FROM image:tag Especifica uma imagem de base e a respectiva tag.

Exemplos de imagem de base com tags:

  • pytorch/pytorch:latest
  • tensorflow/tensorflow:nightly
  • python:2.7.15-jessie
  • nvidia/cuda:9.0-cudnn7-runtime
WORKDIR /path/to/directory Especifica o diretório na imagem em que instruções posteriores são executadas. /root
RUN pip install pkg1 pkg2 pkg3 Instala outros pacotes usando pip.

Observação: se sua imagem de base não tiver pip, será preciso incluir um comando para instalá-lo antes de instalar outros pacotes.

Exemplos de pacote:

  • google-cloud-storage
  • cloudml-hypertune
  • pandas
COPY src/foo.py dest/foo.py Copia o código do aplicativo de treinamento para a imagem. Dependendo da estrutura do aplicativo, isso provavelmente inclui vários arquivos.

Exemplos de nomes de arquivos no aplicativo de treinamento:

  • model.py
  • task.py
  • data_utils.py
ENTRYPOINT ["exec", "file"] Configura o ponto de entrada para chamar o código de treinamento a ser executado. Ao iniciar o treinamento personalizado, é possível substituir esse ponto de entrada especificando o campo command em ContainerSpec. Também é possível especificar o campo args em ContainerSpec para fornecer argumentos adicionais ao ponto de entrada e substituir a instrução CMD da imagem do contêiner. se tiver. ["python", "task.py"]

A lógica no Dockerfile varia de acordo com as necessidades, mas costuma ser mais ou menos assim:

# Specifies base image and tag
FROM image:tag
WORKDIR /root

# Installs additional packages
RUN pip install pkg1 pkg2 pkg3

# Downloads training data
RUN curl https://example-url/path-to-data/data-filename --output /root/data-filename

# Copies the trainer code to the docker image.
COPY your-path-to/model.py /root/model.py
COPY your-path-to/task.py /root/task.py

# Sets up the entry point to invoke the trainer.
ENTRYPOINT ["python", "task.py"]

(Opcional) Ajuste seu Dockerfile para VMs de TPU

Se você quiser treinar na Vertex AI usando uma VM de TPU, será necessário ajustar seu Dockerfile para instalar versões criadas especificamente das bibliotecas tensorflow e libtpu. Saiba mais sobre como ajustar o contêiner para uso com uma VM de TPU.

Crie a imagem do contêiner

Crie o URI de imagem correto usando variáveis de ambiente. Em seguida, crie a imagem do Docker:

export PROJECT_ID=$(gcloud config list project --format "value(core.project)")
export REPO_NAME=REPOSITORY_NAME
export IMAGE_NAME=IMAGE_NAME
export IMAGE_TAG=IMAGE_TAG
export IMAGE_URI=us-central1-docker.pkg.dev/${PROJECT_ID}/${REPO_NAME}/${IMAGE_NAME}:${IMAGE_TAG}

docker build -f Dockerfile -t ${IMAGE_URI} ./

Nesses comandos, substitua o seguinte:

  • REPOSITORY_NAME: o nome do repositório do Artifact Registry que você criou na seção Antes de começar.
  • IMAGE_NAME: um nome de sua escolha para a imagem de contêiner.
  • IMAGE_TAG: uma tag de sua escolha para essa versão da imagem do contêiner.

Saiba mais sobre os requisitos do Artifact Registry para nomear a imagem do contêiner.

Execute o contêiner localmente (opcional)

Execute a imagem do contêiner localmente para executá-la. Talvez você queira executar seu código de treinamento em um conjunto de dados menor ou por um número menor de iterações do que pretende executar na Vertex AI. Por exemplo, se o script do ponto de entrada na imagem do contêiner aceitar uma sinalização --epochs para controlar o número de epochs em que ele é executado, execute o seguinte comando:

docker run ${IMAGE_URI} --epochs 1

Enviar o contêiner para o Artifact Registry

Se a execução local funcionar, envie o contêiner para o Artifact Registry.

Primeiro, execute gcloud auth configure-docker us-central1-docker.pkg.dev se ainda não tiver feito isso no seu ambiente de desenvolvimento. Em seguida, execute o comando:

docker push ${IMAGE_URI}

Permissões do Artifact Registry

Se você estiver usando uma imagem do Artifact Registry do mesmo projeto do Google Cloud em que está usando a Vertex AI, não será necessário configurar permissões. É possível criar um job de treinamento personalizado imediatamente que usa sua imagem do contêiner.

No entanto, se você enviou a imagem do contêiner para o Artifact Registry em um projeto do Google Cloud diferente do projeto em que você planeja usar a Vertex AI, é necessário conceder ao Agente de serviço da Vertex AI permissão ao projeto para enviar a imagem do outro projeto. Saiba mais sobre o Agente de serviço da Vertex AI e como conceder permissões a ele.

Artifact Registry

Para saber como conceder acesso ao repositório do Artifact Registry ao Agente de serviço da Vertex AI, leia a documentação do Artifact Registry sobre como conceder permissões específicas do repositório.

A seguir