Esta página mostra-lhe como usar uma shell interativa para inspecionar o contentor onde o seu código de preparação está a ser executado. Pode procurar no sistema de ficheiros e executar utilitários de depuração em cada contentor pré-criado ou contentor personalizado em execução no Vertex AI.
A utilização de um shell interativo para inspecionar o contentor de preparação pode ajudar a depurar problemas com o código de preparação ou a configuração da Vertex AI. Por exemplo, pode usar uma shell interativa para fazer o seguinte:
- Executar ferramentas de rastreio e criação de perfis.
- Analise a utilização da GPU.
- Verifique as Google Cloud autorizações disponíveis para o contentor.
Também pode usar o Cloud Profiler para depurar o desempenho da preparação de modelos para as suas tarefas de preparação personalizadas. Para ver detalhes, consulte o artigo Desempenho da preparação do modelo de perfil com o Profiler.
Antes de começar
Pode usar uma shell interativa quando realiza um treino personalizado com um recurso CustomJob
, um recurso HyperparameterTuningJob
ou um recurso TrainingPipeline
personalizado. À medida que prepara o código de
treino e configura o recurso de treino
personalizado da sua escolha, certifique-se de que
cumpre os seguintes requisitos:
Certifique-se de que o contentor de preparação tem o pacote
bash
instalado.Todos os contentores de preparação pré-criados têm o
bash
instalado. Se criar um contentor personalizado para a preparação, use um contentor base que incluabash
ou instalebash
no seu Dockerfile.Realize uma preparação personalizada numa região que suporte shells interativas.
Certifique-se de que todas as pessoas que querem aceder a um shell interativo têm as seguintes autorizações para o Google Cloud projeto onde o treino personalizado está a ser executado:
aiplatform.customJobs.create
aiplatform.customJobs.get
aiplatform.customJobs.cancel
Se iniciar a preparação personalizada, é provável que já tenha estas autorizações e possa aceder a um shell interativo. No entanto, se quiser usar uma shell interativa para inspecionar um recurso de preparação personalizado criado por outra pessoa na sua organização, pode ter de obter estas autorizações.
Uma forma de obter estas autorizações é pedir a um administrador da sua organização que lhe conceda a função de utilizador da Vertex AI (
roles/aiplatform.user
).
Requisitos para casos avançados
Se estiver a usar determinadas funcionalidades avançadas, cumpra os seguintes requisitos adicionais:
Se anexar uma conta de serviço personalizada ao recurso de preparação personalizado, certifique-se de que todos os utilizadores que queiram aceder a uma shell interativa têm a autorização
iam.serviceAccounts.actAs
para a conta de serviço anexada.O guia para contas de serviço personalizadas indica que tem de ter esta autorização para anexar uma conta de serviço. Também precisa desta autorização para ver um shell interativo durante o treino personalizado.
Por exemplo, para criar um
CustomJob
com uma conta de serviço anexada, tem de ter a autorizaçãoiam.serviceAccounts.actAs
para a conta de serviço. Se um dos seus colegas quiser ver um shell interativo para esteCustomJob
, também tem de ter a mesma autorizaçãoiam.serviceAccounts.actAs
.Se configurou o seu projeto para usar os VPC Service Controls com o Vertex AI, tenha em conta as seguintes limitações adicionais:
Não pode usar o IP privado para o treino personalizado. Se precisar do VPC-SC com o peering de VPC, é necessária uma configuração adicional para usar a shell interativa. Siga as instruções abordadas no artigo Painel de controlo do Ray e shell interativa com VPC-SC + interligação de VPCs para configurar a configuração da shell interativa com VPC-SC e interligação de VPCs no seu projeto de utilizador.
A partir de uma shell interativa, não pode aceder à Internet pública nem a recursos fora do perímetro do seu serviço.Google Cloud
Para proteger o acesso a shells interativos, tem de adicionar o serviço
notebooks.googleapis.com
como um serviço restrito no seu perímetro de serviço, além do serviçoaiplatform.googleapis.com
. Se restringir apenasaiplatform.googleapis.com
e nãonotebooks.googleapis.com
, os utilizadores podem aceder a shells interativas a partir de máquinas fora do perímetro de serviço, o que reduz a vantagem de segurança da utilização dos VPC Service Controls.
Ative shells interativas
Para ativar shells interativos para um recurso de preparação personalizado, defina o campo enableWebAccess
da API como true
quando criar um CustomJob
, um HyperparameterTuningJob
ou um TrainingPipeline
personalizado.
Os exemplos seguintes mostram como o fazer através de várias ferramentas diferentes:
Consola
Siga o guia para
criar um TrainingPipeline
personalizado na Google Cloud consola. No painel Treinar novo modelo, quando chegar ao passo Detalhes do modelo, faça o seguinte:
Clique em Opções avançadas.
Selecione a caixa de verificação Ativar depuração de preparação.
Em seguida, conclua o resto do fluxo de trabalho Treinar novo modelo.
gcloud
Se quiser criar um
CustomJob
, execute o comandogcloud ai custom-jobs create
e especifique a flag--enable-web-access
neste comando.Se quiser criar um
HyperparameterTuningJob
, execute o comandogcloud ai hp-tuning-jobs create
e especifique a flag--enable-web-access
neste comando.
Para saber como usar estes comandos, consulte o guia de criação de um CustomJob
e o guia de criação de um HyperparameterTuningJob
.
API
Os seguintes corpos de pedidos REST parciais mostram onde especificar o campo enableWebAccess
para cada tipo de recurso de formação personalizado:
CustomJob
O exemplo seguinte é um corpo do pedido parcial para o método
projects.locations.customJobs.create
da API:
{
...
"jobSpec": {
...
"enableWebAccess": true
}
...
}
Para ver um exemplo de envio de um pedido de API para criar um CustomJob
, consulte o artigo
Criar tarefas de preparação personalizadas.
HyperparameterTuningJob
O exemplo seguinte é um corpo do pedido parcial para o método
projects.locations.hyperparameterTuningJobs.create
da API:
{
...
"trialJobSpec": {
...
"enableWebAccess": true
}
...
}
Para ver um exemplo de envio de um pedido de API para criar um HyperparameterTuningJob
, consulte o artigo Usar o aperfeiçoamento de hiperparâmetros.
Custom TrainingPipeline
Os exemplos seguintes mostram corpos de pedidos parciais para o método
projects.locations.trainingPipelines.create
API.
Selecione um dos seguintes separadores, consoante esteja a usar a otimização de hiperparâmetros:
Sem o aperfeiçoamento de hiperparâmetros
{
...
"trainingTaskInputs": {
...
"enableWebAccess": true
}
...
}
Com o aperfeiçoamento de hiperparâmetros
{
...
"trainingTaskInputs": {
...
"trialJobSpec": {
...
"enableWebAccess": true
}
}
...
}
Para ver um exemplo de envio de um pedido de API para criar um TrainingPipeline
personalizado, consulte o artigo Criar pipelines de
preparação.
Python
Para saber como instalar ou atualizar o SDK Vertex AI para Python, consulte o artigo Instale o SDK Vertex AI para Python. Para mais informações, consulte a Python documentação de referência da API.
Defina o parâmetro enable_web_access
como true
quando executar um dos seguintes métodos:
Se quiser criar um
CustomJob
, use o métodoCustomJob.run
.Se quiser criar um
HyperparameterTuningJob
, use o métodoHyperparameterTuningJob.run
.Se quiser criar um
TrainingPipeline
personalizado, use um dos seguintes métodos:
Navegue para um shell interativo
Depois de iniciar a preparação personalizada de acordo com as orientações na secção anterior, o Vertex AI gera um ou mais URIs que pode usar para aceder a shells interativas. O Vertex AI gera um URI único para cada nó de preparação na sua tarefa.
Pode navegar para uma shell interativa de uma das seguintes formas:
- Clique num link na Google Cloud consola
- Use a API Vertex AI para obter o URI de acesso Web da shell
Navegue a partir da Google Cloud consola
Na Google Cloud consola, na secção Vertex AI, aceda a uma das seguintes páginas:
Se não estiver a usar o ajuste de hiperparâmetros, aceda à página Tarefas personalizadas:
Se estiver a usar o aperfeiçoamento de hiperparâmetros, aceda à página Tarefas de aperfeiçoamento de hiperparâmetros:
Clique no nome do recurso de preparação personalizado.
Se criou um
TrainingPipeline
para o treino personalizado, clique no nome doCustomJob
ouHyperparameterTuningJob
criado pelo seuTrainingPipeline
. Por exemplo, se o seu pipeline tiver o nomePIPELINE_NAME
, pode ser denominadoPIPELINE_NAME-custom-job
ouPIPELINE_NAME-hyperparameter-tuning-job
.Na página do seu trabalho, clique em Iniciar terminal Web. Se o seu trabalho usar vários nós, clique em Iniciar terminal Web junto ao nó para o qual quer um shell interativo.
Tenha em atenção que só pode aceder a um shell interativo enquanto a tarefa estiver em execução. Se não vir a opção Iniciar terminal Web, isto pode dever-se ao facto de o Vertex AI ainda não ter começado a executar a sua tarefa ou de a tarefa já ter terminado ou falhado. Se o Estado da tarefa for
Queued
ouPending
, aguarde um minuto e, em seguida, experimente atualizar a página.Se estiver a usar o ajuste de hiperparâmetros, existem links Iniciar terminal Web separados para cada teste.
Obtenha o URI de acesso Web a partir da 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 pode usar para aceder a shells interativas.
Consoante o tipo de recurso de preparação personalizado que estiver a usar, selecione um dos seguintes separadores para ver exemplos de como encontrar o campo da API webAccessUris
, que contém um URI de shell interativo para cada nó na sua tarefa:
CustomJob
Os separadores seguintes mostram diferentes formas de enviar um pedido projects.locations.customJobs.get
:
gcloud
Execute o gcloud ai custom-jobs describe
comando:
gcloud ai custom-jobs describe JOB_ID \
--region=LOCATION \
--format=json
Substitua o seguinte:
JOB_ID: o ID numérico do seu trabalho. Este ID é a última parte do campo
name
da tarefa. Pode ter visto o ID quando criou a tarefa. (Se não souber o ID da tarefa, pode executar o comandogcloud ai custom-jobs list
e procurar a tarefa adequada.)LOCATION: a região onde criou a tarefa.
REST
Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:
LOCATION: a região onde criou a tarefa.
PROJECT_ID: o seu ID do projeto.
JOB_ID: o ID numérico do seu trabalho. Este ID é a última parte do campo
name
da tarefa. Pode ter visto o ID quando criou a tarefa.
Método HTTP e URL:
GET https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/customJobs/JOB_ID
Para enviar o seu pedido, expanda uma destas opções:
No resultado, procure o seguinte:
{
...
"state": "JOB_STATE_RUNNING",
...
"webAccessUris": {
"workerpool0-0": "INTERACTIVE_SHELL_URI"
}
}
Se não vir o campo webAccessUris
, isto pode dever-se ao facto de o Vertex AI ainda não ter começado a executar a sua tarefa. Verifique se vê JOB_STATE_RUNNING
no campo state
. Se o estado for JOB_STATE_QUEUED
ou JOB_STATE_PENDING
, aguarde um minuto e, em seguida, tente obter novamente as informações do projeto.
HyperparameterTuningJob
Os separadores seguintes mostram diferentes formas de enviar um pedido projects.locations.hyperparameterTuningJobs.get
:
gcloud
Execute o gcloud ai hp-tuning-jobs describe
comando:
gcloud ai hp-tuning-jobs describe JOB_ID \
--region=LOCATION \
--format=json
Substitua o seguinte:
JOB_ID: o ID numérico do seu trabalho. Este ID é a última parte do campo
name
da tarefa. Pode ter visto o ID quando criou a tarefa. (Se não souber o ID da tarefa, pode executar o comandogcloud ai hp-tuning-jobs list
e procurar a tarefa adequada.)LOCATION: a região onde criou a tarefa.
REST
Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:
LOCATION: a região onde criou a tarefa.
PROJECT_ID: o seu ID do projeto.
JOB_ID: o ID numérico do seu trabalho. Este ID é a última parte do campo
name
da tarefa. Pode ter visto o ID quando criou a tarefa.
Método HTTP e URL:
GET https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/hyperparameterTuningJobs/JOB_ID
Para enviar o seu pedido, expanda uma destas opções:
No resultado, procure o seguinte:
{
...
"state": "JOB_STATE_RUNNING",
...
"trials": [
...
{
...
"state": "ACTIVE",
...
"webAccessUris": {
"workerpool0-0": "INTERACTIVE_SHELL_URI"
}
}
],
}
Se não vir o campo webAccessUris
, isto pode dever-se ao facto de o Vertex AI ainda não ter começado a executar a sua tarefa. Verifique se vê JOB_STATE_RUNNING
no campo state
. Se o estado for JOB_STATE_QUEUED
ou JOB_STATE_PENDING
, aguarde um minuto e, em seguida, tente obter novamente as informações do projeto.
O Vertex AI fornece um conjunto de URIs de shell interativos para cada tentativa de
ajuste de hiperparâmetros à medida que a tentativa entra no estado ACTIVE
. Se quiser obter URIs de shell interativos
para avaliações posteriores, obtenha novamente as informações da tarefa após o início dessas avaliações.
O exemplo anterior mostra o resultado esperado para a preparação de réplica única: um URI para o nó de preparação principal. Se estiver a realizar uma preparação distribuída, o resultado contém um URI para cada nó de preparação, identificado pelo conjunto de trabalhadores.
Por exemplo, se a sua tarefa tiver um conjunto de trabalhadores principal com uma réplica e um conjunto de trabalhadores secundário com duas réplicas, o campo webAccessUris
é semelhante ao seguinte:
{
"workerpool0-0": "URI_FOR_PRIMARY",
"workerpool1-0": "URI_FOR_FIRST_SECONDARY",
"workerpool1-1": "URI_FOR_SECOND_SECONDARY"
}
Use um shell interativo
Para usar a shell interativa para um nó de preparação, navegue para um dos URIs que encontrou na secção anterior. É apresentado um shell Bash no seu navegador, que lhe dá acesso ao sistema de ficheiros do contentor onde o Vertex AI está a executar o seu código de preparação.
As secções seguintes descrevem alguns aspetos a ter em conta ao usar a shell e apresentam alguns exemplos de ferramentas de monitorização que pode usar na shell.
Impedir que a tarefa termine
Quando a Vertex AI terminar a execução da tarefa ou da avaliação, perde imediatamente o acesso à shell interativa. Se isto acontecer, pode
ver a mensagem command terminated with exit code 137
ou o shell pode deixar de
responder. Se criou ficheiros no sistema de ficheiros do contentor, estes não são mantidos após a conclusão da tarefa.
Em alguns casos, pode querer prolongar intencionalmente a execução da tarefa para depurar com uma shell interativa. Por exemplo, pode adicionar código como o seguinte ao seu código de preparação para que a tarefa continue a ser executada durante, pelo menos, uma hora após a ocorrência de 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, tenha em atenção que incorre em custos de preparação da Vertex AI enquanto a tarefa continuar a ser executada.
Verifique problemas de autorizações
O ambiente de shell interativo é autenticado através das credenciais predefinidas da aplicação (ADC) para a conta de serviço que o Vertex AI usa para executar o seu código de preparação. Pode executar gcloud auth list
na shell para ver mais detalhes.
Na shell, pode usar bq
e outras ferramentas que suportam o ADC. Isto pode ajudar a verificar se a tarefa consegue aceder a um contentor do Cloud Storage, a uma tabela do BigQuery ou a outroGoogle Cloud recurso específico de que o seu código de preparação precisa.
Visualize a execução de Python com py-spy
py-spy
permite-lhe criar perfis de um programa Python em execução sem o modificar. Para usar py-spy
num shell interativo, faça o seguinte:
Instale
py-spy
:pip3 install py-spy
Execute
ps aux
na shell e procure o PID do programa de treino Python.Execute qualquer um dos subcomandos descritos na documentação do
py-spy
, usando o PID que encontrou no passo anterior.Se usar o
py-spy record
para criar um ficheiro SVG, copie este ficheiro para um contentor do Cloud Storage para o poder ver mais tarde no seu computador local. Por exemplo:gcloud storage cp profile.svg gs://BUCKET
Substitua BUCKET pelo nome de um contentor ao qual tem acesso.
Analise o desempenho com o perf
perf
permite-lhe analisar o desempenho do seu nó de preparação.
Para instalar a versão do perf
adequada ao kernel Linux do seu 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, pode executar qualquer um dos subcomandos descritos na perf
documentação.
Obtenha informações sobre a utilização da GPU
Normalmente, os contentores com GPU ativada em execução em nós com GPUs têm várias ferramentas de linha de comandos pré-instaladas que podem ajudar a monitorizar a utilização da GPU. Por exemplo:
Use
nvidia-smi
para monitorizar a utilização da GPU de vários processos.Use
nvprof
para recolher uma variedade de informações de criação de perfis da GPU. Uma vez que onvprof
não pode ser anexado a um processo existente, recomendamos que use a ferramenta para iniciar um processo adicional que execute o seu código de preparação. (Isto significa que o código de preparação é executado duas vezes no nó.) Por exemplo:nvprof -o prof.nvvp python3 -m MODULE_NAME
Substitua MODULE_NAME pelo nome totalmente qualificado do módulo do ponto de entrada da aplicação de preparação; por exemplo,
trainer.task
.Em seguida, transfira o ficheiro de saída para um contentor do Cloud Storage para que o possa analisar mais tarde no seu computador local. Por exemplo:
gcloud storage cp prof.nvvp gs://BUCKET
Substitua BUCKET pelo nome de um contentor ao qual tem acesso.
Se encontrar um erro de GPU (não um problema com a sua configuração ou com o Vertex AI), use
nvidia-bug-report.sh
para criar um relatório de erro.Em seguida, transfira o relatório para um contentor do Cloud Storage para o poder analisar mais tarde no seu computador local ou enviá-lo para a NVIDIA. Por exemplo:
gcloud storage cp nvidia-bug-report.log.gz gs://BUCKET
Substitua BUCKET pelo nome de um contentor ao qual tem acesso.
Se o bash
não conseguir encontrar nenhum destes comandos da NVIDIA, experimente adicionar /usr/local/nvidia/bin
e /usr/local/cuda/bin
ao PATH
da shell:
export PATH="/usr/local/nvidia/bin:/usr/local/cuda/bin:${PATH}"
Painel de controlo do Ray e shell interativa com VPC-SC + intercâmbio da VPC
-
Configure o dispositivo
peered-dns-domains
.{ VPC_NAME=NETWORK_NAME REGION=LOCATION gcloud services peered-dns-domains create training-cloud \ --network=$VPC_NAME \ --dns-suffix=$REGION.aiplatform-training.cloud.google.com. # Verify gcloud beta services peered-dns-domains list --network $VPC_NAME; }
-
NETWORK_NAME: altere para a rede com peering.
-
LOCATION: localização pretendida (por exemplo,
us-central1
).
-
-
Configure o dispositivo
DNS managed zone
.{ PROJECT_ID=PROJECT_ID ZONE_NAME=$PROJECT_ID-aiplatform-training-cloud-google-com DNS_NAME=aiplatform-training.cloud.google.com DESCRIPTION=aiplatform-training.cloud.google.com gcloud dns managed-zones create $ZONE_NAME \ --visibility=private \ --networks=https://www.googleapis.com/compute/v1/projects/$PROJECT_ID/global/networks/$VPC_NAME \ --dns-name=$DNS_NAME \ --description="Training $DESCRIPTION" }
-
Registar transação de DNS.
{ gcloud dns record-sets transaction start --zone=$ZONE_NAME gcloud dns record-sets transaction add \ --name=$DNS_NAME. \ --type=A 199.36.153.4 199.36.153.5 199.36.153.6 199.36.153.7 \ --zone=$ZONE_NAME \ --ttl=300 gcloud dns record-sets transaction add \ --name=*.$DNS_NAME. \ --type=CNAME $DNS_NAME. \ --zone=$ZONE_NAME \ --ttl=300 gcloud dns record-sets transaction execute --zone=$ZONE_NAME }
-
Envie uma tarefa de preparação com a shell interativa + o VPC-SC + o intercâmbio da VPC ativados.
O que se segue?
- Saiba como otimizar o desempenho das tarefas de preparação personalizadas através do Profiler.
- Saiba como a Vertex AI orquestra a preparação personalizada.
- Leia acerca dos requisitos do código de preparação.