Utilisez AI Platform Training pour exécuter vos applications d'entraînement TensorFlow, scikit-learn et XGBoost dans le cloud. AI Platform Training fournit dans ses versions d'exécution les dépendances dont vous aurez besoin pour entraîner les modèles de machine learning utilisant ces frameworks hébergés. De plus, vous pouvez utiliser des conteneurs personnalisés pour exécuter des tâches d'entraînement avec d'autres infrastructures de machine learning. Cette page décrit les concepts clés d'AI Platform Training. Si vous préférez vous lancer directement dans le processus d'entraînement, découvrez comment démarrer une tâche d'entraînement.
Fonctionnement de l'entraînement
AI Platform Training exécute la tâche d'entraînement sur les ressources de calcul présentes dans le cloud. Vous pouvez entraîner un algorithme intégré (bêta) sur la base de votre ensemble de données sans avoir à écrire une application d'entraînement. Si les algorithmes intégrés ne correspondent pas à votre cas d'utilisation, vous pouvez créer une application d'entraînement à exécuter sur AI Platform Training.
Voici une présentation du processus d'utilisation de votre application d'entraînement :
- Vous créez une application Python qui entraîne votre modèle comme vous le feriez localement dans votre environnement de développement.
- Vous générez des données d'entraînement et de validation dans une source à laquelle AI Platform Training peut accéder. Cela implique généralement de les placer dans Cloud Storage, Bigtable ou un autre service de stockage Google Cloud associé au même projet Google Cloud que celui utilisé pour AI Platform Training.
- Lorsque votre application est prête à être exécutée, vous devez l'empaqueter et la transférer dans un bucket Cloud Storage auquel votre projet peut accéder. Si vous utilisez Google Cloud CLI pour exécuter une tâche d'entraînement, cette opération est automatisée.
- Le service d'entraînement AI Platform Training configure des ressources pour votre tâche. Il attribue une ou plusieurs machines virtuelles (appelées instances d'entraînement) en fonction de la configuration de votre tâche. Chaque instance d'entraînement est configurée comme suit :
- Application de l'image de machine standard de la version d'AI Platform Training utilisée par votre tâche.
- Chargement de votre package d'application et installation à l'aide de
pip
. - Installation des packages supplémentaires que vous indiquez comme dépendances
- Le service d'entraînement exécute votre application en envoyant tous les arguments de ligne de commande que vous spécifiez lors de la création de la tâche d'entraînement.
- Vous pouvez obtenir des informations sur la tâche en cours de différentes manières :
- Dans Cloud Logging.
- En demandant des informations sur la tâche ou en exécutant le flux de journal à l'aide de l'outil de ligne de commande
gcloud
. - En programmant des demandes d'état au service d'entraînement
- Lorsque votre tâche d'entraînement réussit ou rencontre une erreur irrécupérable, AI Platform Training interrompt tous les processus de la tâche, puis effectue un nettoyage des ressources.
Application de machine learning type
Le service d'entraînement AI Platform Training est conçu pour avoir le moins d'impact possible sur votre application. Ainsi, vous pouvez vous concentrer sur le code de votre modèle.
La plupart des applications de machine learning :
- proposent un moyen d'obtenir des données d'entraînement et d'évaluation ;
- traitent des instances de données ;
- testent la justesse du modèle à l'aide de données d'évaluation (pour savoir à quelle fréquence il prédit la bonne valeur) ;
- offrent le moyen de générer des points de contrôle à intervalles réguliers au cours du processus, pour obtenir des instantanés de la progression du modèle (pour les applications d'entraînement TensorFlow) ;
- proposent un moyen d'exporter le modèle entraîné une fois l'exécution de l'application terminée.
Structure d'entraînement distribué
Si vous exécutez une tâche Tensorflow distribuée avec AI Platform Training, vous indiquez plusieurs machines (nœuds) dans un cluster d'entraînement. Le service d'entraînement alloue les ressources pour les types de machines que vous spécifiez. La tâche en exécution sur un nœud spécifique s'appelle une instance dupliquée. Conformément au modèle TensorFlow distribué, chaque instance dupliquée du cluster d'entraînement se voit attribuer un rôle ou une tâche unique dans l'entraînement distribué :
Maître : une instance dupliquée est désignée comme nœud de calcul maître. Cette tâche gère les autres instances et consigne l'état de la tâche dans sa globalité. Le service d'entraînement s'exécute jusqu'à ce que la tâche réussisse ou rencontre une erreur irrécupérable. Dans le cas d'un entraînement distribué, l'état de l'instance dupliquée maître indique l'état général de la tâche.
Si vous exécutez une tâche à un seul processus, seule l'instance dupliquée est maître de la tâche.
Nœuds de calcul : une ou plusieurs instances dupliquées peuvent être désignées comme nœuds de calcul. Ces instances dupliquées exécutent ce qui leur incombe conformément à la configuration de la tâche.
Serveurs de paramètres : une ou plusieurs instances dupliquées peuvent être désignées comme serveurs de paramètres. Ces instances dupliquées coordonnent l'état du modèle partagé entre les nœuds de calcul.
Stratégies d'entraînement distribuées
Il existe trois stratégies de base pour entraîner un modèle comportant plusieurs nœuds :
- Apprentissage avec parallélisme des données et mises à jour synchrones
- Apprentissage avec parallélisme des données et mises à jour asynchrones
- Apprentissage avec parallélisme des modèles
Étant donné que vous pouvez appliquer la stratégie de parallélisme des données indépendamment de la structure du modèle, il s'agit d'un bon moyen d'appliquer la méthode d'apprentissage distribué à votre modèle personnalisé. Dans le cadre de l'apprentissage avec parallélisme des données, l'ensemble du modèle est partagé avec tous les nœuds de calcul. Chaque nœud calcule les vecteurs de gradients indépendamment d'une partie de l'ensemble des données d'apprentissage, de manière identique au traitement par mini-lots. Les vecteurs de gradient calculés sont enregistrés dans le nœud de serveur de paramètres, et les paramètres du modèle sont mis à jour avec la somme totale des vecteurs de gradient. Si vous répartissez 10 000 lots entre 10 nœuds de calcul, chaque nœud traite environ 1 000 lots.
L'apprentissage avec parallélisme des données peut être effectué au moyen de mises à jour synchrones ou asynchrones. Lors des mises à jour asynchrones, le serveur de paramètres applique chaque vecteur de gradient indépendamment, tout de suite après l'avoir reçu de l'un des nœuds de calcul, comme le montre le schéma suivant :
Pour savoir comment effectuer un entraînement distribué avec parallélisme des données, consultez la documentation relative aux stratégies MultiWorkerMirroredStrategy
et ParameterServerStrategy
de TensorFlow.
Apprenez ensuite à configurer un entraînement distribué dans AI Platform Training.
Pour en savoir plus sur l'entraînement avec parallélisme des modèles, consultez la documentation sur Mesh TensorFlow.
Empaqueter votre application
Avant de pouvoir exécuter votre application d'entraînement sur AI Platform Training, vous devez empaqueter votre application et ses dépendances. Vous devez ensuite importer ce package dans un bucket Cloud Storage auquel votre projet Google Cloud peut accéder.
Google Cloud CLI automatise une grande partie du processus. Plus précisément, vous pouvez exécuter la commande gcloud ai-platform jobs submit training
pour importer votre package d'application et envoyer votre tâche d'entraînement.
Consultez les instructions détaillées relatives à l'empaquetage d'une application d'apprentissage.
Envoyer votre tâche d'apprentissage
AI Platform Training propose un service asynchrone (par lot) pour l'entraînement de modèle.
Vous pouvez envoyer une tâche d'entraînement en exécutant la commande gcloud ai-platform jobs submit training
à partir de la ligne de commande ou en envoyant une requête à l'API vers projects.jobs.create.
Consultez les instructions détaillées relatives au démarrage d'une tâche d'entraînement.
ID de tâche
Vous devez donner à votre tâche d'apprentissage un nom qui respecte les règles suivantes :
- Le nom doit être unique dans votre projet Google Cloud.
- Il ne peut contenir que des lettres, des chiffres et des traits de soulignement.
- Il doit commencer par une lettre.
- Il ne doit pas dépasser 128 caractères.
Vous pouvez suivre la convention de dénomination de tâche de votre choix. Si vous n'exécutez pas beaucoup de tâches, le nom que vous choisissez n'est pas très important. Si vous en exécutez beaucoup, vous devez être en mesure de retrouver votre ID de tâche parmi de longues listes. Il est recommandé de différencier vos ID de tâche les uns des autres.
Une technique courante consiste à définir un nom de base pour toutes les tâches associées à un modèle spécifique, puis à ajouter une chaîne de type date/heure. Cette convention facilite le tri des listes de tâches par nom, car toutes les tâches d'un modèle sont dès lors regroupées par ordre croissant.
Niveaux d'évolutivité
Lorsque vous exécutez une tâche d'entraînement sur AI Platform Training, vous devez spécifier le nombre et les types de machines dont vous avez besoin. Pour faciliter le processus, vous pouvez choisir parmi un ensemble de spécifications de cluster prédéfinies, appelées niveaux d'évolutivité. Vous pouvez également choisir un niveau personnalisé et spécifier vous-même les types de machines.
Pour indiquer un niveau d'évolutivité, ajoutez-le à l'objet TrainingInput dans la configuration de votre tâche. Si vous exécutez la commande gcloud
pour envoyer votre tâche d'entraînement, vous pouvez utiliser les mêmes identifiants.
Consultez des définitions détaillées des niveaux d'évolutivité et types de machines.
Réglages d'hyperparamètres
Si vous souhaitez utiliser le réglage d'hyperparamètres, vous devez inclure des détails de configuration lors de la création de la tâche d'apprentissage. Consultez le guide conceptuel sur le réglage d'hyperparamètres et apprenez à utiliser ce réglage.
Régions et zones
Google Cloud définit l'emplacement géographique des ressources de calcul physiques à l'aide de régions subdivisées en zones. Lorsque vous exécutez une tâche d'entraînement sur AI Platform Training, vous spécifiez la région dans laquelle vous souhaitez l'exécuter.
Si vous stockez votre ensemble de données d'entraînement sur Cloud Storage, vous devez exécuter votre tâche d'entraînement dans la même région que le bucket Cloud Storage utilisé. Si vous devez exécuter votre tâche dans une région différente de celle de votre bucket de données, elle risque de prendre plus de temps.
Pour consulter les régions disponibles pour les services AI Platform Training, y compris l'entraînement de modèles et la prédiction en ligne ou par lot, consultez le guide des régions.
Utilisation de la commande job-dir comme répertoire de sortie commun
Vous pouvez spécifier le répertoire de sortie de votre tâche en définissant un répertoire pour la tâche au moment de sa configuration. Lorsque vous envoyez la tâche, AI Platform Training effectue les opérations suivantes :
- Il valide le répertoire afin que vous puissiez résoudre les problèmes éventuels avant l'exécution de la tâche.
- Transmet le chemin d'accès à votre application en tant qu'argument de ligne de commande nommé
--job-dir
.
Vous devez tenir compte de l'argument --job-dir
dans votre application.
Capturez la valeur de l'argument lorsque vous analysez les autres paramètres et utilisez-la lors de l'enregistrement de la sortie de votre application. Consultez le guide pour démarrer une tâche d'entraînement.
Version d'exécution
Pour procéder à un entraînement avec l'un des frameworks de machine learning hébergés d'AI Platform Training, spécifiez une version d'exécution AI Platform Training compatible avec votre tâche d'entraînement. Cette version indique les versions de TensorFlow, scikit-learn ou XGBoost et des autres packages Python installés sur vos instances d'entraînement allouées. Spécifiez une version qui vous donne accès aux fonctionnalités dont vous avez besoin. Si vous exécutez le job d'entraînement localement ainsi que dans le cloud, assurez-vous que les jobs en local et sur le cloud utilisent la même version d'exécution.
Données d'entrée
Les données que vous pouvez utiliser dans votre tâche d'entraînement doivent respecter les règles suivantes pour être exécutées dans AI Platform Training :
- Les données doivent être dans un format que vous pouvez lire et associer à votre code d'entraînement.
- Les données doivent être à un emplacement auquel votre code peut accéder. Cela signifie généralement qu'elles doivent être stockées avec l'un des services Google Cloud Storage ou Big Data.
Données de sortie
Les applications génèrent régulièrement des données de sortie : des points de contrôle pendant l'apprentissage et un modèle enregistré lorsque l'apprentissage est terminé. Vous pouvez générer d'autres données selon vos besoins. Il est plus facile d'enregistrer vos fichiers de sortie dans un bucket Cloud Storage dans le même projet Google Cloud que votre tâche d'entraînement.
Créer de tâches d'entraînement résilientes aux redémarrages des machines virtuelles
Les VM Google Cloud redémarrent occasionnellement. Pour vous assurer que votre tâche d'entraînement est résiliente à ces redémarrages, enregistrez régulièrement des points de contrôle pour le modèle et configurez votre tâche de sorte qu'elle restaure le dernier point de contrôle.
Vous enregistrez généralement les points de contrôle du modèle au chemin d'accès Cloud Storage que vous spécifiez avec l'argument --job-dir
dans la commande gcloud ai-platform jobs submit
training
.
L'API Estimator TensorFlow effectue cela pour vous. Ainsi, si votre modèle est déjà inclus dans une instance Estimator, vous n'avez pas à vous soucier des événements de redémarrage de vos VM.
Si vous ne parvenez pas à intégrer votre modèle dans un Estimator TensorFlow, écrivez la fonctionnalité permettant d'enregistrer et de restaurer les points de contrôle dans votre code d'entraînement. TensorFlow fournit les ressources utiles suivantes dans le module tf.train :
Entraînement à l'aide de GPU
Vous pouvez exécuter vos tâches d'entraînement sur AI Platform Training en utilisant des unités de traitement graphique (GPU). Les GPU sont conçues pour effectuer des opérations intensives de mathématiques à haute vitesse. Elles peuvent être plus efficaces pour exécuter certaines opérations sur des données de Tensor que d'ajouter une autre machine avec un ou plusieurs cœurs de processeur.
Le service d'entraînement AI Platform Training ne fournit pas d'interface spécifique pour travailler avec les GPU. Vous pouvez spécifier des machines compatibles GPU pour l'exécution de votre tâche, et le service les alloue à votre place. Dans une tâche d'entraînement TensorFlow par exemple, vous pouvez affecter les opérations TensorFlow aux GPU dans votre code. Lorsque vous spécifiez un type de machine avec un accès GPU pour un type de tâche spécifique, chaque instance attribuée à ce type de tâche est configurée de manière identique (comme toujours) : le service exécute une instance dupliquée unique de votre code sur chaque machine.
Si vous effectuez l'entraînement avec un framework de machine learning différent qui utilise des conteneurs personnalisés, ce framework est susceptible de proposer une interface d'utilisation des GPU différente.
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'apprentissage d'un petit nombre de données.
Découvrez comment utiliser des GPU pour votre tâche d'entraînement.
Réaliser un entraînement à l'aide de TPU
Vous pouvez exécuter vos tâches d'entraînement sur AI Platform Training en utilisant Cloud TPU.
Découvrez comment utiliser des TPU pour votre tâche d'apprentissage.