Spécifier des types de machines ou des 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.

Spécifier votre configuration

La manière dont vous spécifiez la configuration d'un cluster dépend de la manière dont vous envisagez d'exécuter la tâche d'entraînement :

gcloud

Créez un fichier de configuration YAML représentant l'objet TrainingInput, puis spécifiez l'identifiant de niveau d'évolutivité et les types de machines dans le fichier de configuration. Vous pouvez nommer ce fichier comme vous le souhaitez. Par convention, il se nomme config.yaml.

L'exemple suivant vous montre le contenu du fichier de configuration config.yaml pour une tâche dotée d'un cluster de traitement personnalisé.

trainingInput:
  scaleTier: CUSTOM
  masterType: n1-highcpu-16
  workerType: n1-highcpu-16
  parameterServerType: n1-highmem-8
  evaluatorType: n1-highcpu-16
  workerCount: 9
  parameterServerCount: 3
  evaluatorCount: 1

Indiquez le chemin d'accès au fichier YAML dans l'indicateur --config lors de l'exécution de la commande gcloud ai-platform jobs submit training :

gcloud ai-platform jobs submit training $JOB_NAME \
        --package-path $TRAINER_PACKAGE_PATH \
        --module-name $MAIN_TRAINER_MODULE \
        --job-dir $JOB_DIR \
        --region $REGION \
        --config config.yaml \ 
        -- \
        --user_first_arg=first_arg_value \
        --user_second_arg=second_arg_value

Vous pouvez également spécifier les détails de la configuration du cluster à l'aide d'indicateurs de ligne de commande, plutôt que dans un fichier de configuration. Pour en savoir plus, consultez la documentation sur l'utilisation de ces indicateurs.

L'exemple suivant montre comment envoyer une tâche d'entraînement avec une configuration semblable à celle de l'exemple précédent, mais sans utiliser de fichier de configuration :

gcloud ai-platform jobs submit training $JOB_NAME \
        --package-path $TRAINER_PACKAGE_PATH \
        --module-name $MAIN_TRAINER_MODULE \
        --job-dir $JOB_DIR \
        --region $REGION \
        --scale-tier custom \
        --master-machine-type n1-highcpu-16 \
        --worker-machine-type n1-highcpu-16 \
        --parameter-server-machine-type n1-highmem-8 \
        --worker-count 9 \
        --parameter-server-count 3 \
        -- \
        --user_first_arg=first_arg_value \
        --user_second_arg=second_arg_value

Consultez des détails supplémentaires sur l'exécution d'une tâche d'entraînement.

Python

Spécifiez l'identifiant de niveau d'évolutivité et les types de machines dans l'objet TrainingInput de la configuration de votre tâche.

L'exemple suivant vous montre comment créer une représentation de la ressource "Job" (Tâche) pour une tâche avec un cluster de traitement personnalisé.

training_inputs = {'scaleTier': 'CUSTOM',
    'masterType': 'n1-highcpu-16',
    'workerType': 'n1-highcpu-16',
    'parameterServerType': 'n1-highmem-8',
    'evaluatorType': 'n1-highcpu-16',
    'workerCount': 9,
    'parameterServerCount': 3,
    'evaluatorCount': 1,
    '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'}

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.

Niveaux d'évolutivité

Nous pouvons être amenés à optimiser la configuration des niveaux d'évolutivité pour différentes tâches au fil du temps, en fonction des commentaires des clients et de la disponibilité des ressources dans le cloud. Chaque niveau d'évolutivité est défini en fonction de sa pertinence pour certains types de tâches. Généralement, plus le niveau d'évolutivité est élevé, plus le nombre de machines attribuées au cluster est important et plus les spécifications de chaque machine virtuelle sont performantes. À mesure que le niveau d'évolutivité augmente, le coût horaire des tâches d'entraînement, mesuré en unités d'entraînement, est également plus élevé. Consultez la page des tarifs pour calculer le coût de votre tâche.

AI Platform Training n'accepte ni l'entraînement distribué, ni l'entraînement avec des accélérateurs pour le code scikit-learn ou XGBoost. Si votre tâche d'entraînement exécute du code scikit-learn ou XGBoost, vous devez définir le niveau d'évolutivité BASIC ou CUSTOM.

Vous trouverez ci-dessous les identifiants de niveau d'évolutivité :

Niveau d'évolutivité sur AI Platform Training
BASIC

Une seule instance de nœud de calcul. Ce niveau convient à la découverte d'AI Platform Training et au test de nouveaux modèles à l'aide de petits ensembles de données.

Nom de la machine Compute Engine : n1-standard-4

STANDARD_1

