Exécuter une tâche d'entraînement

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 envoyez votre tâche à l'aide de l'outil de ligne de commande gcloud, 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 l'outil de ligne de commande gcloud 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 ressource Job. Vous transmettez le chemin d'accès à votre fichier de configuration dans l'option --config de la commande gcloud ai-platform jobs submit training. Ainsi, si le chemin d'accès à votre fichier de configuration est config.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 l'outil de ligne de commande gcloud, 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 exemple 3600s), qui détermine la durée pendant laquelle votre tâche peut rester dans les états QUEUED et PREPARING. 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'état RUNNING à 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 moins 1800s (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 exemple 7200s). La durée limitée débute lorsque la tâche passe à l'état RUNNING. 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 au compte de service géré par Google 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 nomme config.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.4'
  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.4',
    '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.4"

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 arguments USER_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.

  1. 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)
    
  2. Obtenez une représentation Python des services AI Platform Training :

    cloudml = discovery.build('ml', 'v1')
    
  3. 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()
    
  4. 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