Durante o treinamento, é possível usar um shell interativo para inspecionar o contêiner em que seu código de treinamento está sendo executado. Procure o sistema de arquivos e execute utilitários de depuração em cada versão do ambiente de execução ou contêiner personalizado em execução no AI Platform Training.
Usar um shell interativo para inspecionar o contêiner de treinamento pode ajudar a depurar problemas com o código de treinamento ou a configuração do AI Platform Training. 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
- Verifique as permissões do Google Cloud disponíveis para o contêiner
Antes de começar
É possível usar um shell interativo ao executar um job de treinamento ou de ajuste de hiperparâmetros. Ao preparar seu código de treinamento e executar um job de treinamento, certifique-se de atender aos seguintes requisitos:
Verifique se o contêiner de treinamento tem
bash
instalado.Todos os contêineres da versão do ambiente de execução 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 o treinamento 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 está em execução:
ml.jobs.create
ml.jobs.get
ml.jobs.cancel
Se você iniciar o treinamento por conta própria, provavelmente já tem essas permissões e pode acessar um shell interativo. No entanto, se você quiser usar um shell interativo para inspecionar um job de treinamento criado por outra pessoa na organização, talvez seja necessário receber essas permissões.
Uma maneira de conseguir essas permissões é pedir que um administrador da organização conceda a você o papel Administrador do AI Platform Training (
roles/ml.admin
). Se você tiver recebido o papel de desenvolvedor do AI Platform Training (roles/ml.developer
), você terá acesso ao shell interativo dos jobs criados.
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 job de treinamento, certifique-se de que qualquer usuário que queira acessar um shell interativo tenha a permissão
iam.serviceAccounts.actAs
para o 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 job com uma conta de serviço anexada, você precisa ter a permissão
iam.serviceAccounts.actAs
para a conta de serviço. Se um dos seus colegas quiser ver um shell interativo para esse job, ele também precisará ter a mesma permissãoiam.serviceAccounts.actAs
.Se você configurou seu projeto para usar o VPC Service Controls com o AI Platform Training, considere as seguintes limitações adicionais:
Não é possível usar o VPC Service Controls com o peering de rede VPC.
Em um shell interativo, não é possível acessar os recursos públicos da Internet ou 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 deml.googleapis.com
. Se você restringir apenasml.googleapis.com
e nãonotebooks.googleapis.com
, os usuários poderão acessar shells interativos 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.
Como ativar shells interativos
Para ativar shells interativos em um job de treinamento, defina o campo enableWebAccess
da API como true
no campo trainingInput
do job ao criar um job de treinamento.
O exemplo a seguir mostra como fazer isso adicionando a sinalização --enable-web-access
ao usar a CLI gcloud. No momento, não é possível criar um job de treinamento com um shell interativo ativado no console do Google Cloud.
O exemplo pressupõe que você tenha um aplicativo de treinamento
em seu sistema de arquivos local em um
diretório chamado trainer
com um módulo chamado task
.
Para criar o job de treinamento, execute o seguinte comando:
gcloud ai-platform jobs submit training JOB_ID \
--enable-web-access \
--job-dir=JOB_DIR \
--module-name=trainer.task \
--package-path=trainer \
--python-version=3.7 \
--region=REGION \
--runtime-version=2.11 \
--scale-tier=CUSTOM \
--master-machine-type=n1-highmem-8
Nesse comando, substitua os seguintes marcadores:
- JOB_ID: um nome que você escolhe para o job
- JOB_DIR: um caminho até um diretório do Cloud Storage para onde o aplicativo de treinamento é enviado.
REGION: a região em que você planeja criar o job de treinamento. Observe que ela precisa ser uma região compatível com shells interativos.
Se bem-sucedido, o comando gera a seguinte saída:
Job [JOB_ID] submitted successfully. Your job is still active. You may view the status of your job with the command $ gcloud ai-platform jobs describe JOB_ID or continue streaming the logs with the command $ gcloud ai-platform jobs stream-logs JOB_ID jobId: JOB_ID state: QUEUED
Como conseguir o URI de acesso à Web
Depois de iniciar o treinamento de acordo com as orientações na seção anterior, use o console do Google Cloud ou a ferramenta de linha de comando gcloud
para ver os URIs que podem ser usados para acessar shells interativos.
O AI Platform Training fornece um URI para cada nó de treinamento que faz parte do job.
Dependendo do tipo de job de treinamento criado, 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ó no job.
Job de treinamento
As guias a seguir mostram maneiras diferentes de acessar o TrainingOutput
para um job de treinamento padrão.
gcloud
Execute o comandogcloud ai-platform jobs describe
:
gcloud ai-platform jobs describe JOB_ID
Substitua:
-
JOB_ID: o ID do job. Você define esse ID quando cria o job.
Se você não souber o ID do job, execute o comando
gcloud ai-platform jobs list
e procure o job apropriado.
Na saída, procure por:
trainingOutput:
webAccessUris:
master-replica-0: INTERACTIVE_SHELL_URI
Console
Abra a página Jobs do AI Platform Training no Console do Google Cloud.
Clique no nome do job na lista para abrir a página Detalhes do job.
Clique no botão Mostrar JSON na seção Saída de treinamento para expandir uma visualização JSON do
TrainingOutput
do job.
Na saída, procure por:
{
"webAccessUris": {
"master-replica-0": "INTERACTIVE_SHELL_URI"
}
}
Se você não vir o campo webAccessUris
, pode ser porque o AI Platform Training ainda não começou a executar o job ou o teste.
Verifique se você vê RUNNING
o campo state
. Se o estado for QUEUED
ou
PREPARING
, aguarde um minuto. Em seguida, tente receber as informações do job novamente.
Job de ajuste de hiperparâmetros
As guias a seguir mostram maneiras diferentes de acessar o TrainingOutput
para um job de ajuste de hiperparâmetro.
gcloud
Execute o comandogcloud ai-platform jobs describe
:
gcloud ai-platform jobs describe JOB_ID
Substitua:
-
JOB_ID: o ID do job. Você define esse ID quando cria o job.
Se você não souber o ID do job, execute o comando
gcloud ai-platform jobs list
e procure o job apropriado.
Na saída, procure por:
trainingOutput:
trials:
- trialId: '1'
webAccessUris:
master-replica-0: INTERACTIVE_SHELL_URI
Console
Abra a página Jobs do AI Platform Training no Console do Google Cloud.
Clique no nome do job na lista para abrir a página Detalhes do job.
Clique no botão Mostrar JSON na seção Saída de treinamento para expandir uma visualização JSON do
TrainingOutput
do job.
Na saída, procure por:
{
"trials": [
{
...
"webAccessUris": {
"master-replica-0": "INTERACTIVE_SHELL_URI"
}
},
...
]
}
Se você não vir o campo webAccessUris
, pode ser porque o AI Platform Training ainda não começou a executar o job ou o teste.
Verifique se você vê RUNNING
o campo state
. Se o estado for QUEUED
ou
PREPARING
, aguarde um minuto. Em seguida, tente receber as informações do job novamente.
O AI Platform Training fornece um conjunto de URIs de shell interativos para cada teste de ajuste de hiperparâmetros à medida que o teste entra no estado RUNNING
. Se você quiser ver os 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 nome da tarefa.
Por exemplo, se seu job tiver um mestre e dois workers, o campo webAccessUris
será semelhante ao seguinte:
{
"master-replica-0": "URI_FOR_PRIMARY",
"worker-replica-0": "URI_FOR_FIRST_SECONDARY",
"worker-replica-1": "URI_FOR_SECOND_SECONDARY"
}
Regiões disponíveis
O uso de um shell interativo para o AI Platform Training é compatível com as seguintes regiões:
Américas
- Oregon (us-west1)
- Los Angeles (us-west2)
- Iowa (us-central1)
- Carolina do Sul (us-east1)
- Norte da Virgínia (us-east4)
- Montreal (northamerica-northeast1)
Europa
- Londres (europe-west2)
- Bélgica (europe-west1)
- Zurique (europe-west6)
- Frankfurt (europe-west3)
Ásia-Pacífico
- Singapura (asia-southeast1)
- Taiwan (asia-east1)
- Tóquio (asia-northeast1)
- Sydney (australia-southeast1)
- Seul (asia-northeast3)
O AI Platform Training também fornece outras regiões para treinamento.
Como usar um shell interativo
Para usar o shell interativo em um nó de treinamento, navegue até um dos URIs encontrados na seção anterior. Um shell do Bash é exibido no navegador, oferecendo acesso ao sistema de arquivos do contêiner em que o AI Platform Training 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.
Como impedir que o job seja encerrado
Quando o AI Platform Training terminar de executar o job ou o 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á cobranças pelo treinamento do AI Platform Training, desde que o job continue em execução.
Como verificar problemas de permissões
O ambiente interativo de shell é autenticado com o uso de Application Default Credentials (ADC) na conta de serviço que o AI Platform Training usa para executar o código de treinamento. Para mais detalhes, execute gcloud auth list
no shell.
No shell, você pode usar gcloud storage
,
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.
Como 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:gcloud storage cp profile.svg gs://BUCKET
Substitua BUCKET pelo nome de um bucket ao qual você tem acesso.
Como 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.
Como conseguir 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:
gcloud storage 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 sua configuração ou no AI Platform Training), 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:
gcloud storage 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 mais sobre o serviço do AI Platform Training.
- Leia sobre Como empacotar um aplicativo de treinamento.