Une instance maître, ainsi que quatre nœuds de calcul et trois serveurs de paramètres. N'utilisez ce niveau d'évolutivité que si vous effectuez l'entraînement avec TensorFlow ou des conteneurs personnalisés.

Nom de la machine Compute Engine, maître : n1-highcpu-8, nœuds de calcul : n1-highcpu-8, serveurs de paramètres : n1-standard-4

PREMIUM_1

Une instance maître, ainsi que 19 nœuds de calcul et 11 serveurs de paramètres. N'utilisez ce niveau d'évolutivité que si vous effectuez l'entraînement avec TensorFlow ou des conteneurs personnalisés.

Nom de la machine Compute Engine, maître : n1-highcpu-16, nœuds de calcul : n1-highcpu-16, serveurs de paramètres : n1-highmem-8

BASIC_GPU

Une instance de nœud de calcul unique avec un seul GPU NVIDIA Tesla K80. Pour en savoir plus sur les unités de traitement graphique (GPU), consultez la section Réaliser un entraînement à l'aide de GPU et de TPU. N'utilisez ce niveau d'évolutivité que si vous effectuez l'entraînement avec TensorFlow ou un conteneur personnalisé.

Nom de la machine Compute Engine : n1-standard-8 avec un GPU K80

BASIC_TPU

Une VM maître et un Cloud TPU avec huit cœurs TPU v2. Découvrez comment utiliser des TPU pour votre tâche d'entraînement. N'utilisez ce niveau d'évolutivité que si vous effectuez l'entraînement avec TensorFlow ou des conteneurs personnalisés.

Nom de la machine Compute Engine, maître:n1-standard-4, nœuds de calcul:Cloud TPU (8 cœurs TPU v2)

CUSTOM

Le niveau CUSTOM n'est pas un niveau défini, mais vous permet d'appliquer votre propre spécification de cluster. Lorsque vous utilisez ce niveau, définissez des valeurs pour configurer votre cluster de traitement conformément aux instructions suivantes :

  • Vous devez définir TrainingInput.masterType pour spécifier le type de machines à utiliser pour votre nœud de calcul maître. Il s'agit du seul paramètre obligatoire. Reportez-vous aux types de machines décrits ci-dessous.
  • Vous pouvez définir TrainingInput.workerCount pour spécifier le nombre de nœuds de calcul à utiliser. Si vous spécifiez un ou plusieurs nœuds de calcul, vous devez également définir TrainingInput.workerType pour spécifier le type de machines à utiliser pour vos nœuds de calcul. Spécifiez des nœuds de calcul uniquement pour l'entraînement avec TensorFlow ou pour l'utilisation de conteneurs personnalisés.
  • Vous pouvez définir TrainingInput.parameterServerCount pour spécifier le nombre de serveurs de paramètres à utiliser. Si vous spécifiez un ou plusieurs serveurs de paramètres, vous devez également définir TrainingInput.parameterServerType pour spécifier le type de machines à utiliser pour vos serveurs de paramètres. N'indiquez le nombre de serveurs de paramètres que si vous effectuez l'entraînement avec TensorFlow ou des conteneurs personnalisés.
  • Vous pouvez définir TrainingInput.evaluatorCount pour spécifier le nombre d'évaluateurs à utiliser. Si vous spécifiez un ou plusieurs évaluateurs, vous devez également définir TrainingInput.evaluatorType, le type de machine à utiliser pour vos évaluateurs. Spécifiez des évaluateurs seulement si vous effectuez l'entraînement avec TensorFlow ou si vous utilisez des conteneurs personnalisés.

Types de machines pour le niveau d'évolutivité personnalisé

Choisissez un niveau d'évolutivité personnalisé pour un contrôle plus précis du cluster de traitement utilisé pour entraîner le modèle. Spécifiez la configuration dans l'objet TrainingInput de la configuration de votre tâche. Si vous utilisez la commande gcloud ai-platform jobs submit training pour envoyer votre tâche d'entraînement, vous pouvez utiliser les mêmes identifiants.

  • Définissez le niveau d'évolutivité (scaleTier) sur CUSTOM.

  • Définissez des valeurs pour le nombre de nœuds de calcul (workerCount), de serveurs de paramètres (parameterServerCount) et d'évaluateurs (evaluatorCount) dont vous avez besoin.

    AI Platform Training n'accepte que l'entraînement distribué lorsque vous effectuez l'entraînement avec TensorFlow ou un conteneur personnalisé. Si votre tâche d'entraînement exécute du code scikit-learn ou XGBoost, ne spécifiez pas de nœuds de calcul, de serveurs de paramètres ni d'évaluateurs.

  • Définissez le type de machine du nœud de calcul maître (masterType). Si vous avez choisi d'utiliser des nœuds de calcul, des serveurs de paramètres ou des évaluateurs, définissez les types de machines correspondants dans les champs workerType, parameterServerType et evaluatorType respectivement.

    Vous pouvez spécifier différents types de machines pour les champs masterType, workerType et parameterServerType et evaluatorType, mais vous ne pouvez pas utiliser différents types de machines pour des instances individuelles. Par exemple, vous pouvez utiliser un type de machine n1-highmem-8 pour vos serveurs de paramètres, mais pas le type de machine n1-highmem-8 pour certains et le type n1-highcpu-16 pour d'autres.

  • Si vous avez besoin d'un seul nœud de calcul avec une configuration personnalisée (et non d'un cluster complet), vous devez spécifier un niveau d'évolutivité personnalisé avec un type de machine pour le maître uniquement. Cela vous donne un seul nœud de calcul. Voici un exemple de fichier config.yaml :

    trainingInput:
      scaleTier: CUSTOM
      masterType: n1-highcpu-16
    

