Les processeurs graphiques (GPU) peuvent accélérer considérablement le processus d'entraînement de nombreux modèles de deep learning, Pour des tâches telles que la classification des images, l'analyse vidéo et le traitement du langage naturel, les modèles d'entraînement impliquent la multiplication de matrices de calcul intensif et d'autres opérations qui peuvent tirer parti de l'architecture hautement parallèle d'un GPU.
L'entraînement d'un modèle de deep learning impliquant des tâches de calcul intensives sur des ensembles de données extrêmement volumineux peut prendre plusieurs jours sur un seul processeur. Toutefois, si vous concevez un programme pour décharger ces tâches sur un ou plusieurs GPU, vous pouvez réduire le temps d'entraînement à quelques heures.
Avant de commencer
AI Platform Training vous permet d'exécuter votre application d'entraînement TensorFlow sur une machine compatible avec les GPU. Consultez le guide TensorFlow sur l'utilisation des GPU et la section de ce document portant sur l'adaptation du code d'entraînement aux GPU pour vous assurer que votre application utilise les GPU disponibles.
Si vous utilisez un conteneur personnalisé pour l'entraînement de vos modèles, vous pouvez également utiliser des GPU avec des frameworks de machine learning autres que TensorFlow.
Certains modèles ne bénéficient pas de l'exécution sur GPU. Nous recommandons l'utilisation de GPU pour les modèles volumineux et complexes comportant de nombreuses opérations mathématiques. Même dans ce cas, vous devez tester les avantages des GPU en exécutant l'entraînement d'un petit nombre de données.
Demander des machines compatibles GPU
Pour pouvoir utiliser des GPU dans le cloud, configurez votre tâche d'entraînement afin d'accéder aux machines compatibles GPU en procédant de l'une des manières suivantes :
- Utilisez le niveau d'évolutivité
BASIC_GPU
. - Utilisez des types de machines Compute Engine et rattachez-y des GPU.
- Utilisez des anciens types de machines compatibles GPU.
Machines compatibles GPU de base
Si vous apprenez à utiliser AI Platform Training ou à tester des machines GPU, vous pouvez définir le niveau d'évolutivité d'évolutivité sur BASIC_GPU
pour obtenir une seule instance de nœud de calcul avec un seul GPU.
Types de machines Compute Engine avec rattachement aux GPU
Si vous configurez votre tâche d'entraînement avec des types de machines Compute Engine, vous pouvez y rattacher un nombre personnalisé de GPU pour accélérer votre tâche :
- Définissez le niveau d'évolutivité sur
CUSTOM
. - Configurez votre nœud de calcul maître et tout autre type de tâche (nœud de calcul, serveur de paramètres ou évaluateur) faisant partie de votre tâche pour utiliser des types de machines Compute Engine valides.
- Ajoutez un champ
acceleratorConfig
avec le type et le nombre de GPU souhaités pour les configurationsmasterConfig
,workerConfig
,parameterServerConfig
ouevaluatorConfig
, en fonction instances de machines virtuelles (VM) à accélérer. Vous pouvez utiliser les types de GPU suivants :NVIDIA_TESLA_A100
NVIDIA_TESLA_P4
NVIDIA_TESLA_P100
NVIDIA_TESLA_T4
NVIDIA_TESLA_V100
Pour créer un acceleratorConfig
valide, vous devez tenir compte de plusieurs restrictions :
Vous ne pouvez utiliser qu'un certain nombre de GPU dans votre configuration. Par exemple, vous pouvez associer deux ou quatre GPU NVIDIA Tesla T4, mais pas trois. Pour connaître le nombre de GPU autorisé pour chaque type de machine, consultez la table de compatibilité ci-après.
Vous devez vous assurer que chacune de vos configurations de GPU fournit suffisamment de processeurs virtuels et de mémoire pour le type de machine auquel vous les rattachez. Par exemple, si vous utilisez
n1-standard-32
pour vos nœuds de calcul, chaque nœud dispose de 32 processeurs virtuels et de 120 Go de mémoire. Comme chaque GPU NVIDIA Tesla V100 peut fournir jusqu'à 12 processeurs virtuels et 76 Go de mémoire, vous devez en rattacher au moins quatre à chaque nœud de calculn1-standard-32
pour répondre à ses besoins (deux GPU fournissent des ressources insuffisantes et vous ne pouvez pas spécifier trois GPU).Consultez la liste des types de machines pour AI Platform Training et le tableau de comparaison des GPU pour les tâches de calcul afin de déterminer ces compatibilités, ou consultez le tableau de compatibilité ci-après.
Notez la limite supplémentaire suivante concernant les ressources GPU pour AI Platform Training dans certains cas particuliers:
- Une configuration avec quatre GPU NVIDIA Tesla P100 n'accepte que jusqu'à 64 processeurs virtuels et jusqu'à 208 Go de mémoire dans l'ensemble des régions et zones.
Vous devez envoyer votre tâche d'entraînement à une région compatible avec la configuration de votre GPU. Pour en savoir plus, consultez la section ci-après relative aux régions compatibles.
La table suivante offre un aperçu rapide du nombre d'accélérateurs de chaque type qu'il est possible de rattacher à chaque type de machine Compute Engine :
Nombre de GPU autorisés pour chaque type de machine | ||||||
---|---|---|---|---|---|---|
Machine type (Type de machine) | NVIDIA A100 | NVIDIA Tesla K80 | NVIDIA Tesla P4 | NVIDIA Tesla P100 | NVIDIA Tesla T4 | NVIDIA Tesla V100 |
n1-standard-4 |
1, 2, 4, 8 | 1, 2, 4 | 1, 2, 4 | 1, 2, 4 | 1, 2, 4, 8 | |
n1-standard-8 |
1, 2, 4, 8 | 1, 2, 4 | 1, 2, 4 | 1, 2, 4 | 1, 2, 4, 8 | |
n1-standard-16 |
2, 4, 8 | 1, 2, 4 | 1, 2, 4 | 1, 2, 4 | 2, 4, 8 | |
n1-standard-32 |
4, 8 | 2, 4 | 2, 4 | 2, 4 | 4, 8 | |
n1-standard-64 |
4 | 4 | 8 | |||
n1-standard-96 |
4 | 4 | 8 | |||
n1-highmem-2 |
1, 2, 4, 8 | 1, 2, 4 | 1, 2, 4 | 1, 2, 4 | 1, 2, 4, 8 | |
n1-highmem-4 |
1, 2, 4, 8 | 1, 2, 4 | 1, 2, 4 | 1, 2, 4 | 1, 2, 4, 8 | |
n1-highmem-8 |
1, 2, 4, 8 | 1, 2, 4 | 1, 2, 4 | 1, 2, 4 | 1, 2, 4, 8 | |
n1-highmem-16 |
2, 4, 8 | 1, 2, 4 | 1, 2, 4 | 1, 2, 4 | 2, 4, 8 | |
n1-highmem-32 |
4, 8 | 2, 4 | 2, 4 | 2, 4 | 4, 8 | |
n1-highmem-64 |
4 | 4 | 8 | |||
n1-highmem-96 |
4 | 4 | 8 | |||
n1-highcpu-16 |
2, 4, 8 | 1, 2, 4 | 1, 2, 4 | 1, 2, 4 | 2, 4, 8 | |
n1-highcpu-32 |
4, 8 | 2, 4 | 2, 4 | 2, 4 | 4, 8 | |
n1-highcpu-64 |
8 | 4 | 4 | 4 | 8 | |
n1-highcpu-96 |
4 | 4 | 8 | |||
a2-highgpu-1g |
1 | |||||
a2-highgpu-2g |
2 | |||||
a2-highgpu-4g |
4 | |||||
a2-highgpu-8g |
8 | |||||
a2-megagpu-16g |
16 |
Vous trouverez ci-après un exemple d'envoi de tâche à l'aide de types de machines Compute Engine avec GPU rattachés.
Types de machines avec GPU inclus
Sinon, au lieu d'utiliser un acceleratorConfig
, vous pouvez sélectionner un ancien type de machine incluant des GPU :
- Définissez le niveau d'évolutivité sur
CUSTOM
. - Configurez votre nœud de calcul maître et tout autre type de tâche (nœud de calcul, serveur de paramètres ou évaluateur) que vous souhaitez accélérer pour utiliser l'un des types de machines compatibles GPU suivants, en fonction du nombre de GPU et du type d'accélérateur nécessaire pour votre tâche :
standard_gpu
: un seul GPUcomplex_model_m_gpu
: quatre GPUcomplex_model_l_gpu
: huit GPUstandard_p100
: un seul GPU NVIDIA Tesla P100complex_model_m_p100
: quatre GPU NVIDIA Tesla P100standard_v100
: un seul GPU NVIDIA Tesla V100large_model_v100
: un seul GPU NVIDIA Tesla V100complex_model_m_v100
: quatre GPU NVIDIA Tesla V100complex_model_l_v100
: huit GPU NVIDIA Tesla V100
Vous trouverez ci-dessous un exemple d'envoi de tâche avec des types de machines compatibles GPU à l'aide de la commande gcloud
.
En savoir plus sur les types de machines pour AI Platform Training
Régions compatibles avec les GPU
Vous devez exécuter votre tâche dans une région compatible avec les GPU. Les régions suivantes offrent actuellement un accès aux GPU :
us-west1
us-west2
us-central1
us-east1
us-east4
northamerica-northeast1
southamerica-east1
europe-west1
europe-west2
europe-west4
asia-south1
asia-southeast1
asia-east1
asia-northeast1
asia-northeast3
australia-southeast1
De plus, certaines de ces régions ne permettent d'accéder qu'à certains types de GPU. Pour bien comprendre quelles régions sont disponibles pour les services AI Platform Training, y compris l'entraînement de modèles et la prédiction en ligne/par lots, consultez le guide des régions.
Si votre tâche d'entraînement utilise plusieurs types de GPU, ceux-ci doivent tous être disponibles dans une même zone de votre région. Par exemple, vous ne pouvez pas exécuter une tâche dans us-central1
avec un nœud de calcul maître ayant recours à des GPU NVIDIA Tesla T4, des serveurs de paramètres utilisant des GPU NVIDIA Tesla K80 et des nœuds de calcul utilisant des GPU NVIDIA Tesla P100. Bien que tous ces GPU soient disponibles pour des tâches d'entraînement dans us-central1
, aucune zone de cette région ne fournit les trois types de GPU. Pour en savoir plus sur la disponibilité des GPU dans les différentes zones, consultez le tableau de comparaison des GPU pour les tâches de calcul.
Envoyer une tâche d'entraînement
Vous pouvez envoyer votre tâche d'entraînement à l'aide de la commande gcloud ai-platform jobs submit
training
.
Définissez un fichier
config.yaml
qui décrit les options GPU souhaitées. La structure du fichier YAML représente la ressource Tâche. Vous trouverez ci-dessous deux exemples de fichiersconfig.yaml
.Le premier exemple montre un fichier de configuration pour une tâche d'entraînement utilisant des types de machines Compute Engine, dont certains incluent des GPU :
trainingInput: scaleTier: CUSTOM # Configure a master worker with 4 T4 GPUs masterType: n1-highcpu-16 masterConfig: acceleratorConfig: count: 4 type: NVIDIA_TESLA_T4 # Configure 9 workers, each with 4 T4 GPUs workerCount: 9 workerType: n1-highcpu-16 workerConfig: acceleratorConfig: count: 4 type: NVIDIA_TESLA_T4 # Configure 3 parameter servers with no GPUs parameterServerCount: 3 parameterServerType: n1-highmem-8
L'exemple suivant montre un fichier de configuration pour une tâche avec une configuration semblable à celle ci-dessus. Toutefois, cette configuration utilise d'anciens types de machines qui incluent des GPU au lieu de rattacher des GPU avec un
acceleratorConfig
:trainingInput: scaleTier: CUSTOM # Configure a master worker with 4 GPUs masterType: complex_model_m_gpu # Configure 9 workers, each with 4 GPUs workerCount: 9 workerType: complex_model_m_gpu # Configure 3 parameter servers with no GPUs parameterServerCount: 3 parameterServerType: large_model
Exécutez la commande
gcloud
pour envoyer la tâche, y compris un argument--config
pointant vers votre fichierconfig.yaml
. L'exemple suivant suppose que vous avez configuré des variables d'environnement (indiquées par un signe$
suivi de majuscules) pour les valeurs de certains arguments :gcloud ai-platform jobs submit training $JOB_NAME \ --package-path $APP_PACKAGE_PATH \ --module-name $MAIN_APP_MODULE \ --job-dir $JOB_DIR \ --region us-central1 \ --config config.yaml \ -- \ --user_arg_1 value_1 \ ... --user_arg_n value_n
Vous pouvez également spécifier des détails de configuration du cluster avec des indicateurs de ligne de commande, plutôt que dans un fichier de configuration. Pour en savoir plus, consultez la page sur l'utilisation de ces indicateurs.
L'exemple suivant montre comment envoyer une tâche d'entraînement avec la même configuration que l'exemple précédent (en utilisant des types de machines Compute Engine avec des GPU rattachés), mais sans utiliser de fichier de configuration config.yaml
:
gcloud ai-platform jobs submit training $JOB_NAME \
--package-path $APP_PACKAGE_PATH \
--module-name $MAIN_APP_MODULE \
--job-dir $JOB_DIR \
--region us-central1 \
--scale-tier custom \
--master-machine-type n1-highcpu-16 \
--master-accelerator count=4,type=nvidia-tesla-t4 \
--worker-count 9 \
--worker-machine-type n1-highcpu-16 \
--worker-accelerator count=4,type=nvidia-tesla-t4 \
--parameter-server-count 3 \
--parameter-server-machine-type n1-highmem-8 \
-- \
--user_arg_1 value_1 \
...
--user_arg_n value_n
Notes :
- Si vous spécifiez une option à la fois dans le fichier de configuration (
config.yaml
) et en tant qu'indicateur de ligne de commande, c'est la valeur de la ligne de commande qui est retenue, celle du fichier de configuration étant ignorée. - L'indicateur vide
--
marque la fin des indicateurs propres àgcloud
et le début des argumentsUSER_ARGS
que vous souhaitez transmettre à l'application. - Les options spécifiques à AI Platform Training, telles que
--module-name
,--runtime-version
et--job-dir
, doivent figurer avant l'option vide--
. Le service AI Platform Training interprète ces options. - L'option
--job-dir
, si elle est spécifiée, doit précéder l'option--
vide, car AI Platform Training utilise l'option--job-dir
pour valider le chemin. - L'application doit également gérer l'indicateur
--job-dir
, s'il est spécifié. Même s'il est placé avant l'indicateur vide--
, l'indicateur--job-dir
est également transmis à l'application comme indicateur de ligne de commande. - Vous pouvez définir autant d'arguments
USER_ARGS
que nécessaire. AI Platform Training transmet les options--user_first_arg
,--user_second_arg
, etc. à votre application.
Pour plus de détails sur les options d'envoi de tâche, consultez le guide de démarrage d'une tâche d'entraînement.
Ajuster le code d'entraînement pour utiliser les GPU
Si vous utilisez Keras ou des Estimators pour votre tâche d'entraînement TensorFlow et que vous souhaitez réaliser l'entraînement sur une seule VM avec un seul GPU, vous n'avez pas besoin de personnaliser votre code pour le GPU.
Si votre cluster d'entraînement contient plusieurs GPU, utilisez l'API tf.distribute.Strategy
dans votre code d'entraînement:
- Pour un entraînement sur une seule VM avec plusieurs GPU, nous recommandons l'utilisation de
MirroredStrategy
, qui est entièrement compatible avec Keras dans TensorFlow 2.1 et les versions ultérieures. - Pour un entraînement sur plusieurs VM avec GPU, reportez-vous aux recommandations concernant l'entraînement distribué.
Pour personnaliser la manière dont TensorFlow attribue des opérations spécifiques aux GPU, consultez le guide TensorFlow sur l'utilisation des GPU. Dans ce cas, la page Découvrez comment AI Platform Training définit la variable d'environnement TF_CONFIG
sur chaque VM peut vous être utile.
Chaînes d'appareils GPU
Le GPU unique standard_gpu
d'une machine prend l'identifiant "/gpu:0"
.
Les machines comprenant plusieurs GPU utilisent des identifiants commençant par "/gpu:0"
, puis "/gpu:1"
, etc. Par exemple, les machines complex_model_m_gpu
possèdent quatre GPU, avec les identifiants "/gpu:0"
à "/gpu:3"
.
Packages Python sur des machines compatibles GPU
tensorflow-gpu, le package Python de TensorFlow compatible avec les GPU, est préinstallé sur les machines compatibles GPU. Consultez la liste des versions d'exécution pour obtenir une liste de tous les packages préinstallés.
Événements de maintenance
Les VM compatibles GPU qui exécutent des tâches AI Platform Training sont parfois soumises à la maintenance de l'hôte Compute Engine.
Les VM sont configurées de manière à redémarrer automatiquement après de tels événements de maintenance. Toutefois, vous devrez peut-être vous assurer que votre tâche est résiliente à ces arrêts. Configurez votre application d'entraînement de manière à enregistrer régulièrement les points de contrôle du modèle (généralement le long du chemin d'accès Cloud Storage spécifié via l'argument --job-dir
vers gcloud ai-platform jobs submit training
) et à restaurer le point de contrôle le plus récent dans le cas où un point de contrôle existe déjà.
L'API Estimators de TensorFlow effectue cela pour vous, à condition de spécifier un répertoire model_dir
.
L'API Estimators enregistre régulièrement les points de contrôle dans model_dir
et tente de se charger depuis le dernier point de contrôle. Vous n'avez donc plus à vous préoccuper des événements de maintenance de vos nœuds de calcul GPU.
Si vous effectuez l'entraînement avec Keras, utilisez le rappel ModelCheckpoint
pour enregistrer régulièrement la progression de l'entraînement. Si vous utilisez tf.distribute.Strategy
avec Keras, vos VM utilisent des points de contrôle pour récupérer automatiquement les données après les redémarrages.
Sinon, ajoutez une logique à votre code d'entraînement pour vérifier l'existence d'un point de contrôle récent et récupérer les données à partir du point de contrôle, s'il existe.
Pour les cas plus avancés, consultez le guide TensorFlow sur les points de contrôle.
Étape suivante
- Consultez la présentation du fonctionnement de l'entraînement.
- Comprenez les limites de l'utilisation simultanée de GPU.
- Consultez la page sur l'utilisation de GPU avec TensorFlow.
- Lisez un document comparant les performances et les coûts des nouveaux GPU, tels que le GPU NVIDIA Tesla T4.