Effectuer l'entraînement dans un conteneur à l'aide de Google Kubernetes Engine

Cette page explique comment exécuter une tâche d'entraînement dans une instance Deep Learning Containers et exécuter cette image de conteneur sur un cluster Google Kubernetes Engine.

Avant de commencer

Avant de commencer, assurez-vous d'avoir effectué les étapes suivantes.

  1. Suivez les étapes de configuration de la section "Avant de commencer" de la page Premiers pas avec un conteneur de deep learning local.

  2. Vérifiez que la facturation est activée pour votre projet Google Cloud.

    Découvrir comment activer la facturation

  3. Activez les API Google Kubernetes Engine, Compute Engine et Artifact Registry.

    Activer les API

Ouvrez l'outil de ligne de commande

Vous pouvez suivre ce guide en local à l'aide de Cloud Shell ou d'outils de ligne de commande. Cloud Shell est préinstallé sur les outils de ligne de commande gcloud, docker et kubectl utilisés dans ce tutoriel. Si vous utilisez Cloud Shell, il est inutile d'installer ces outils de ligne de commande sur votre poste de travail.

Cloud Shell

Pour utiliser Cloud Shell, procédez comme suit :

  1. Accédez à Google Cloud Console.

  2. Cliquez sur le bouton Activer Cloud Shell en haut de la fenêtre de la console.

    Console Google Cloud Platform

    Une session Cloud Shell s'ouvre dans un nouveau cadre en bas de la console et affiche une invite de ligne de commande.

    Session Cloud Shell

Ligne de commande locale

Pour utiliser votre ligne de commande locale, procédez comme suit :

  1. À l'aide de gcloud CLI, installez l'outil de ligne de commande Kubernetes. kubectl permet de communiquer avec Kubernetes, le système d'orchestration de clusters pour les clusters de conteneurs de deep learning :

    gcloud components install kubectl
    

    Lorsque vous avez suivi les étapes de démarrage, vous avez installé Google Cloud CLI et Docker.

Créer un cluster GKE

Exécutez la commande suivante pour créer un cluster à deux nœuds dans GKE nommé pytorch-training-cluster :

gcloud container clusters create pytorch-training-cluster \
    --num-nodes=2 \
    --zone=us-west1-b \
    --accelerator="type=nvidia-tesla-p100,count=1" \
    --machine-type="n1-highmem-2" \
    --scopes="gke-default,storage-rw"

Pour en savoir plus sur ces paramètres, consultez la documentation sur la création de clusters pour l'exécution de conteneurs.

La création du cluster peut prendre plusieurs minutes.

Au lieu de créer un cluster, vous pouvez utiliser un cluster existant dans votre projet Google Cloud. Dans ce cas, vous devrez peut-être exécuter la commande suivante pour vous assurer que l'outil de ligne de commande kubectl dispose des identifiants appropriés pour accéder à votre cluster :

gcloud container clusters get-credentials YOUR_EXISTING_CLUSTER

Ensuite, installez les pilotes de GPU NVIDIA.

Créer le fichier Dockerfile

Il existe de nombreuses façons de créer une image de conteneur. Ces étapes vous montrent comment créer une image pour exécuter un script Python nommé trainer.py.

Pour afficher la liste des images de conteneurs disponibles, procédez comme suit :

gcloud container images list \
    --repository="us-docker.pkg.dev/deeplearning-platform-release/gcr.io"

Consultez la page Choisir un conteneur pour vous aider à sélectionner le conteneur de votre choix.

L'exemple suivant montre comment placer un script Python nommé trainer.py dans un type de conteneur de deep learning PyTorch spécifique.

Pour créer le Dockerfile, écrivez les commandes suivantes dans un fichier nommé Dockerfile. Cette étape suppose que vous disposez de code pour entraîner un modèle de machine learning dans un répertoire nommé model-training-code et que le module Python principal de ce répertoire est nommé trainer.py. Dans ce scénario, le conteneur sera supprimé une fois la tâche terminée. Vous devez donc configurer votre script d'entraînement pour qu'il renvoie vers Cloud Storage (consultez un exemple de script qui renvoie vers Cloud Storage) ou vers un stockage persistant.

FROM us-docker.pkg.dev/deeplearning-platform-release/gcr.io/pytorch-gpu
COPY model-training-code /train
CMD ["python", "/train/trainer.py"]

Créer et importer l'image de conteneur

Pour créer et importer l'image de conteneur dans Artifact Registry, utilisez les commandes suivantes:

export PROJECT_ID=$(gcloud config list project --format "value(core.project)")
export IMAGE_REPO_NAME=pytorch_custom_container
export IMAGE_TAG=$(date +%Y%m%d_%H%M%S)
export IMAGE_URI=us-docker.pkg.dev/$PROJECT_ID/$IMAGE_REPO_NAME:$IMAGE_TAG

docker build -f Dockerfile -t $IMAGE_URI ./

docker push $IMAGE_URI

Déployer votre application

Créez un fichier nommé pod.yaml avec le contenu suivant, en remplaçant IMAGE_URI par l'URI de votre image.

apiVersion: v1
kind: Pod
metadata:
  name: gke-training-pod
spec:
  containers:
  - name: my-custom-container
    image: IMAGE_URI
    resources:
      limits:
        nvidia.com/gpu: 1

Utilisez l'outil de ligne de commande kubectl pour exécuter la commande suivante et déployer votre application :

kubectl apply -f ./pod.yaml

Pour suivre l'état du pod, exécutez la commande suivante :

kubectl describe pod gke-training-pod