Types de machines Compute Engine

Vous pouvez utiliser les noms de certains types de machines Compute Engine prédéfinis dans les champs masterType, workerType, parameterServerType et evaluatorType de votre tâche. Si vous effectuez l'entraînement avec TensorFlow ou des conteneurs personnalisés, vous pouvez éventuellement utiliser différents types de GPU avec ces types de machines.

La liste suivante contient les identifiants des types de machines Compute Engine que vous pouvez utiliser pour votre tâche d'entraînement :

  • e2-standard-4
  • e2-standard-8
  • e2-standard-16
  • e2-standard-32
  • e2-highmem-2
  • e2-highmem-4
  • e2-highmem-8
  • e2-highmem-16
  • e2-highcpu-16
  • e2-highcpu-32
  • n2-standard-4
  • n2-standard-8
  • n2-standard-16
  • n2-standard-32
  • n2-standard-48
  • n2-standard-64
  • n2-standard-80
  • n2-highmem-2
  • n2-highmem-4
  • n2-highmem-8
  • n2-highmem-16
  • n2-highmem-32
  • n2-highmem-48
  • n2-highmem-64
  • n2-highmem-80
  • n2-highcpu-16
  • n2-highcpu-32
  • n2-highcpu-48
  • n2-highcpu-64
  • n2-highcpu-80
  • n1-standard-4
  • n1-standard-8
  • n1-standard-16
  • n1-standard-32
  • n1-standard-64
  • n1-standard-96
  • n1-highmem-2
  • n1-highmem-4
  • n1-highmem-8
  • n1-highmem-16
  • n1-highmem-32
  • n1-highmem-64
  • n1-highmem-96
  • n1-highcpu-16
  • n1-highcpu-32
  • n1-highcpu-64
  • n1-highcpu-96
  • c2-standard-4
  • c2-standard-8
  • c2-standard-16
  • c2-standard-30
  • c2-standard-60
  • m1-ultramem-40
  • m1-ultramem-80
  • m1-ultramem-160
  • m1-megamem-96
  • a2-highgpu-1g* (preview)
  • a2-highgpu-2g* (preview)
  • a2-highgpu-4g* (preview)
  • a2-highgpu-8g* (preview)
  • a2-megagpu-16g* (preview)

Pour en savoir plus sur les caractéristiques techniques de chaque type de machine, consultez la documentation de Compute Engine sur les types de machines.

Anciens types de machines

Au lieu d'utiliser des types de machines Compute Engine pour votre tâche, vous pouvez spécifier les noms d'anciens types de machines. Ces types de machines fournissent le même vCPU et les mêmes ressources de mémoire que les types de machines Compute Engine équivalents, mais présentent des limites de configuration supplémentaires :

  • Vous ne pouvez pas personnaliser l'utilisation du GPU avec acceleratorConfig. Cependant, certains anciens types de machines incluent des GPU. Consultez le tableau ci-dessous pour en savoir plus.

  • Si la configuration de votre tâche d'entraînement utilise plusieurs machines, vous ne pouvez pas mélanger des types de machines Compute Engine avec d'anciens types de machines. Le nœud de calcul maître, les nœuds de calcul, les serveurs de paramètres et les évaluateurs doivent tous utiliser les types de machines d'un même groupe.

    Par exemple, si vous configurez masterType avec n1-highcpu-32 (un type de machine Compute Engine), vous ne pouvez pas définir le champ workerType sur complex_model_m (ancien type de machine), mais vous pouvez le définir sur n1-highcpu-16 (un autre type de machine Compute Engine).

Le tableau suivant décrit les anciens types de machines :

Anciens types de machines
standard

