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

  1. 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.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the AI Platform Training & Prediction API.

    Enable the API

  5. Install the Google Cloud CLI.
  6. To initialize the gcloud CLI, run the following command:

    gcloud init
  7. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  8. Make sure that billing is enabled for your Google Cloud project.

  9. Enable the AI Platform Training & Prediction API.

    Enable the API

  10. Install the Google Cloud CLI.
  11. 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

  1. 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 :

    cuda_availability = torch.cuda.is_available()
    if cuda_availability:
      device = torch.device('cuda:{}'.format(torch.cuda.current_device()))
    else:
      device = 'cpu'

    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é.

  2. 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.

  1. Assurez-vous que votre code d'entraînement est prêt pour le réglage des hyperparamètres sur AI Platform Training :

  2. 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.

  3. 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 également JOB_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