Entraîner un modèle de ML avec des conteneurs personnalisés
AI Platform Training est compatible avec l'entraînement dans des conteneurs personnalisés, ce qui permet aux utilisateurs d'exécuter leurs propres conteneurs Docker disposant d'un framework ou d'un algorithme de ML pré-installé. Ce tutoriel décrit sommairement comment entraîner un modèle PyTorch sur AI Platform Traning à l'aide d'un conteneur personnalisé.
Présentation
Ce guide de démarrage présente le processus d'entraînement avec des conteneurs personnalisés sur AI Platform Training, à l'aide d'un modèle de base qui classe les chiffres manuscrits d'après l'ensemble de données MNIST.
Ce guide couvre les étapes suivantes :
- Configurer l'environnement local et le projet
- Créer un conteneur personnalisé
- Écrire un fichier Dockerfile
- Créer et tester votre image Docker localement
- Stocker l'image dans Container Registry
- Envoyer une tâche d'entraînement avec des conteneurs personnalisés
- Envoyer une tâche de réglage d'hyperparamètres
- Utiliser des GPU avec un conteneur personnalisé
Avant de commencer
Pour ce guide de démarrage, utilisez un environnement dans lequel Google Cloud CLI est installé.Facultatif : Consultez les informations conceptuelles sur l'entraînement avec des conteneurs personnalisés.
Pour configurer un compte GCP, activer les API requises, puis installer et activer le SDK Cloud, procédez comme suit :
- 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, Compute Engine and Container Registry APIs.
- 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, Compute Engine and Container Registry APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
- Installez Docker.
Si vous utilisez un système d'exploitation Linux, tel qu'Ubuntu ou Debian, ajoutez votre nom d'utilisateur au groupe
docker
afin de pouvoir exécuter Docker sans utilisersudo
:sudo usermod -a -G docker ${USER}
Une fois que vous vous serez ajouté au groupe
docker
, vous devrez peut-être redémarrer votre système. - Ouvrez Docker. Pour vérifier que Docker est en cours d'exécution, exécutez la commande Docker suivante, qui renvoie la date et l'heure actuelles :
docker run busybox date
- Utilisez
gcloud
comme assistant d'identification pour Docker :gcloud auth configure-docker
-
Facultatif : Si vous souhaitez exécuter le conteneur à l'aide d'un GPU en local, installez
nvidia-docker
.
Configurer un bucket Cloud Storage
Vous trouverez dans cette section la procédure à suivre pour créer un bucket. Vous pouvez utiliser un bucket existant, mais il doit se trouver dans la même région que celle où vous prévoyez d'exécuter des tâches AI Platform. En outre, s'il ne fait pas partie du projet que vous utilisez pour exécuter AI Platform Training, vous devez explicitement accorder l'accès aux comptes de service AI Platform Training.
-
Indiquez un nom pour votre nouveau bucket. Ce nom doit être unique par rapport à tous les buckets dans Cloud Storage.
BUCKET_NAME="YOUR_BUCKET_NAME"
Par exemple, vous pouvez utiliser le nom de votre projet en ajoutant
-aiplatform
:PROJECT_ID=$(gcloud config list project --format "value(core.project)") BUCKET_NAME=${PROJECT_ID}-aiplatform
-
Vérifiez le nom du bucket que vous avez créé.
echo $BUCKET_NAME
-
Sélectionnez une région pour votre bucket, puis définissez une variable d'environnement
REGION
.Utilisez la même région que celle où vous prévoyez d'exécuter des tâches AI Platform Training. Consultez les régions disponibles pour les services AI Platform Training.
Par exemple, le code suivant crée la variable
REGION
et la définit surus-central1
:REGION=us-central1
-
Créez le bucket :
gcloud storage buckets create gs://$BUCKET_NAME --location=$REGION
Télécharger le code pour ce tutoriel
Saisissez la commande suivante pour télécharger le fichier ZIP AI Platform Training :
wget https://github.com/GoogleCloudPlatform/cloudml-samples/archive/master.zip
Décompressez le fichier pour extraire le répertoire
cloudml-samples-master
.unzip master.zip
Accédez au répertoire
cloudml-samples-master > pytorch > containers > quickstart > mnist
: Les commandes de cette présentation doivent être exécutées à partir du répertoiremnist
.cd cloudml-samples-master/pytorch/containers/quickstart/mnist
Créer un conteneur personnalisé
Pour créer un conteneur personnalisé, la première étape consiste à définir un fichier Dockerfile afin d'installer les dépendances requises pour la tâche d'entraînement. Ensuite, vous créez et testez votre image Docker localement pour la vérifier avant de l'utiliser avec AI Platform Training.
Écrire un fichier Dockerfile
L'exemple de fichier Dockerfile fourni dans ce tutoriel réalise les étapes suivantes :
- Il utilise une image de base Python 2.7 avec des dépendances Python intégrées.
- Il installe des dépendances supplémentaires, y compris PyTorch, la CLI gcloud et
cloudml-hypertune
pour le réglage d'hyperparamètres. - Il copie le code de votre application d'entraînement dans le conteneur.
- Il configure le point d'entrée pour AI Platform Training pour exécuter votre code d'entraînement lorsque le conteneur est en cours de démarrage.
Le fichier Dockerfile peut inclure une logique supplémentaire, en fonction de vos besoins. Apprenez-en plus sur l'écriture de fichiers Dockerfile.
Créer et tester votre image Docker localement
Créez l'URI d'image correct à l'aide de variables d'environnement, puis compilez l'image Docker. L'indicateur
-t
nomme l'image et lui ajoute un tag comportant vos choix pourIMAGE_REPO_NAME
etIMAGE_TAG
. Vous pouvez choisir un nom et un tag différents pour votre image.export PROJECT_ID=$(gcloud config list project --format "value(core.project)") export IMAGE_REPO_NAME=mnist_pytorch_custom_container export IMAGE_TAG=mnist_pytorch_cpu export IMAGE_URI=gcr.io/$PROJECT_ID/$IMAGE_REPO_NAME:$IMAGE_TAG docker build -f Dockerfile -t $IMAGE_URI ./
Vérifiez l'image en l'exécutant localement dans un nouveau conteneur. Notez que l'indicateur
--epochs
est transmis au script de l'outil d'entraînement.docker run $IMAGE_URI --epochs 1
Stocker l'image dans Container Registry
Si l'exécution locale fonctionne, vous pouvez stocker l'image Docker dans Container Registry pour votre projet.
Commencez par exécuter gcloud auth configure-docker
si vous ne l'avez pas déjà fait.
docker push $IMAGE_URI
Envoyer et surveiller la tâche
Définissez des variables d'environnement pour votre requête de tâche.
MODEL_DIR
nomme un nouveau répertoire horodaté dans votre bucket Cloud Storage, dans lequel le fichier de modèle enregistré est stocké une fois l'entraînement terminé.REGION
spécifie une région valide pour l'entraînement AI Platform.
export MODEL_DIR=pytorch_model_$(date +%Y%m%d_%H%M%S) export REGION=us-central1 export JOB_NAME=custom_container_job_$(date +%Y%m%d_%H%M%S)
Envoyez la tâche d'entraînement à AI Platform Training à l'aide de la CLI gcloud. Transmettez l'URI à votre image Docker à l'aide de l'indicateur
--master-image-uri
:gcloud ai-platform jobs submit training $JOB_NAME \ --region $REGION \ --master-image-uri $IMAGE_URI \ -- \ --model-dir=gs://$BUCKET_NAME/$MODEL_DIR \ --epochs=10
Une fois que vous avez envoyé la tâche, vous pouvez surveiller son état et diffuser des journaux :
gcloud ai-platform jobs describe $JOB_NAME gcloud ai-platform jobs stream-logs $JOB_NAME
Envoyer une tâche de réglage d'hyperparamètres
Une tâche de réglage d'hyperparamètres nécessite quelques ajustements. Notez les points suivants dans l'exemple de code :
- L'exemple de fichier Dockerfile inclut le package
cloudml-hypertune
afin de l'installer dans le conteneur personnalisé. - L'exemple de code (
mnist.py
) réalisé les actions suivantes :- Il utilise
cloudml-hypertune
pour signaler les résultats de chaque essai en appelant sa fonction d'aide,report_hyperparameter_tuning_metric
. L'exemple de code rapporte les résultats du réglage d'hyperparamètres après l'évaluation, sauf si la tâche n'est pas envoyée en tant que tâche de réglage d'hyperparamètres. - Il ajoute des arguments de ligne de commande pour chaque hyperparamètre et gère l'analyse des arguments avec
argparse
.
- Il utilise
- La requête de tâche inclut
HyperparameterSpec
dans l'objetTrainingInput
. Dans ce cas, nous ajustons--lr
et--momentum
afin de minimiser la perte de modèle.
Créez un fichier
config.yaml
pour définir votre spécification d'hyperparamètres. RedéfinissezMODEL_DIR
etJOB_NAME
. Si vous ne l'avez pas déjà fait, définissez l'élémentREGION
:export MODEL_DIR=pytorch_hptuning_model_$(date +%Y%m%d_%H%M%S) export REGION=us-central1 export JOB_NAME=custom_container_job_hptuning_$(date +%Y%m%d_%H%M%S) # Creates a YAML file with job request. cat > config.yaml <<EOF trainingInput: hyperparameters: goal: MINIMIZE hyperparameterMetricTag: "my_loss" maxTrials: 20 maxParallelTrials: 5 enableTrialEarlyStopping: True params: - parameterName: lr type: DOUBLE minValue: 0.0001 maxValue: 0.1 - parameterName: momentum type: DOUBLE minValue: 0.2 maxValue: 0.8 EOF
Envoyez la tâche de réglage des hyperparamètres à AI Platform Training :
gcloud ai-platform jobs submit training $JOB_NAME \ --scale-tier BASIC \ --region $REGION \ --master-image-uri $IMAGE_URI \ --config config.yaml \ -- \ --epochs=5 \ --model-dir="gs://$BUCKET_NAME/$MODEL_DIR"
Utiliser des GPU avec des conteneurs personnalisés
Pour envoyer une tâche de conteneur personnalisé utilisant des GPU, vous devez créer une image Docker différente de celle que vous avez utilisée précédemment. Nous avons fourni un exemple de fichier Dockerfile destiné à être utilisé avec des GPU répondant aux exigences suivantes :
- Pré-installez CUDA Toolkit et cuDNN dans votre conteneur. L'utilisation de l'image nvidia/cuda en tant qu'image de base est la méthode recommandée, car CUDA Toolkit et cuDNN y sont pré-installés, ce qui vous aide à configurer correctement les variables d'environnement associées.
- Installez des dépendances supplémentaires, telles que
wget
,curl
,pip
et toute autre dépendance requise par votre application d'entraînement.
Créer et tester l'image Docker de GPU localement
Créez une image pour votre tâche d'entraînement avec des GPU en utilisant le fichier Dockerfile du GPU. Pour éviter de remplacer l'image de processeur, vous devez redéfinir
IMAGE_REPO_NAME
etIMAGE_TAG
avec des noms différents de ceux que vous avez utilisés précédemment dans ce tutoriel.export PROJECT_ID=$(gcloud config list project --format "value(core.project)") export IMAGE_REPO_NAME=mnist_pytorch_gpu_container export IMAGE_TAG=mnist_pytorch_gpu export IMAGE_URI=gcr.io/$PROJECT_ID/$IMAGE_REPO_NAME:$IMAGE_TAG docker build -f Dockerfile-gpu -t $IMAGE_URI ./
Si des GPU sont disponibles sur votre machine et que vous avez installé
nvidia-docker
, vous pouvez valider l'image en l'exécutant localement :docker run --runtime=nvidia $IMAGE_URI --epochs 1
Stockez l'image Docker dans Container Registry. Commencez par exécuter
gcloud auth configure-docker
si vous ne l'avez pas déjà fait.docker push $IMAGE_URI
Envoyer la tâche
Cet exemple utilise le niveau d'évolutivité de GPU de base pour envoyer la requête de tâche d'entraînement. Consultez les autres options relatives aux machines pour l'entraînement avec des GPU.
Redéfinissez
MODEL_DIR
etJOB_NAME
. DéfinissezREGION
si vous ne l'avez pas déjà fait :export MODEL_DIR=pytorch_model_gpu_$(date +%Y%m%d_%H%M%S) export REGION=us-central1 export JOB_NAME=custom_container_job_gpu_$(date +%Y%m%d_%H%M%S)
Envoyez la tâche d'entraînement à AI Platform Training à l'aide de la CLI gcloud. Transmettez l'URI à votre image Docker à l'aide de l'indicateur
--master-image-uri
.gcloud ai-platform jobs submit training $JOB_NAME \ --scale-tier BASIC_GPU \ --region $REGION \ --master-image-uri $IMAGE_URI \ -- \ --epochs=5 \ --model-dir=gs://$BUCKET_NAME/$MODEL_DIR
Étape suivante
- Découvrez les concepts liés à l'utilisation de conteneurs.
- Apprenez-en plus sur l'entraînement distribué avec des conteneurs personnalisés.