Configuration de machine de base adaptée à l'entraînement de modèles simples avec des ensembles de données de petite à moyenne taille.

Nom de la machine Compute Engine : n1-standard-4

large_model

Machine contenant beaucoup de mémoire et spécialement adaptée aux serveurs de paramètres des modèles volumineux (comportant de nombreuses couches cachées ou des couches avec un très grand nombre de nœuds).

Nom de la machine Compute Engine : n1-highmem-8

complex_model_s

Machine adaptée au maître et aux nœuds de calcul du cluster lorsque votre modèle nécessite plus de calculs que ce que la machine standard pourrait correctement gérer.

Nom de la machine Compute Engine : n1-highcpu-8

complex_model_m

Machine disposant d'environ deux fois le nombre de noyaux et le volume de mémoire de "complex_model_s".

Nom de la machine Compute Engine : n1-highcpu-16

complex_model_l

Machine disposant d'environ deux fois le nombre de noyaux et le volume de mémoire de "complex_model_m".

Nom de la machine Compute Engine : n1-highcpu-32

standard_gpu

Machine équivalente au modèle standard, comprenant également un seul GPU NVIDIA Tesla K80. N'utilisez ce type de machine que si vous effectuez l'entraînement avec TensorFlow ou des conteneurs personnalisés.

Nom de la machine Compute Engine : n1-standard-8 avec un GPU K80

complex_model_m_gpu

Machine équivalente à "complex_model_m", comprenant également quatre GPU NVIDIA Tesla K80. N'utilisez ce type de machines que si vous effectuez l'entraînement avec TensorFlow ou des conteneurs personnalisés.

Nom de la machine Compute Engine : n1-standard-16-k80x4

complex_model_l_gpu

Machine équivalente à "complex_model_l", comprenant également huit GPU NVIDIA Tesla K80. N'utilisez ce type de machines que si vous effectuez l'entraînement avec TensorFlow ou des conteneurs personnalisés.

Nom de la machine Compute Engine : n1-standard-32-k80x8

standard_p100

Machine équivalente au modèle standard, comprenant également un seul GPU NVIDIA Tesla P100. N'utilisez ce type de machine que si vous effectuez l'entraînement avec TensorFlow ou des conteneurs personnalisés.

Nom de la machine Compute Engine : n1-standard-8-p100x1

complex_model_m_p100

Machine équivalente à "complex_model_m", comprenant également quatre GPU NVIDIA Tesla P100 N'utilisez ce type de machines que si vous effectuez l'entraînement avec TensorFlow ou des conteneurs personnalisés.

Nom de la machine Compute Engine : n1-standard-16-p100x4

standard_v100

Machine équivalente au modèle standard, comprenant également un seul GPU NVIDIA Tesla V100. N'utilisez ce type de machine que si vous effectuez l'entraînement avec TensorFlow ou des conteneurs personnalisés.

Nom de la machine Compute Engine : n1-standard-8-v100x1

large_model_v100

Machine équivalente à "large_model", comprenant également un seul GPU NVIDIA Tesla V100. N'utilisez ce type de machine que si vous effectuez l'entraînement avec TensorFlow ou des conteneurs personnalisés.

Nom de la machine Compute Engine : n1-highmem-8-v100x1

complex_model_m_v100

Machine équivalente à "complex_model_m", comprenant également quatre GPU NVIDIA Tesla V100. N'utilisez ce type de machines que si vous effectuez l'entraînement avec TensorFlow ou des conteneurs personnalisés.

Nom de la machine Compute Engine : n1-standard-16-v100x4

complex_model_l_v100

Machine équivalente à "complex_model_l", comprenant également huit GPU NVIDIA Tesla V100. N'utilisez ce type de machines que si vous effectuez l'entraînement avec TensorFlow ou des conteneurs personnalisés.

Nom de la machine Compute Engine : n1-standard-32-v100x8

Réaliser un entraînement à l'aide de GPU et de TPU

Certains niveaux d'évolutivité et d'anciens types de machines incluent des unités de traitement graphique (GPU). Vous pouvez également associer plusieurs GPU de votre choix si vous utilisez un type de machines Compute Engine. Pour en savoir plus, consultez la documentation sur l'entraînement à l'aide de GPU.

Pour effectuer un entraînement avec Tensor Processing Units (TPU), vous devez utiliser le niveau d'évolutivité BASIC_TPU ou le type de machines cloud_tpu. Le type de machines cloud_tpu possède des options de configuration spéciales. Vous pouvez l'utiliser avec des types de machines Compute Engine ou avec d'anciens types de machines, et avec 8 TPU v2 ou 8 TPU v3. Découvrez comment utiliser des TPU pour l'entraînement.

Étapes suivantes