Entraîner un modèle de ML avec PyTorch
Ce tutoriel explique comment exécuter une tâche d'entraînement qui utilise le framework de machine learning PyTorch. Il décrit comment la configuration de votre tâche avec PyTorch diffère légèrement des autres frameworks de ML compatibles avec AI Platform Training. Il explique ensuite comment exécuter une tâche d'entraînement à l'aide d'un exemple de code PyTorch qui entraîne un modèle basé sur l'ensemble de données sur les courses en taxi à Chicago.
Il explique également comment utiliser PyTorch avec les GPU et le réglage d'hyperparamètres.
Conteneurs PyTorch
Les versions d'exécution d'AI Platform Training n'incluent pas PyTorch en tant que dépendance. Pour exécuter une tâche d'entraînement qui utilise PyTorch, spécifiez un conteneur PyTorch prédéfini à utiliser par AI Platform Training.
La configuration d'un conteneur prédéfini pour l'entraînement utilise la même syntaxe que celle utilisée pour la configuration d'un conteneur personnalisé. Cependant, vous n'avez pas besoin de créer votre propre conteneur Docker. Spécifiez plutôt l'URI d'une image de conteneur fournie par AI Platform et fournissez un package d'entraînement Python que vous créez.
AI Platform fournit les conteneurs PyTorch prédéfinis suivants :
URI de l'image du conteneur | Version PyTorch | Processeurs compatibles |
---|---|---|
gcr.io/cloud-ml-public/training/pytorch-xla.1-11 |
1.11 | Processeur, 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 | Processeur, 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 | Processeur, 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 | Processeur, 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 | Processeur, 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 | Processeur |
gcr.io/cloud-ml-public/training/pytorch-gpu.1-4 |
1.4 | GPU |
Ces images de conteneurs sont dérivées des conteneurs de deep learning et incluent les dépendances fournies par les conteneurs de deep learning.
Si vous souhaitez utiliser une version de PyTorch non disponible dans l'un des conteneurs prédéfinis, suivez le guide pour utiliser un conteneur personnalisé.
Avant de commencer
- Connectez-vous à votre compte Google Cloud. Si vous débutez sur Google Cloud, créez un compte pour évaluer les performances de nos produits en conditions réelles. Les nouveaux clients bénéficient également de 300 $ de crédits gratuits pour exécuter, tester et déployer des charges de travail.
-
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
Télécharger l'exemple de code
Exécutez les commandes suivantes pour télécharger l'exemple d'application d'entraînement PyTorch, puis accédez au répertoire avec l'application d'entraînement :
git clone --depth=1 \
https://github.com/GoogleCloudPlatform/ai-platform-samples.git
cd ai-platform-samples/training/pytorch/structured/python_package
Vous pouvez éventuellement inspecter la structure du code d'entraînement :
ls -pR
Le répertoire trainer/
contient l'application d'entraînement PyTorch, et setup.py
fournit les détails de configuration pour empaqueter l'application d'entraînement.
Créer un bucket Cloud Storage
Créez un bucket Cloud Storage pour stocker le code d'entraînement empaqueté et les artefacts de modèle créés par votre tâche d'entraînement. Exécutez la commande suivante :
gcloud storage buckets create gs://BUCKET_NAME --location=us-central1
Remplacez BUCKET_NAME par un nom unique que vous avez choisi pour votre bucket. Consultez les consignes de dénomination des buckets.
Vous pouvez également utiliser un bucket Cloud Storage existant dans votre projet Google Cloud. Pour ce tutoriel, veillez à utiliser un bucket situé dans la région us-central1
.
Entraîner un modèle PyTorch
Ce tutoriel décrit plusieurs façons d'entraîner un modèle PyTorch sur AI Platform Training :
- Sur une instance de machine virtuelle (VM) dotée d'un processeur
- Sur une VM avec un GPU
- Avec les réglages d'hyperparamètres (sur une VM dotée d'un processeur)
Choisissez l'une de ces méthodes maintenant et suivez les instructions dans les onglets correspondants pour la suite de ce tutoriel. Vous pouvez ensuite effectuer à nouveau cette section si vous souhaitez essayer l'entraînement avec l'une des autres configurations.
Préparer la création d'une tâche d'entraînement
Avant de créer une tâche d'entraînement, assurez-vous que votre code d'entraînement est prêt et spécifiez certaines options de configuration dans votre environnement local.
Processeur
Définissez plusieurs variables Bash à utiliser lorsque vous créez votre tâche d'entraînement :
BUCKET_NAME=BUCKET_NAME
JOB_NAME=getting_started_pytorch_cpu
JOB_DIR=gs://${BUCKET_NAME}/${JOB_NAME}/models
Remplacez BUCKET_NAME par le nom du bucket Cloud Storage que vous avez créé dans une section précédente.
GPU
Assurez-vous que votre code d'entraînement PyTorch connaît le GPU sur la VM utilisé par votre tâche d'entraînement, de sorte que PyTorch déplace correctement les Tensors et les modules vers le GPU.
Si vous utilisez l'exemple de code fourni, aucune action n'est requise de votre part, car l'exemple de code contient une logique pour détecter si la machine qui exécute le code dispose d'un GPU :
Si vous modifiez le code d'entraînement, consultez le guide PyTorch pour la sémantique CUDA afin de vous assurer que le GPU est utilisé.
Définissez plusieurs variables Bash à utiliser lorsque vous créez votre tâche d'entraînement :
BUCKET_NAME=BUCKET_NAME JOB_NAME=getting_started_pytorch_gpu JOB_DIR=gs://${BUCKET_NAME}/${JOB_NAME}/models
Remplacez BUCKET_NAME par le nom du bucket Cloud Storage que vous avez créé dans une section précédente.
Réglages d'hyperparamètres
L'exemple de code utilisé pour ce tutoriel ajuste les paramètres du taux d'apprentissage et de la taille de lot afin de minimiser la perte pendant les tests.
Assurez-vous que votre code d'entraînement est prêt pour le réglage des hyperparamètres sur AI Platform Training :
Le code doit analyser les options d'hyperparamètres qu'AI Platform Training lui transmet.
L'exemple de code gère cette opération dans
task.py
. Aucune action de votre part n'est requise, sauf si vous modifiez le code.Le code doit utiliser la méthode
cloudml-hypertune
bibliothèque pour indiquer ses réglages d'hyperparamètres métrique à AI Platform Training.L'exemple de code gère cette opération dans
experiment.py
. Aucune action de votre part n'est requise, sauf si vous modifiez le code.
Exécutez la commande suivante pour créer un fichier
config.yaml
spécifiant les options de réglage des hyperparamètres :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
Ces options permettent d'ajuster les hyperparamètres
--learning-rate
et--batch-size
afin de minimiser la perte de modèle.Définissez plusieurs variables Bash à utiliser lorsque vous créez votre tâche d'entraînement :
BUCKET_NAME=BUCKET_NAME JOB_NAME=getting_started_pytorch_hptuning JOB_DIR=gs://${BUCKET_NAME}/${JOB_NAME}/models
Remplacez BUCKET_NAME par le nom du bucket Cloud Storage que vous avez créé dans une section précédente.
Ces variables Bash sont utilisées aux fins suivantes :
JOB_NAME
est l'identifiant de votre tâche AI Platform Training. Ce nom doit être unique parmi les tâches AI Platform Training de votre projet Google Cloud.JOB_DIR
permet à AI Platform Training de déterminer exactement où importer votre application d'entraînement. L'application d'entraînement utilise égalementJOB_DIR
pour déterminer l'emplacement d'exportation des artefacts de modèle une fois l'entraînement terminé.
Créer une tâche d'entraînement
Exécutez la commande suivante pour créer une tâche d'entraînement :
Processeur
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
Réglages d'hyperparamètres
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
Lisez le guide des tâches d'entraînement pour en savoir plus sur les options de configuration et sur la façon de les utiliser pour personnaliser l'entraînement.
La commande renvoie un message semblable à celui-ci :
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
Vous pouvez surveiller l'état de la tâche à l'aide de la commande suivante :
gcloud ai-platform jobs describe ${JOB_NAME}
Vous pouvez diffuser les journaux d'entraînement de votre tâche à l'aide de la commande suivante :
gcloud ai-platform jobs stream-logs ${JOB_NAME}
Une fois la tâche d'entraînement terminée, elle enregistre le modèle de ML entraîné dans un fichier nommé model.pth
dans un répertoire horodaté dans le répertoire Cloud Storage JOB_DIR
que vous avez spécifié.
Étape suivante
- Découvrez comment effectuer un entraînement PyTorch distribué sur un cluster multinœud.
- Apprenez à utiliser un TPU pour l'entraînement avec PyTorch sur AI Platform Training.
- Apprenez à personnaliser la configuration de votre tâche d'entraînement.
- Si vous souhaitez utiliser une version de PyTorch non disponible dans un conteneur prédéfini, découvrez comment utiliser un conteneur personnalisé.
- Pour en savoir plus sur l'utilisation de PyTorch, consultez la documentation de PyTorch.