Nesta página, mostramos como usar um shell interativo para inspecionar o contêiner em que o código de treinamento está em execução. É possível navegar no sistema de arquivos e executar utilitários de depuração em cada contêiner predefinido ou contêiner personalizado em execução no Vertex AI.
Usar um shell interativo para inspecionar seu contêiner de treinamento pode ajudar a depurar problemas com o código de treinamento ou a configuração do Vertex AI. Por exemplo, é possível usar um shell interativo para fazer o seguinte:
- Executar ferramentas de rastreamento e criação de perfis.
- Analisar o uso da GPU.
- Verificar as permissões do Google Cloud disponíveis para o contêiner.
A Vertex AI também é integrada ao TensorFlow Profiler, que pode ser usado para depurar o desempenho do treinamento de modelo para jobs de treinamento personalizados. Para detalhes, consulte Desempenho do treinamento de modelo de perfil usando o Profiler.
Antes de começar
Você pode usar um shell interativo ao realizar treinamento personalizado com um recurso CustomJob
, um recurso HyperparameterTuningJob
ou um recurso TrainingPipeline
personalizado. Ao preparar seu código de treinamento e configurar o recurso de treinamento personalizado de sua escolha, certifique-se de atender aos seguintes requisitos:
Verifique se o contêiner de treinamento tem
bash
instalado.Todos os containers de treinamento pré-criados têm o
bash
instalado. Se você criar um contêiner personalizado para treinamento, use um contêiner básico que incluabash
ou instalebash
no Dockerfile.Realize treinamento personalizado em uma região compatível com shells interativos.
Verifique se qualquer pessoa que queira acessar um shell interativo tem as seguintes permissões para o projeto do Google Cloud em que o treinamento personalizado está em execução:
aiplatform.customJobs.create
aiplatform.customJobs.get
aiplatform.customJobs.cancel
Se você mesmo iniciar o treinamento personalizado, provavelmente já tem essas permissões e pode acessar um shell interativo. No entanto, se você quiser usar um shell interativo para inspecionar um recurso de treinamento personalizado criado por outra pessoa na sua organização, talvez seja necessário obter essas permissões.
Uma maneira de conseguir essas permissões é solicitar que um administrador da sua organização conceda a você o papel de usuário do Vertex AI (
roles/aiplatform.user
).
Requisitos para casos avançados
Se você estiver usando determinados recursos avançados, atenda aos seguintes requisitos extras:
Se você anexar uma conta de serviço personalizada ao recurso de treinamento personalizado, verifique se qualquer usuário que queira acessar um shell interativo tem a permissão
iam.serviceAccounts.actAs
para a conta de serviço anexada.O guia para contas de serviço personalizadas avisa que você precisa ter essa permissão para anexar uma conta de serviço. Essa permissão também é necessária para visualizar um shell interativo durante o treinamento personalizado.
Por exemplo, para criar um
CustomJob
com uma conta de serviço anexada, você precisa ter a permissãoiam.serviceAccounts.actAs
para a conta de serviço. Se um dos seus colegas quiser ver um shell interativo para esseCustomJob
, ele também precisará ter a mesma permissãoiam.serviceAccounts.actAs
.Se você configurou seu projeto para usar o VPC Service Controls com a Vertex AI, considere as seguintes limitações adicionais:
Não é possível usar um IP particular para treinamento personalizado.
Em um shell interativo, não é possível acessar a Internet pública ou os recursos do Google Cloud fora do perímetro de serviço.
Para proteger o acesso aos shells interativos, adicione
notebooks.googleapis.com
como um serviço restrito no perímetro de serviço, além deaiplatform.googleapis.com
. Se você restringir apenasaiplatform.googleapis.com
e nãonotebooks.googleapis.com
, os usuários poderão acessar shells interativos a partir de máquinas fora do perímetro de serviço, o que reduz o benefício da segurança do uso do VPC Service Controls.
Ativar shells interativas
Para ativar shells interativos para um recurso de treinamento personalizado, defina o campo enableWebAccess
API como true
ao criar um CustomJob
, HyperparameterTuningJob
ou TrainingPipeline
personalizado.
Os exemplos a seguir mostram como fazer isso usando várias ferramentas:
Console
Siga o guia para
criar um TrainingPipeline
personalizado no Console do Google Cloud. No painel
Treinar novo modelo, quando você chegar à etapa Detalhes do modelo, faça o
seguinte:
Clique em Opções avançadas.
Marque a caixa de seleção Ativar a depuração do treinamento.
Em seguida, conclua o restante do fluxo de trabalho Treinar novo modelo.
gcloud
Se você quiser criar um
CustomJob
, execute o comandogcloud ai custom-jobs create
e especifique a sinalização--enable-web-access
nesse comando.Se você quiser criar um
HyperparameterTuningJob
, execute o comandogcloud ai hp-tuning-jobs create
e especifique a sinalização--enable-web-access
nesse comando.
Para saber como usar esses comandos, consulte o guia
como criar um CustomJob
e o guia
como criar um HyperparameterTuningJob
.
API
Os corpos de solicitação REST parciais a seguir mostram onde especificar o campo enableWebAccess
para cada tipo de recurso de treinamento personalizado:
CustomJob
O exemplo a seguir é um corpo de solicitação parcial para o método de API projects.locations.customJobs.create
:
{
...
"jobSpec": {
...
"enableWebAccess": true
}
...
}
Para um exemplo de envio de uma solicitação de API para criar um CustomJob
, consulte Como criar jobs de treinamento personalizados.
HyperparameterTuningJob
O exemplo a seguir é um corpo de solicitação parcial para o método de API projects.locations.hyperparameterTuningJobs.create
:
{
...
"trialJobSpec": {
...
"enableWebAccess": true
}
...
}
Para um exemplo de envio de uma solicitação de API para criar um HyperparameterTuningJob
, consulte Como usar o ajuste de hiperparâmetro.
TrainingPipeline personalizado
Os exemplos a seguir mostram corpos de solicitação parciais para o método da API projects.locations.trainingPipelines.create
.
Selecione uma das seguintes guias, dependendo se você está usando o ajuste de hiperparâmetros:
Sem ajuste de hiperparâmetros
{
...
"trainingTaskInputs": {
...
"enableWebAccess": true
}
...
}
Com ajuste de hiperparâmetros
{
...
"trainingTaskInputs": {
...
"trialJobSpec": {
...
"enableWebAccess": true
}
}
...
}
Para um exemplo de envio de uma solicitação de API para criar um TrainingPipeline
personalizado, consulte Como criar pipelines de treinamento.
Python
Para saber como instalar o SDK da Vertex AI para Python, consulte Instalar o SDK da Vertex AI para Python. Para mais informações, consulte a documentação de referência da API Python.
Defina o parâmetro enable_web_access
como true
ao executar um dos
seguintes métodos:
Se você quiser criar um
CustomJob
, use o métodoCustomJob.run
.Se você quiser criar um
HyperparameterTuningJob
, use o métodoHyperparameterTuningJob.run
.Se você quiser criar um
TrainingPipeline
personalizado, use um dos seguintes métodos:
Navegar até um shell interativo
Depois de iniciar o treinamento personalizado de acordo com a orientação na seção anterior, a Vertex AI gera um ou mais URIs que podem ser usados para acessar shells interativos. A Vertex AI gera um URI exclusivo para cada nó de treinamento no job.
Navegue até um shell interativo de uma das seguintes maneiras:
- Clique em um link no console do Google Cloud
- Use a API Vertex AI para ver o URI de acesso à Web do shell
Navegar no console do Google Cloud
No console do Google Cloud, na seção Vertex AI, acesse uma das páginas a seguir:
Se você não estiver usando o ajuste de hiperparâmetros, acesse a página Jobs personalizados:
Se você estiver usando o ajuste de hiperparâmetros, acesse a página Jobs de ajuste de hiperparâmetros:
Clique no nome do recurso de treinamento personalizado.
Se você criou um
TrainingPipeline
para treinamento personalizado, clique no nome doCustomJob
ouHyperparameterTuningJob
criado peloTrainingPipeline
. Por exemplo, se o pipeline tiver o nomePIPELINE_NAME
, ele pode ser chamado dePIPELINE_NAME-custom-job
ouPIPELINE_NAME-hyperparameter-tuning-job
.Na página do job, clique em Iniciar terminal da Web. Se o job usar vários nós, clique em Iniciar terminal da Web ao lado do nó em que você quer um shell interativo.
Só é possível acessar um shell interativo enquanto o job está em execução. Se você não vir Iniciar terminal da Web, isso pode ser porque a Vertex AI ainda não começou a executar o job ou porque ele já foi concluído ou falhou. Se o status do job for
Queued
ouPending
, aguarde um minuto e tente atualizar a página.Se você estiver usando o ajuste de hiperparâmetro, haverá links separados para o terminal de inicialização da Web para cada teste.
Pegar o URI de acesso à Web na API
Use o método
da API projects.locations.customJobs.get
ou o
método
da API projects.locations.hyperparameterTuningJobs.get
para ver os URIs que podem ser usados para acessar shells interativos.
Dependendo do tipo de recurso de treinamento personalizado que você está usando, selecione uma das
guias a seguir para ver exemplos de como encontrar o campo da API webAccessUris
,
que contém um URI de shell interativo para cada nó do job:
CustomJob
As guias a seguir mostram maneiras diferentes de enviar uma solicitação projects.locations.customJobs.get
:
gcloud
Execute o comandogcloud ai custom-jobs describe
:
gcloud ai custom-jobs describe JOB_ID \
--region=LOCATION \
--format=json
Substitua:
JOB_ID: o ID numérico do job. Esse ID é a última parte do campo
name
do job. Você pode ter visto o ID quando criou o job. Se você não souber o ID do job, execute o comandogcloud ai custom-jobs list
e procure o job apropriado.LOCATION: a região em que você criou o job.
REST
Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:
LOCATION: a região em que você criou o job.
PROJECT_ID: o ID do projeto.
JOB_ID: o ID numérico do job. Esse ID é a última parte do campo
name
do job. Você pode ter visto o ID quando criou o job.
Método HTTP e URL:
GET https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/customJobs/JOB_ID
Para enviar a solicitação, expanda uma destas opções:
Na saída, procure por:
{
...
"state": "JOB_STATE_RUNNING",
...
"webAccessUris": {
"workerpool0-0": "INTERACTIVE_SHELL_URI"
}
}
Se você não vir o campo webAccessUris
, pode ser porque o Vertex AI ainda não começou a executar o job. Verifique se você vê
JOB_STATE_RUNNING
no campo state
. Se o estado for JOB_STATE_QUEUED
ou
JOB_STATE_PENDING
, aguarde um minuto. Em seguida, tente receber as informações do projeto novamente.
HyperparameterTuningJob
As guias a seguir mostram maneiras diferentes de enviar uma solicitação projects.locations.hyperparameterTuningJobs.get
:
gcloud
Execute o comandogcloud ai hp-tuning-jobs describe
:
gcloud ai hp-tuning-jobs describe JOB_ID \
--region=LOCATION \
--format=json
Substitua:
JOB_ID: o ID numérico do job. Esse ID é a última parte do campo
name
do job. Você pode ter visto o ID quando criou o job. Se você não souber o ID do job, execute o comandogcloud ai hp-tuning-jobs list
e procure o job apropriado.LOCATION: a região em que você criou o job.
REST
Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:
LOCATION: a região em que você criou o job.
PROJECT_ID: o ID do projeto.
JOB_ID: o ID numérico do job. Esse ID é a última parte do campo
name
do job. Você pode ter visto o ID quando criou o job.
Método HTTP e URL:
GET https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/hyperparameterTuningJobs/JOB_ID
Para enviar a solicitação, expanda uma destas opções:
Na saída, procure por:
{
...
"state": "JOB_STATE_RUNNING",
...
"trials": [
...
{
...
"state": "ACTIVE",
...
"webAccessUris": {
"workerpool0-0": "INTERACTIVE_SHELL_URI"
}
}
],
}
Se você não vir o campo webAccessUris
, pode ser porque o Vertex AI ainda não começou a executar o job. Verifique se você vê
JOB_STATE_RUNNING
no campo state
. Se o estado for JOB_STATE_QUEUED
ou
JOB_STATE_PENDING
, aguarde um minuto. Em seguida, tente receber as informações do projeto novamente.
O Vertex AI fornece um conjunto de URIs de shell interativos para cada teste de ajuste de hiperparâmetros à medida que o teste entra no estado ACTIVE
. Se você quiser receber URIs de shell interativos para testes posteriores, receba as informações do job novamente após o início desses testes.
O exemplo anterior mostra a saída esperada para o treinamento de réplica única: um URI para o nó de treinamento principal. Se você estiver executando um treinamento distribuído, a saída conterá um URI para cada nó de treinamento, identificado pelo pool de workers.
Por exemplo, se o job tiver um pool de workers principais com uma réplica e um secundário com duas réplicas, o campo webAccessUris
será semelhante a este:
{
"workerpool0-0": "URI_FOR_PRIMARY",
"workerpool1-0": "URI_FOR_FIRST_SECONDARY",
"workerpool1-1": "URI_FOR_SECOND_SECONDARY"
}
Usar uma shell interativa
Para usar o shell interativo em um nó de treinamento, navegue até um dos URIs encontrados na seção anterior. Um shell do Bash aparece no navegador, oferecendo acesso ao sistema de arquivos do contêiner em que o Vertex AI está executando o código de treinamento.
Nas seções a seguir, você verá alguns itens a serem considerados ao usar o shell e alguns exemplos de ferramentas de monitoramento que podem ser usadas nele.
Impedir que o job seja encerrado
Quando o Vertex AI concluir a execução do job ou do teste, você perderá imediatamente o acesso ao shell interativo. Se isso acontecer, você
poderá ver a mensagem command terminated with exit code 137
ou o shell pode parar
de responder. Se você tiver criado arquivos no sistema de arquivos do contêiner, eles não persistirão após o término do job.
Em alguns casos, pode ser útil fazer com que o job seja executado por mais tempo para depurar com um shell interativo. Por exemplo, você pode adicionar um código como o seguinte ao seu código de treinamento para fazer o job continuar em execução por pelo menos uma hora após uma exceção:
import time
import traceback
try:
# Replace with a function that runs your training code
train_model()
except Exception as e:
traceback.print_exc()
time.sleep(60 * 60) # 1 hour
No entanto, você receberá cargas de treinamento do Vertex AI enquanto o job continuar em execução.
Verificar problemas de permissões
O ambiente de shell interativo é autenticado com o uso do Application Default Credentials (ADC) na conta de serviço usada pelo Vertex AI para executar o código de treinamento. Para mais detalhes, execute gcloud auth list
no shell.
No shell, você pode usar gsutil
,
bq
e outras ferramentas compatíveis com o ADC.
Isso pode ajudar você a verificar se o job consegue acessar um determinado bucket do Cloud Storage, tabela do BigQuery ou outro recurso do Google Cloud necessário para o código de treinamento.
Visualizar a execução do Python com py-spy
O py-spy
permite que você crie um perfil
para executar um programa Python sem modificá-lo. Para usar py-spy
em uma
shell interativa, faça o seguinte:
Instale
py-spy
:pip3 install py-spy
Execute
ps aux
no shell e procure o PID do programa de treinamento Python.Execute qualquer um dos subcomandos descritos na documentação de
py-spy
usando o PID encontrado na etapa anterior.Se você usar
py-spy record
para criar um arquivo SVG, copie-o para um bucket do Cloud Storage para que você possa vê-lo depois no computador local. Exemplo:gsutil cp profile.svg gs://BUCKET
Substitua BUCKET pelo nome de um bucket ao qual você tem acesso.
Analisar o desempenho com perf
perf
permite analisar o desempenho do nó de treinamento.
Para instalar a versão do perf
apropriada para o kernel do Linux do nó, execute
os seguintes comandos:
apt-get update
apt-get install -y linux-tools-generic
rm /usr/bin/perf
LINUX_TOOLS_VERSION=$(ls /usr/lib/linux-tools | tail -n 1)
ln -s "/usr/lib/linux-tools/${LINUX_TOOLS_VERSION}/perf" /usr/bin/perf
Depois disso, execute qualquer um dos subcomandos descritos na perf
documentação.
Recuperar informações sobre o uso da GPU
Os contêineres ativados para GPU em execução nos nós com GPUs costumam ter várias ferramentas de linha de comando pré-instaladas que podem ajudar a monitorar o uso da GPU. Exemplo:
Use
nvidia-smi
para monitorar a utilização da GPU por vários processos.Use
nvprof
para coletar uma variedade de informações de criação do perfil da GPU. Como onvprof
não pode ser anexado a um processo existente, convém usar a ferramenta para iniciar um processo adicional executando o código de treinamento. Isso significa que o código de treinamento será executado duas vezes no nó. Exemplo:nvprof -o prof.nvvp python3 -m MODULE_NAME
Substitua MODULE_NAME pelo nome totalmente qualificado do módulo de ponto de entrada do aplicativo de treinamento. Por exemplo,
trainer.task
.Em seguida, transfira o arquivo de saída para um intervalo do Cloud Storage para analisá-lo posteriormente no computador local. Exemplo:
gsutil cp prof.nvvp gs://BUCKET
Substitua BUCKET pelo nome de um bucket ao qual você tem acesso.
Se você encontrar um erro de GPU (não um problema com a configuração ou com o Vertex AI), use
nvidia-bug-report.sh
para criar um relatório de bug.Em seguida, transfira o relatório para um bucket do Cloud Storage para analisá-lo posteriormente no computador local ou enviá-lo para a NVIDIA. Exemplo:
gsutil cp nvidia-bug-report.log.gz gs://BUCKET
Substitua BUCKET pelo nome de um bucket ao qual você tem acesso.
Se bash
não conseguir encontrar nenhum desses comandos da NVIDIA, tente adicionar /usr/local/nvidia/bin
e /usr/local/cuda/bin
ao PATH
do shell:
export PATH="/usr/local/nvidia/bin:/usr/local/cuda/bin:${PATH}"
A seguir
- Saiba como otimizar o desempenho dos jobs de treinamento personalizados usando o Vertex AI TensorBoard Profiler.
- Saiba mais sobre como o Vertex AI orquestra um treinamento personalizado.
- Leia sobre os requisitos de código de treinamento.