Antes de realizar o treinamento personalizado com um contêiner pré-criado, é necessário criar uma Distribuição de origem em Python que contém o aplicativo de treinamento e fazer upload dele em um bucket do Cloud Storage que o projeto do Google Cloud possa acessar.
Alternativas à criação de uma distribuição de origem
Neste guia, você verá como criar manualmente uma distribuição de origem e fazer o upload dela para o Cloud Storage. Antes de seguir o guia, considere os fluxos de trabalho alternativos a seguir, que podem ser mais convenientes para alguns casos:
Se você quiser treinar usando o código no seu computador local e reduzir a quantidade de trabalho de empacotamento manual o máximo possível, recomendamos o uso do recurso de empacotamento automático da CLI do Google Cloud. Esse recurso permite criar uma imagem de contêiner do Docker, enviá-la para o Container Registry e criar um recurso
CustomJob
com base na imagem do contêiner, tudo em um único comando. Saiba mais no guia para criar umCustomJob
.Para usar o empacotamento automático, é necessário instalar o Docker no computador local. Essa opção permite que você crie apenas um
CustomJob
, não um recursoTrainingPipeline
ouHyperparameterTuningJob
. Saiba mais sobre as diferenças entre recursos de treinamento personalizados.Para personalizar ainda mais a imagem do contêiner e executar o código em um contêiner localmente antes de executá-lo na Vertex AI, use o comando
local-run
da CLI gcloud para colocar o código em contêiner e executá-lo localmente. Em seguida, é possível enviar manualmente a imagem para o Artifact Registry.Para usar o comando
local-run
, instale o Docker no seu computador local.Se você puder escrever o código de treinamento em um único script Python, use a classe
CustomJob
do SDK da Vertex AI para Python para criar um job personalizado ou uma classeCustomTrainingJob
para criar umTrainingPipeline
personalizado. O código de treinamento é empacotado automaticamente como uma distribuição de origem e enviado ao Cloud Storage.Para maior flexibilidade, é possível criar manualmente uma imagem de contêiner personalizada e enviá-la para o Artifact Registry.
Se nenhuma das opções anteriores for adequada ao seu caso de uso ou se você quiser empacotar manualmente o aplicativo de treinamento como distribuição de origem, siga o restante deste guia.
Antes de começar
Antes de preparar o aplicativo de treinamento para ser executado na nuvem, conclua as etapas a seguir:
Desenvolva um aplicativo de treinamento usando um framework de machine learning (ML) disponível em um dos contêineres de treinamento pré-criados da Vertex AI. Certifique-se de que o aplicativo de treinamento atenda aos requisitos de código de treinamento.
Se você estiver programando o aplicativo de treinamento do zero, recomendamos organizar a programação de acordo com a estrutura do aplicativo descrita em uma seção posterior deste documento.
Crie um bucket do Cloud Storage no mesmo projeto do Google Cloud em que você pretende usar a Vertex AI. Seu aplicativo de treinamento será armazenado nesse bucket. Embora seja possível usar um bucket em outro bucket do Google Cloud, isso exige configuração adicional fora do escopo deste guia.
Para ter o melhor desempenho, verifique se o bucket do Cloud Storage está no local em que você pretende usar a Vertex AI.
Conheça todas as bibliotecas de Python de que seu aplicativo de treinamento depende, sejam elas dependências personalizadas ou disponíveis gratuitamente por meio do PyPI.
Estrutura do aplicativo
Ao executar um treinamento personalizado usando um contêiner pré-criado, é preciso especificar seu código de treinamento de acordo com os seguintes requisitos:
Forneça o código como uma ou mais distribuições de origem do Python.
Se você usar a API Vertex AI para iniciar o treinamento personalizado, especifique-a no campo
packageUris
.Crie um módulo em uma dessas distribuições de origem que atue como o ponto de entrada para treinamento.
Se você usar a API Vertex AI para iniciar o treinamento personalizado, especifique-a no campo
pythonModule
.
Enquanto atender a esses requisitos, você poderá estruturar seu aplicativo de treinamento da maneira que preferir. No entanto, recomendamos que você crie uma única distribuição de fonte do Python organizando o código na seguinte estrutura (usada com frequência em amostras da Vertex AI):
Use um diretório principal do projeto, contendo o arquivo
setup.py
. Consulte a seção a seguir para ver orientações sobre o conteúdo desse arquivo.No diretório principal do projeto, crie um subdiretório chamado
trainer/
que sirva como o pacote principal para o código de treinamento.Em
trainer/
, crie um módulo chamadotask.py
que serve como ponto de entrada para seu código de treinamento.Para oferecer suporte a
trainer/task.py
, crie quaisquer módulos Python adicionais que você quiser no pacotetrainer/
e crie qualquer subdiretório adicional com esse código adicional que você quer no diretório principal do projeto.Crie um arquivo
__init__.py
em cada subdiretório para torná-lo um pacote.
No restante deste guia, consideramos que seu código está organizado de acordo com essa estrutura.
Criar uma distribuição de origem
A criação de distribuições de origem em Python é um assunto amplo que ultrapassa muito o escopo desta documentação. Nesta seção, você encontra uma visão geral do uso do Setuptools (em inglês) para criar uma distribuição de origem para uso com a Vertex AI. Há outras bibliotecas que podem ser usadas para fazer o mesmo.
Crie um arquivo
setup.py
que diga ao Setuptools como criar a distribuição de origem. Umsetup.py
básico inclui:Importe instruções para
setuptools.find_packages
esetuptools.setup
.uma chamada a
setuptools.setup
com, no mínimo, estes parâmetros definidos:name
é definido como o nome da sua distribuição de origem.version
definido como o número da versão deste build da distribuição de origem.install_requires
definido como uma lista de dependências exigidas pelo aplicativo, com requisitos de versão, como'docutils>=0.3'
;packages
definido comofind_packages()
. Isso informa ao Setuptools para incluir todos os subdiretórios do diretório pai que contêm um arquivo__init__.py
como pacotes.include_package_data
definido comoTrue
.
No exemplo a seguir, mostramos um arquivo
setup.py
básico para um aplicativo de treinamento:from setuptools import find_packages from setuptools import setup setup( name='trainer', version='0.1', packages=find_packages(), include_package_data=True, description='My training application.' )
Execute o seguinte comando para criar uma distribuição de origem,
dist/trainer-0.1.tar.gz
:python setup.py sdist --formats=gztar
Dependências de aplicativos Python
Dependências são pacotes que você import
a no código. O aplicativo pode precisar de muitas dependências para funcionar.
Para cada réplica no job de treinamento personalizado, o código é executado em um contêiner com muitas dependências comuns do Python já instaladas. Verifique as dependências incluídas no contêiner pré-criado que você planeja usar para treinamento e observe quais dependências ainda não estão instaladas. Você só precisa concluir as etapas a seguir para as dependências que ainda não estiverem instaladas no contêiner pré-criado.
Há dois tipos de dependências que talvez seja necessário adicionar:
- Dependências padrão, pacotes comuns em distribuições disponíveis em PyPI (em inglês).
- Dependências personalizadas, como as que você desenvolve ou que são internas de uma organização.
Nas seções abaixo, descrevemos os procedimentos para cada tipo.
Dependências padrão (PyPI)
É possível especificar as dependências padrão do pacote como parte do script
setup.py
correspondente. A Vertex AI usa pip
para instalar o aplicativo de
treinamento nas réplicas alocadas para o job. O comando
pip install
procura e instala dependências configuradas.
O exemplo a seguir mostra um setup.py
semelhante ao de uma seção
anterior. No entanto, esse setup.py
orienta a Vertex AI a instalar
some_PyPI_package
ao instalar o aplicativo de treinamento:
from setuptools import find_packages
from setuptools import setup
REQUIRED_PACKAGES = ['some_PyPI_package>=1.0']
setup(
name='trainer',
version='0.1',
install_requires=REQUIRED_PACKAGES,
packages=find_packages(),
include_package_data=True,
description='My training application.'
)
Dependências personalizadas
Para especificar as dependências personalizadas do aplicativo, passe os caminhos correspondentes como parte da configuração do job. Você precisa do URI da distribuição de origem de
cada dependência. As dependências personalizadas precisam estar em um local do Cloud Storage. A Vertex AI usa
pip install
para instalar dependências personalizadas. Assim, elas podem ter dependências padrão
próprias nos scripts setup.py
.
Cada URI incluído é o caminho para uma distribuição de origem, formatado como um
tarball (.tar.gz
) ou como uma roda (.whl
). A Vertex AI instala cada
dependência usando pip install
em cada réplica
alocada para o job de treinamento.
Se você usar a API Vertex AI para iniciar o treinamento personalizado, especifique os
URIs do Cloud Storage para essas dependências junto do aplicativo
de treinamento no campo
packageUris
.
Módulos Python
O aplicativo pode conter vários módulos (arquivos Python). É preciso identificar aquele que contém o ponto de entrada do aplicativo. O serviço de treinamento executa esse módulo invocando o Python, do mesmo modo que você o executaria localmente.
Por exemplo, se você seguir a estrutura recomendada de uma seção anterior,
seu módulo principal será task.py
. Como ele está dentro de um pacote de importação (diretório
com um arquivo __init__.py
) denominado trainer
, o nome totalmente qualificado deste
módulo é trainer.task
. Se você usar a API Vertex AI para iniciar o treinamento
personalizado, defina o campo
moduleName
como trainer.task
.
Consulte o Guia Python para pacotes (em inglês) para ver mais informações sobre módulos.
Fazer upload da distribuição de origem para o Cloud Storage
Você pode usar a CLI gcloud para fazer upload da origem e das dependências personalizadas para um bucket do Cloud Storage. Exemplo:
gcloud storage cp dist/trainer-0.1.tar.gz CLOUD_STORAGE_DIRECTORY
Substitua CLOUD_STORAGE_DIRECTORY pelo URI (começando com gs://
e terminando por /
) de um diretório do Cloud Storage em um bucket que seu
projeto do Google Cloud possa acessar.
Para saber mais sobre outras maneiras de fazer upload da distribuição de origem para o Cloud Storage, leia Como fazer upload de objetos na documentação do Cloud Storage.
A seguir
- Saiba mais sobre outros requisitos de código de treinamento para treinamento personalizado.
- Saiba como criar um job de treinamento personalizado ou um pipeline de treinamento personalizado que use seu aplicativo de treinamento.