Use o comando gcloud ai custom-jobs local-run
para criar uma imagem de contêiner do Docker com base no código de treinamento e executá-la como um contêiner no computador local. Esse recurso oferece vários benefícios:
É possível criar uma imagem de contêiner com conhecimento mínimo do Docker. Você não precisa escrever seu próprio Dockerfile. Depois, envie essa imagem para o Artifact Registry e use-a para o treinamento de contêineres personalizados.
Para casos de uso avançados, ainda convém gravar seu próprio Dockerfile.
A imagem do contêiner pode executar um aplicativo de treinamento em Python ou um script Bash.
É possível usar um script Bash para executar um código de treinamento escrito em outra linguagem de programação, desde que você também especifique uma imagem de contêiner base compatível com a outra linguagem.
A execução local de um contêiner executa o código de treinamento de maneira semelhante à execução no Vertex AI.
Executar o código localmente pode ajudar a depurar problemas com o código antes de executar o treinamento personalizado no Vertex AI.
Antes de começar
Se você estiver usando o Linux, configure o Docker para executá-lo sem
sudo
.O comando
local-run
requer essa configuração para usar o Docker.
Usar o comando local-run
Execute o comando a seguir para criar uma imagem de contêiner com base no código de treinamento e executar um contêiner localmente:
gcloud ai custom-jobs local-run \
--executor-image-uri=BASE_IMAGE_URI \
--local-package-path=WORKING_DIRECTORY \
--script=SCRIPT_PATH \
--output-image-uri=OUTPUT_IMAGE_NAME
Substitua:
BASE_IMAGE_URI: o URI de uma imagem do Docker a ser usada como base do contêiner. Escolha uma imagem de base que inclua as dependências necessárias do código de treinamento.
É possível usar o URI para uma imagem de container de treinamento pré-criado ou qualquer outro valor que seja válido para uma instrução
FROM
do Dockerfile, por exemplo, uma imagem do Docker disponível publicamente ou uma imagem do Docker no Artifact Registry a que você tem acesso.WORKING_DIRECTORY: o diretório de nível mais baixo no sistema de arquivos que contém todo o código de treinamento e as dependências locais que você precisa usar para o treinamento.
Por padrão, o comando copia apenas o diretório pai do arquivo especificado pela sinalização
--script
(consulte o item de lista a seguir) para a imagem do Docker resultante. A imagem do Docker não inclui necessariamente todos os arquivos em WORKING_DIRECTORY. Para personalizar quais arquivos serão incluídos, consulte a seção deste documento sobre como incluir dependências.Se você omitir a sinalização
--local-package-path
(e esse marcador), o comandolocal-run
usará o diretório de trabalho atual para esse valor.SCRIPT_PATH: o caminho, relativo a WORKING_DIRECTORY no seu sistema de arquivos local, para o script que é o ponto de entrada do seu código de treinamento. Pode ser um script Python (terminado em
.py
) ou um script Bash.Por exemplo, se você quiser executar
/hello-world/trainer/task.py
e WORKING_DIRECTORY for/hello-world
, usetrainer/task.py
para esse valor.Se você especificar um script Python, sua imagem de base precisará ter o Python instalado. Caso seja especificado um script bash, sua imagem de base precisará ter o Bash instalado. Todos os contêineres de treinamento pré-criados e muitas outras imagens do Docker disponíveis publicamente incluem essas duas dependências.
Use
--python-module
em vez de--script
Se você omitir a sinalização
--script
(e SCRIPT_PATH), use a sinalização--python-module
para especificar o nome de um módulo Python em WORKING_DIRECTORY para ser executado como o ponto de entrada para o treinamento. Por exemplo, em vez de--script=trainer/task.py
, é possível especificar--python-module=trainer.task
.Nesse caso, o contêiner do Docker resultante carrega o código como um módulo, e não como um script. Essa opção provavelmente será usada se o script de ponto de entrada importar outros módulos Python em WORKING_DIRECTORY.
OUTPUT_IMAGE_NAME: um nome para a imagem do Docker resultante criada pelo comando. É possível usar qualquer valor aceito pela sinalização
-t
dadocker build
.Se você planeja enviar posteriormente a imagem para o Artifact Registry, convém usar um nome de imagem que atenda aos requisitos do Artifact Registry. Se você planeja enviar a imagem posteriormente para o Container Registry, use um nome de imagem que atenda aos requisitos do Container Registry. Você também pode marcar a imagem com nomes adicionais posteriormente.
Se você omitir a sinalização
--output-image-uri
(e esse marcador), o comandolocal-run
marcará a imagem com um nome baseado no horário atual e no nome do arquivo de script do ponto de entrada.
O comando cria uma imagem de contêiner do Docker com base na sua configuração. Depois de criar a imagem, o comando imprime a seguinte saída:
A training image is built.
Starting to run ...
O comando usa imediatamente essa imagem de contêiner para executar um contêiner no seu computador local. Quando o contêiner sai, o comando imprime a seguinte saída:
A local run is finished successfully using custom image: OUTPUT_IMAGE_NAME
Opções adicionais
As seções a seguir descrevem opções adicionais que podem ser usadas para personalizar o
comportamento do comando local-run
.
Instalar dependências
O código de treinamento pode depender de todas as dependências instaladas na imagem de base.
Por exemplo, as imagens de contêiner de treinamento pré-criadas
incluem muitas bibliotecas Python para machine learning, bem como quaisquer arquivos
que você inclui na imagem do Docker criada pelo comando local-run
.
Quando você especifica um script com a sinalização --script
ou --python-module
,
o comando copia o diretório pai do script e os subdiretórios
para a imagem do Docker. Por exemplo, se você especificar
--local-package-path=/hello-world
e --script=trainer/task.py
, o
comando copiará /hello-world/trainer/
para a imagem do Docker.
Também é possível incluir outras dependências do Python ou arquivos arbitrários do seu sistema de arquivos concluindo as etapas extras descritas em uma das seguintes seções:
- Como usar um arquivo
requirements.txt
para dependências do Python - Como usar um arquivo
setup.py
para dependências do Python - Como especificar dependências PyPI individuais
- Como especificar dependências locais do Python
- Como incluir outros arquivos
Instalar dependências extras do Python
É possível incluir outras dependências do Python na imagem do Docker de várias maneiras:
Usar um arquivo requirements.txt
Se houver um arquivo chamado requirements.txt
no diretório de trabalho, o
comando local-run
o tratará como um arquivo de requisitos
de pip
e o usará para instalar dependências do Python na imagem do Docker.
Usar um arquivo setup.py
Se houver um arquivo chamado setup.py
no diretório de trabalho, o
comando local-run
tratará isso como um arquivo setup.py
do Python, copiará o arquivo para imagem do Docker e executará pip install
no diretório na imagem do Docker que contém esse arquivo.
É possível, por exemplo, adicionar um argumento
install_requires
a setup.py
para instalar dependências do Python na
imagem do Docker.
Especificar dependências individuais do PyPI
É possível usar a sinalização --requirements
para instalar dependências específicas do
PyPI na imagem do Docker. Exemplo:
gcloud ai custom-jobs local-run \
--executor-image-uri=BASE_IMAGE_URI \
--local-package-path=WORKING_DIRECTORY \
--script=SCRIPT_PATH \
--output-image-uri=OUTPUT_IMAGE_NAME \
--requirements=REQUIREMENTS
Substitua REQUIREMENTS por uma lista separada por vírgulas de especificadores de requisito do Python.
Especificar outras dependências locais do Python
Use a sinalização --extra-packages
para instalar dependências locais específicas do
Python. Essas dependências do Python precisam estar no diretório de trabalho e
cada dependência precisa estar em um formato compatível com
pip install
.
Por exemplo, um arquivo de
roda ou uma distribuição de origem
Python.
Exemplo:
gcloud ai custom-jobs local-run \
--executor-image-uri=BASE_IMAGE_URI \
--local-package-path=WORKING_DIRECTORY \
--script=SCRIPT_PATH \
--output-image-uri=OUTPUT_IMAGE_NAME \
--extra-packages=LOCAL_DEPENDENCIES
Substitua LOCAL_DEPENDENCIES por uma lista separada por vírgulas de caminhos de arquivo local, expressa em relação ao diretório de trabalho.
Incluir outros arquivos
Para copiar diretórios adicionais para a imagem do Docker (sem instalá-los como
dependências do Python), use a sinalização --extra-dirs
. Você pode especificar
diretórios somente no diretório de trabalho. Exemplo:
gcloud ai custom-jobs local-run \
--executor-image-uri=BASE_IMAGE_URI \
--local-package-path=WORKING_DIRECTORY \
--script=SCRIPT_PATH \
--output-image-uri=OUTPUT_IMAGE_NAME \
--extra-dirs=EXTRA_DIRECTORIES
Substitua EXTRA_DIRECTORIES por uma lista separada por vírgulas de diretórios locais, expressa em relação ao diretório de trabalho.
Argumentos do aplicativo de treinamento
Se o script de ponto de entrada de seu aplicativo de treinamento esperar argumentos de
linha de comando, especifique-os ao executar o comando local-run
. Esses argumentos
não são salvos na imagem do Docker. Em vez disso, eles são passados como argumentos quando
a imagem é executada como um contêiner.
Para transmitir argumentos ao script do ponto de entrada, passe o argumento --
seguido dos
argumentos do script para o comando local-run
depois de todas as outras sinalizações do
comando.
Por exemplo, imagine um script que é executado localmente com o seguinte comando:
python /hello-world/trainer/task.py \
--learning_rate=0.1 \
--input_data=gs://BUCKET/small-dataset/
Quando você usa o comando local-run
, é possível usar as seguintes sinalizações para executar o
script no contêiner com os mesmos argumentos:
gcloud ai custom-jobs local-run \\
--executor-image-uri=BASE_IMAGE_URI \
--local-package-path=/hello-world \
--script=/trainer/task.py \
--output-image-uri=OUTPUT_IMAGE_NAME \
-- \
--learning_rate=0.1 \
--input_data=gs://BUCKET/small-dataset/
Acelerar o treinamento de modelos com GPUs
Se você quiser implantar a imagem do Docker criada pelo comando local-run
no Vertex AI e usar GPUs para
treinamento, certifique-se de
gravar o código de treinamento que aproveita as
GPUs e usa uma
imagem do Docker ativada para GPU para o valor da sinalização --executor-image-uri
. Por exemplo,
é possível usar uma das imagens de contêiner de treinamento
pré-criadas que são compatíveis com GPUs.
Se o computador local executa o Linux e tem GPUs, também é possível configurar o comando
local-run
para usar suas GPUs quando executar um contêiner localmente. Isso é
opcional, mas pode ser útil se você quiser testar como seu código de treinamento funciona
com GPUs. Faça o seguinte:
Instale o NVIDIA Container Toolkit (
nvidia-docker
) no seu computador local, caso ainda não tenha feito isso.Use a sinalização
--gpu
ao executar o comandolocal-run
. Exemplo:gcloud ai custom-jobs local-run \ --executor-image-uri=BASE_IMAGE_URI \ --local-package-path=WORKING_DIRECTORY \ --script=SCRIPT_PATH \ --output-image-uri=OUTPUT_IMAGE_NAME \ --gpu
Especificar uma conta de serviço personalizada
Por padrão, quando olocal-run
executa o código de treinamento em um contêiner local,
ele ativa as credenciais do Google Cloud disponíveis no ambiente local
por meio do comando Application Default Credentials
(ADC) no contêiner, para que
o código de treinamento possa usar o ADC para autenticação com as mesmas
credenciais. Em outras palavras, as credenciais disponíveis pelo ADC no shell
local também estão disponíveis pelo ADC no seu código quando você executa o comando local-run
.
É possível usar o
comandogcloud auth application-default login
para usar sua conta de
usuário para o ADC ou definir uma variável de ambiente no shell para usar um
serviço pelo ADC.
Se você quiser que o contêiner seja executado com credenciais do Google Cloud diferentes das disponíveis pelo ADC no shell local, faça o seguinte:
Crie ou selecione uma conta de serviço com as permissões que você quer que o código de treinamento tenha acesso.
Faça o download de uma chave de conta de serviço para essa conta de serviço no computador local.
Ao executar o comando
local-run
, especifique a sinalização--service-account-key-file
. Exemplo:gcloud ai custom-jobs local-run \ --executor-image-uri=BASE_IMAGE_URI \ --local-package-path=WORKING_DIRECTORY \ --script=SCRIPT_PATH \ --output-image-uri=OUTPUT_IMAGE_NAME \ --service-account-key-file=KEY_PATH
Substitua KEY_PATH pelo caminho para a chave da conta de serviço no seu sistema de arquivos local. Ele precisa ser absoluto ou relativo ao diretório de trabalho atual do shell, não relativo ao diretório especificado pelo flag
--local-package-path
.
No contêiner resultante, seu código de treinamento pode usar o ADC para autenticação com as credenciais de conta de serviço especificadas.
Comparação com o treinamento na Vertex AI
Quando você executa o treinamento personalizado na Vertex AI, a Vertex AI usa o Agente de serviço de código personalizado da Vertex AI do seu projeto por padrão para executar seu código. Também é possível anexar uma conta de serviço diferente para treinamento personalizado.
Ao usar o comando local-run
, não é possível se autenticar como o agente de serviço do código personalizado da Vertex AI, mas é possível criar uma conta de serviço com permissões semelhantes e usá-la localmente.
A seguir
Saiba mais sobre os requisitos do código de treinamento.
Saiba como enviar sua imagem do Docker para o Artifact Registry e usá-la como um contêiner personalizado para treinamento na Vertex AI.