AI Platform Training propose un service asynchrone (par lot) pour l'entraînement de modèle.
Cette page décrit comment configurer et 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 à destination de projects.jobs.create.
Avant de commencer
Avant de pouvoir envoyer une tâche d'entraînement, vous devez empaqueter votre application et l'importer, avec toutes les dépendances non standards, dans un bucket Cloud Storage. Remarque : Si vous utilisez Google Cloud CLI pour envoyer votre tâche, vous pouvez empaqueter l'application et envoyer la tâche en une seule étape.
Configurer la tâche
Vous transmettez vos paramètres au service d'entraînement en définissant les membres de la ressource Job
, ce qui comprend les éléments de la ressource TrainingInput
.
Si vous utilisez Google Cloud CLI pour envoyer vos tâches d'entraînement, vous pouvez :
- spécifier les paramètres d'entraînement les plus courants en tant qu'options de la commande
gcloud ai-platform jobs submit training
; - transmettre les paramètres restants dans un fichier de configuration YAML, nommé par convention
config.yaml
. Le fichier de configuration reflète la structure de la représentation JSON de la ressourceJob
. Vous transmettez le chemin d'accès à votre fichier de configuration dans l'option--config
de la commandegcloud ai-platform jobs submit training
. Ainsi, si le chemin d'accès à votre fichier de configuration estconfig.yaml
, vous devez spécifier--config=config.yaml
.
Rassembler les données de configuration de la tâche
Pour définir votre tâche, vous utilisez les propriétés suivantes :
- Nom de la tâche (
jobId
) - Nom à utiliser pour la tâche (ne peut contenir que des lettres majuscules/minuscules, des chiffres et des traits de soulignement, et doit commencer par une lettre).
- Configuration du cluster (
scaleTier
) - Niveau d'évolutivité indiquant le type de cluster de traitement sur lequel votre tâche s'exécutera. Il peut s'agir du niveau d'évolutivité
CUSTOM
, qui vous permet également de spécifier explicitement le nombre et le type de machines à utiliser. - Configuration du disque (
diskConfig
) - Configuration du disque de démarrage pour chaque VM d'entraînement. Ce champ est facultatif. Par défaut, chaque VM s'exécute avec un disque de démarrage
pd-ssd
de 100 Go. La spécification de ce champ peut entraîner des frais supplémentaires. - Paquet d'application d'entraînement (
packageUris
) - Application d'entraînement empaquetée, stockée dans un emplacement Google Cloud Storage. Si vous utilisez Google Cloud CLI, la création du paquet d'application est en grande partie automatisée. Pour plus d'informations, consultez le guide Empaqueter une application d'entraînement.
- Nom du module (
pythonModule
) - Nom du module principal de votre paquet. Le module principal est le fichier Python que vous appelez pour lancer l'application. Si vous envoyez votre tâche à l'aide de la commande
gcloud
, spécifiez le nom du module principal via l'option--module-name
. Reportez-vous au guide Empaqueter une application d'entraînement. - Région (
region
) - Région Compute Engine dans laquelle vous souhaitez exécuter votre tâche. La tâche d'entraînement doit être exécutée dans la même région que celle où se situe le bucket Cloud Storage qui contient les données d'entraînement. Consultez la liste des régions disponibles pour les services AI Platform Training.
- Répertoire de la tâche (
jobDir
) - Chemin d'accès de l'emplacement Cloud Storage dans lequel vous souhaitez obtenir le résultat de la tâche.
La plupart des applications d'entraînement enregistrent des points de contrôle durant l'entraînement, puis enregistrent le modèle entraîné dans un fichier en fin de tâche. Vous avez besoin d'un emplacement Cloud Storage pour enregistrer ces éléments. Votre projet Google Cloud doit disposer de droits d'accès en écriture sur ce bucket. Le service d'entraînement transmet automatiquement à votre application d'entraînement le chemin d'accès que vous avez spécifié comme répertoire de la tâche via l'argument de ligne de commande
job_dir
. Vous pouvez analyser celui-ci avec les autres arguments de votre application et l'utiliser dans votre code. L'avantage du répertoire de tâche est que le service d'entraînement doit le valider avant de lancer votre application. - Version d'exécution (
runtimeVersion
) - Version d'exécution d'AI Platform Training à utiliser pour la tâche.
- Version de Python (
pythonVersion
) - Version de Python à utiliser pour la tâche. Python 3.5 est disponible avec les versions d'exécution 1.13 à 1.14. Python 3.7 est disponible avec les versions d'exécution 1.15 et ultérieures.
- Temps d'attente maximal (
scheduling.maxWaitTime
) - Durée d'attente maximale, exprimée en secondes à l'aide du suffixe
s
(par exemple3600s
), qui détermine la durée pendant laquelle votre tâche peut rester dans les étatsQUEUED
etPREPARING
. AI Platform Training ne commence pas toujours à exécuter votre tâche immédiatement en raison de contraintes de ressources. Spécifiez ce champ si vous ne souhaitez pas attendre l'exécution de la tâche plus d'une certaine durée. La durée limitée débute lorsque vous créez la tâche. Si la tâche n'est pas encore passée à l'étatRUNNING
à la fin de cette période, AI Platform Training l'annule. Ce champ est facultatif, et sa valeur par défaut correspond à une durée illimitée. Si vous spécifiez ce champ, vous devez définir la valeur sur au moins1800s
(30 minutes). - Temps d'exécution maximal (
scheduling.maxRunningTime
) - Durée d'exécution maximale de votre tâche d'entraînement, exprimée en secondes à l'aide du suffixe
s
(par exemple7200s
). La durée limitée débute lorsque la tâche passe à l'étatRUNNING
. Si la tâche est toujours en cours d'exécution après ce laps de temps, AI Platform Training l'annule. Ce champ est facultatif, et sa valeur par défaut est définie sur sept jours (604800s
). - Compte de service (
serviceAccount
) - Adresse e-mail d'un compte de service que AI Platform Training doit utiliser lors de l'exécution de votre application d'entraînement. Cela permet à votre application d'entraînement d'accéder aux ressources Google Cloud sans lui donner directement accès à l'agent de service AI Platform de votre projet. Ce champ est facultatif. Apprenez-en plus sur les conditions requises pour les comptes de service personnalisés.
Mettre en forme les paramètres de configuration
La procédure à suivre pour spécifier vos informations de configuration dépend de la manière dont vous démarrez la tâche d'entraînement :
gcloud
Transmettez les informations sur la configuration de la tâche à la commande gcloud ai-platform jobs submit training
.
Pour cela, vous avez le choix entre deux méthodes :
- utiliser des options de ligne de commande ;
- définir un fichier YAML représentant la ressource
Job
. Vous pouvez nommer ce fichier comme vous le souhaitez. Par convention, il se nommeconfig.yaml
.
Même si vous utilisez un fichier YAML, certains détails doivent être fournis sous forme d'options de ligne de commande. Par exemple, vous devez fournir l'option --module-name
et au moins l'une des deux options --package-path
ou --packages
. Si vous utilisez l'option --package-path
, vous devez également inclure --job-dir
ou --staging-bucket
.
De plus, vous devez fournir l'option --region
ou définir une région par défaut pour votre client gcloud
.
Ces valeurs, de même que toutes celles que vous fournissez sous forme d'options de ligne de commande, remplaceront les valeurs des options correspondantes dans votre fichier de configuration.
Exemple 1 : Dans cet exemple, vous choisissez un cluster de machines préconfiguré et fournissez toutes les informations requises sous forme d'indicateurs de ligne de commande lors de l'envoi de la tâche. Aucun fichier de configuration n'est nécessaire. Reportez-vous aux instructions de la section Envoyer la tâche ci-après.
Exemple 2 : L'exemple suivant vous montre le contenu du fichier de configuration d'une tâche avec un cluster de traitement personnalisé. Le fichier de configuration ne contient qu'une partie des informations de configuration, car nous partons du principe que vous fournirez les autres détails requis sous forme d'options de ligne de commande lors de l'envoi de la tâche.
trainingInput:
scaleTier: CUSTOM
masterType: complex_model_m
workerType: complex_model_m
parameterServerType: large_model
workerCount: 9
parameterServerCount: 3
runtimeVersion: '2.11'
pythonVersion: '3.7'
scheduling:
maxWaitTime: 3600s
maxRunningTime: 7200s
L'exemple précédent spécifie Python version 3.7, qui est disponible avec la version d'exécution 1.15 ou ultérieure d'AI Platform Training. Il configure également les machines virtuelles de nœud de calcul et de serveur de paramètres. Ne configurez ces machines que si vous procédez à un entraînement distribué à l'aide de TensorFlow ou de conteneurs personnalisés. En savoir plus sur les types de machines.
Python
Lorsque vous envoyez une tâche d'entraînement à l'aide de la bibliothèque cliente des API Google pour Python, vous définissez votre configuration dans un dictionnaire ayant la même structure que la ressource Job
. Il s'agira donc d'un dictionnaire présentant deux clés : jobId
et trainingInput
, dont les données respectives correspondent au nom de la tâche et à un deuxième dictionnaire, contenant des clés pour les objets dans la ressource TrainingInput
.
L'exemple suivant vous montre comment créer une représentation de la ressource Job pour une tâche dotée d'un cluster de traitement personnalisé.
training_inputs = {
'scaleTier': 'CUSTOM',
'masterType': 'complex_model_m',
'workerType': 'complex_model_m',
'parameterServerType': 'large_model',
'workerCount': 9,
'parameterServerCount': 3,
'packageUris': ['gs://my/trainer/path/package-0.0.0.tar.gz'],
'pythonModule': 'trainer.task',
'args': ['--arg1', 'value1', '--arg2', 'value2'],
'region': 'us-central1',
'jobDir': 'gs://my/training/job/directory',
'runtimeVersion': '2.11',
'pythonVersion': '3.7',
'scheduling': {'maxWaitTime': '3600s', 'maxRunningTime': '7200s'},
}
job_spec = {'jobId': 'my_job_name', 'trainingInput': training_inputs}
Notez que training_inputs
et job_spec
sont des identifiants arbitraires. Vous pouvez nommer ces dictionnaires comme vous le souhaitez. Toutefois, les clés de dictionnaire doivent être nommées exactement comme indiqué, afin de correspondre aux noms des ressources Job
et TrainingInput
.
L'exemple précédent spécifie Python version 3.7, qui est disponible avec la version d'exécution 1.15 ou ultérieure d'AI Platform Training. Il configure également les machines virtuelles de nœud de calcul et de serveur de paramètres. Ne configurez ces machines que si vous procédez à un entraînement distribué à l'aide de TensorFlow ou de conteneurs personnalisés. En savoir plus sur les types de machines.
Envoyer la tâche
Lors de l'envoi d'une tâche d'entraînement, vous spécifiez deux jeux d'options :
- Paramètres de configuration de la tâche : AI Platform Training a besoin de ces valeurs pour configurer les ressources dans le cloud et déployer votre application sur chaque nœud du cluster de traitement.
- Arguments utilisateur ou paramètres d'application : AI Platform Training transmet la valeur de ces options à votre application.
Créer votre tâche :
gcloud
Envoyez une tâche d'entraînement à l'aide de la commande gcloud ai-platform jobs submit training
.
Tout d'abord, il est utile de définir des variables d'environnement contenant vos informations de configuration. Afin que vous puissiez créer un nom de tâche, le code suivant ajoute la date et l'heure au nom du modèle :
PACKAGE_PATH="/path/to/your/application/sources"
now=$(date +"%Y%m%d_%H%M%S")
JOB_NAME="your_name_$now"
MODULE_NAME="trainer.task"
JOB_DIR="gs://your/chosen/job/output/path"
REGION="us-east1"
RUNTIME_VERSION="2.11"
La commande d'envoi de tâche suivante correspond à l'exemple 1 de configuration ci-dessus, dans lequel vous choisissez un niveau d'évolutivité préconfiguré (basic
) et décidez de fournir tous les détails de configuration via des options de ligne de commande. Un fichier config.yaml
n'est pas nécessaire :
gcloud ai-platform jobs submit training $JOB_NAME \
--scale-tier basic \
--package-path $PACKAGE_PATH \
--module-name $MODULE_NAME \
--job-dir $JOB_DIR \
--region $REGION \
-- \
--user_first_arg=first_arg_value \
--user_second_arg=second_arg_value
La commande d'envoi de tâche suivante correspond au second exemple de configuration ci-dessus, dans lequel vous ne spécifiez qu'une partie des informations de configuration dans le fichier et fournissez les autres détails via des options de ligne de commande :
gcloud ai-platform jobs submit training $JOB_NAME \
--package-path $PACKAGE_PATH \
--module-name $MODULE_NAME \
--job-dir $JOB_DIR \
--region $REGION \
--config config.yaml \
-- \
--user_first_arg=first_arg_value \
--user_second_arg=second_arg_value
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.
Python
Vous pouvez utiliser la bibliothèque cliente des API Google pour Python pour l'API AI Platform Training and Prediction, sans avoir à créer manuellement de requêtes HTTP. Avant d'exécuter l'exemple de code suivant, vous devez configurer l'authentification.
Enregistrez l'ID de votre projet au format requis par les API ("projects/_projectname") :
project_name = 'my_project_name' project_id = 'projects/{}'.format(project_name)
Obtenez une représentation Python des services AI Platform Training :
cloudml = discovery.build('ml', 'v1')
Formulez votre requête, puis envoyez-la. Notez que
job_spec
a été créé à l'étape précédente, lorsque vous avez mis en forme les paramètres de configuration.request = cloudml.projects().jobs().create(body=job_spec, parent=project_id) response = request.execute()
Relevez les éventuelles erreurs HTTP. Le moyen le plus simple consiste à placer la commande précédente dans un bloc
try
:try: response = request.execute() # You can put your code for handling success (if any) here. except errors.HttpError, err: # Do whatever error response is appropriate for your application. # For this example, just send some text to the logs. # You need to import logging for this to work. logging.error('There was an error creating the training job.' ' Check the details:') logging.error(err._get_reason())
Étape suivante
- Surveillez ou visualisez votre tâche d'apprentissage en cours d'exécution.
- Obtenez plus d'informations sur la spécification des types de machines.
- Découvrez comment configurer une tâche de réglage d'hyperparamètres.
- Préparez-vous à déployer votre modèle entraîné pour la prédiction.