Treinar um modelo de ML com o PyTorch
Neste tutorial, descrevemos como executar um job de treinamento que usa o framework de machine learning PyTorch. O tutorial que a configuração do job para usar o PyTorch é um pouco diferente do uso de outros frameworks de ML compatíveis com o AI Platform Training. Em seguida, ele mostra como executar um job de treinamento usando o código de amostra do PyTorch que treina um modelo com base nos dados do conjunto de dados de corridas de táxi de Chicago (em inglês).
O tutorial também mostra como usar o PyTorch com GPUs e com ajuste de hiperparâmetro.
Contêineres do PyTorch
As versões de ambiente de execução do AI Platform Training não incluem o PyTorch como dependência. Em vez disso, para executar um job de treinamento que usa o PyTorch, especifique um contêiner pré-criado do PyTorch para o AI Platform Training usar.
A configuração de um contêiner pré-criado para treinamento usa algumas das mesmas sintaxes que a configuração de um contêiner personalizado. No entanto, você não precisa criar seu próprio contêiner do Docker. Em vez disso, especifique o URI de uma imagem de contêiner fornecida pelo AI Platform e forneça um pacote de treinamento em Python criado.
O AI Platform fornece os seguintes contêineres PyTorch pré-criados:
URI da imagem do contêiner | Versão PyTorch | Processadores compatíveis |
---|---|---|
gcr.io/cloud-ml-public/training/pytorch-xla.1-11 |
1.11 | CPU e TPU |
gcr.io/cloud-ml-public/training/pytorch-gpu.1-11 |
1.11 | GPU |
gcr.io/cloud-ml-public/training/pytorch-xla.1-10 |
1.10 | CPU e TPU |
gcr.io/cloud-ml-public/training/pytorch-gpu.1-10 |
1.10 | GPU |
gcr.io/cloud-ml-public/training/pytorch-xla.1-9 |
1.9 | CPU e TPU |
gcr.io/cloud-ml-public/training/pytorch-gpu.1-9 |
1.9 | GPU |
gcr.io/cloud-ml-public/training/pytorch-xla.1-7 |
1,7 | CPU e TPU |
gcr.io/cloud-ml-public/training/pytorch-gpu.1-7 |
1,7 | GPU |
gcr.io/cloud-ml-public/training/pytorch-xla.1-6 |
1.6 | CPU e TPU |
gcr.io/cloud-ml-public/training/pytorch-gpu.1-6 |
1.6 | GPU |
gcr.io/cloud-ml-public/training/pytorch-cpu.1-4 |
1.4 | CPU |
gcr.io/cloud-ml-public/training/pytorch-gpu.1-4 |
1.4 | GPU |
Essas imagens de contêiner são derivadas dos Deep Learning Containers e incluem as dependências fornecidas pelos Deep Learning Containers.
Se você quiser usar uma versão do PyTorch não disponível em um dos contêineres pré-criados, siga o guia para usar um contêiner personalizado.
Antes de começar
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the AI Platform Training & Prediction API.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the AI Platform Training & Prediction API.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
Como fazer o download da amostra codificada
Execute os comandos a seguir para fazer o download do aplicativo de treinamento de amostra PyTorch e acessar o diretório com o aplicativo de treinamento:
git clone --depth=1 \
https://github.com/GoogleCloudPlatform/ai-platform-samples.git
cd ai-platform-samples/training/pytorch/structured/python_package
Como opção, inspecione a estrutura do código de treinamento:
ls -pR
O diretório trainer/
contém o aplicativo de treinamento PyTorch, e
setup.py
fornece detalhes de configuração para empacotar o aplicativo
de treinamento.
Crie um bucket do Cloud Storage
Crie um bucket do Cloud Storage para armazenar o código de treinamento empacotado e os artefatos de modelo criados pelo job de treinamento. Execute este comando:
gcloud storage buckets create gs://BUCKET_NAME --location=us-central1
Substitua BUCKET_NAME por um nome exclusivo escolhido para o bucket. Saiba mais sobre os requisitos para nomes de bucket.
Como alternativa, use um bucket atual do Cloud Storage no seu
projeto do Google Cloud. Para este tutorial, use um bucket na região us-central1
.
Como treinar um modelo do PyTorch
Neste tutorial, mostramos várias maneiras de treinar um modelo do PyTorch no AI Platform Training:
- Em uma instância de máquina virtual (VM) com um processador de CPU
- Em uma VM com um processador GPU
- Como usar o ajuste de hiperparâmetros (em uma VM com um processador de CPU)
Escolha uma destas opções agora e siga as instruções nas guias correspondentes para o restante deste tutorial. Repita essa seção se quiser tentar treinar com uma das outras configurações.
Como se preparar para criar um job de treinamento
Antes de criar um job de treinamento, verifique se o código de treinamento está pronto e especifique algumas opções de configuração no ambiente local.
CPU
Defina diversas variáveis do Bash a serem usadas ao criar o job de treinamento:
BUCKET_NAME=BUCKET_NAME
JOB_NAME=getting_started_pytorch_cpu
JOB_DIR=gs://${BUCKET_NAME}/${JOB_NAME}/models
Substitua BUCKET_NAME pelo nome do bucket do Cloud Storage criado em uma seção anterior.
GPU
Verifique se o código de treinamento do PyTorch reconhece a GPU na VM que o job de treinamento usa, para que o PyTorch mova corretamente os tensores e módulos para a GPU.
Se você usar a amostra codificada fornecida, não precisará fazer nada, porque ela contém lógica para detectar se a máquina que executa o código tem uma GPU:
Se você alterar o código de treinamento, leia o guia do PyTorch sobre semânticas CUDA para garantir que a GPU seja usada.
Defina diversas variáveis do Bash a serem usadas ao criar o job de treinamento:
BUCKET_NAME=BUCKET_NAME JOB_NAME=getting_started_pytorch_gpu JOB_DIR=gs://${BUCKET_NAME}/${JOB_NAME}/models
Substitua BUCKET_NAME pelo nome do bucket do Cloud Storage criado em uma seção anterior.
Ajuste de hiperparâmetros
A amostra codificada deste tutorial ajusta a taxa de aprendizado e os parâmetros de tamanho do lote para minimizar a perda de teste.
Verifique se o código de treinamento está pronto para o ajuste de hiperparâmetro no AI Platform Training:
O código precisa analisar as sinalizações de hiperparâmetros que o AI Platform Training transmite para ele.
A amostra codificada processa isso no
task.py
, para que você não precise fazer nada, a menos que altere o código.O código precisa usar a biblioteca
cloudml-hypertune
para informar a métrica de ajuste de hiperparâmetro ao AI Platform Training.A amostra codificada processa isso no
experiment.py
, para que você não precise fazer nada, a menos que altere o código.
Execute o comando a seguir para criar um arquivo
config.yaml
que especifica opções de ajuste de hiperparâmetro:cat > config.yaml <<END trainingInput: hyperparameters: goal: MINIMIZE hyperparameterMetricTag: test_loss maxTrials: 2 maxParallelTrials: 2 enableTrialEarlyStopping: True params: - parameterName: learning-rate type: DOUBLE minValue: 0.0001 maxValue: 1 scaleType: UNIT_LOG_SCALE - parameterName: batch-size type: INTEGER minValue: 1 maxValue: 256 scaleType: UNIT_LINEAR_SCALE END
Essas opções ajustam os hiperparâmetros
--learning-rate
e--batch-size
para minimizar a perda do modelo.Defina diversas variáveis do Bash a serem usadas ao criar o job de treinamento:
BUCKET_NAME=BUCKET_NAME JOB_NAME=getting_started_pytorch_hptuning JOB_DIR=gs://${BUCKET_NAME}/${JOB_NAME}/models
Substitua BUCKET_NAME pelo nome do bucket do Cloud Storage criado em uma seção anterior.
Essas variáveis do Bash têm as seguintes finalidades:
JOB_NAME
é um identificador do job do AI Platform Training. Ele precisa ser exclusivo entre os jobs do AI Platform Training no projeto do Google Cloud.JOB_DIR
é usado pelo AI Platform Training para determinar exatamente onde fazer o upload do aplicativo de treinamento. O aplicativo de treinamento também usa oJOB_DIR
para determinar onde exportar artefatos de modelo quando terminar o treinamento.
Como criar um job de treinamento
Execute o seguinte comando para criar um job de treinamento:
CPU
gcloud ai-platform jobs submit training ${JOB_NAME} \
--region=us-central1 \
--master-image-uri=gcr.io/cloud-ml-public/training/pytorch-xla.1-10 \
--scale-tier=BASIC \
--job-dir=${JOB_DIR} \
--package-path=./trainer \
--module-name=trainer.task \
-- \
--train-files=gs://cloud-samples-data/ai-platform/chicago_taxi/training/small/taxi_trips_train.csv \
--eval-files=gs://cloud-samples-data/ai-platform/chicago_taxi/training/small/taxi_trips_eval.csv \
--num-epochs=10 \
--batch-size=100 \
--learning-rate=0.001
GPU
gcloud ai-platform jobs submit training ${JOB_NAME} \
--region=us-central1 \
--master-image-uri=gcr.io/cloud-ml-public/training/pytorch-gpu.1-10 \
--scale-tier=CUSTOM \
--master-machine-type=n1-standard-8 \
--master-accelerator=type=nvidia-tesla-p100,count=1 \
--job-dir=${JOB_DIR} \
--package-path=./trainer \
--module-name=trainer.task \
-- \
--train-files=gs://cloud-samples-data/ai-platform/chicago_taxi/training/small/taxi_trips_train.csv \
--eval-files=gs://cloud-samples-data/ai-platform/chicago_taxi/training/small/taxi_trips_eval.csv \
--num-epochs=10 \
--batch-size=100 \
--learning-rate=0.001
Ajuste de hiperparâmetros
gcloud ai-platform jobs submit training ${JOB_NAME} \
--region=us-central1 \
--master-image-uri=gcr.io/cloud-ml-public/training/pytorch-xla.1-10 \
--scale-tier=BASIC \
--job-dir=${JOB_DIR} \
--package-path=./trainer \
--module-name=trainer.task \
--config=config.yaml \
-- \
--train-files=gs://cloud-samples-data/ai-platform/chicago_taxi/training/small/taxi_trips_train.csv \
--eval-files=gs://cloud-samples-data/ai-platform/chicago_taxi/training/small/taxi_trips_eval.csv \
--num-epochs=10
Leia o guia sobre jobs de treinamento para saber mais sobre as sinalizações de configuração e como usá-las para personalizar o treinamento.
O comando retorna uma mensagem semelhante à seguinte:
Job [JOB_NAME] submitted successfully.
Your job is still active. You may view the status of your job with the command
$ gcloud ai-platform jobs describe JOB_NAME
or continue streaming the logs with the command
$ gcloud ai-platform jobs stream-logs JOB_NAME
jobId: JOB_NAME
state: QUEUED
Use o comando a seguir para monitorar o status do job:
gcloud ai-platform jobs describe ${JOB_NAME}
É possível transmitir os registros de treinamento do job usando o seguinte comando:
gcloud ai-platform jobs stream-logs ${JOB_NAME}
Quando o job de treinamento é concluído, ele salva o modelo de ML treinado em um arquivo chamado
model.pth
em um diretório com carimbo de data/hora no diretório JOB_DIR
especificado do Cloud Storage.
A seguir
- Aprenda a executar o treinamento distribuído do PyTorch em um cluster de vários nós.
- Saiba como usar uma TPU para treinamento com PyTorch no AI Platform Training.
- Saiba como personalizar a configuração do job de treinamento.
- Se você quiser usar uma versão do PyTorch não disponível em um contêiner pré-criado, saiba como usar um contêiner personalizado.
- Para saber mais sobre como usar o PyTorch, acesse a documentação do PyTorch.