Choisir un type de machine pour les prédictions en ligne

AI Platform Prediction alloue des nœuds pour le traitement des requêtes de prédiction en ligne envoyées à une version de modèle. Lorsque vous déployez une version de modèle, vous pouvez personnaliser le type de machine virtuelle utilisé par AI Platform Prediction pour ces nœuds.

Les types de machines présentent plusieurs spécificités :

Sélectionner un type de machine possédant davantage de ressources de calcul vous permet de diffuser des prédictions avec une latence plus faible ou de gérer simultanément davantage de requêtes de prédiction.

Types de machines disponibles

Les types de machines Compute Engine (N1) et le type de machine mls1-c1-m2 sont en disponibilité générale pour la prédiction en ligne. Le type de machine mls1-c4-m2 est disponible en version bêta.

Le tableau suivant compare les types de machines disponibles :

Nom Disponibilité Processeurs virtuels Mémoire (Go) Compatibilité avec les GPU Compatibilité avec les frameworks de ML Taille maximale du modèle
mls1-c1-m2 (valeur par défaut sur le point de terminaison global) Disponible pour tous les utilisateurs 1 2 Non TensorFlow, XGBoost, scikit-learn (y compris les pipelines avec du code personnalisé), routines de prédiction personnalisées 500 Mo
mls1-c4-m2 Bêta 4 2 Non TensorFlow, XGBoost, scikit-learn (y compris les pipelines avec du code personnalisé), routines de prédiction personnalisées 500 Mo
n1-standard-2 (valeur par défaut sur les points de terminaison régionaux) Disponible pour tous les utilisateurs 2 7,5 Oui TensorFlow, XGBoost et scikit-learn 10 Go
n1-standard-4 Disponible pour tous les utilisateurs 4 15 Oui TensorFlow, XGBoost et scikit-learn 10 Go
n1-standard-8 Disponible pour tous les utilisateurs 8 30 Oui TensorFlow, XGBoost et scikit-learn 10 Go
n1-standard-16 Disponible pour tous les utilisateurs 16 60 Oui TensorFlow, XGBoost et scikit-learn 10 Go
n1-standard-32 Disponible pour tous les utilisateurs 32 120 Oui TensorFlow, XGBoost et scikit-learn 10 Go
n1-highmem-2 Disponible pour tous les utilisateurs 2 13 Oui TensorFlow, XGBoost et scikit-learn 10 Go
n1-highmem-4 Disponible pour tous les utilisateurs 4 26 Oui TensorFlow, XGBoost et scikit-learn 10 Go
n1-highmem-8 Disponible pour tous les utilisateurs 8 52 Oui TensorFlow, XGBoost et scikit-learn 10 Go
n1-highmem-16 Disponible pour tous les utilisateurs 16 104 Oui TensorFlow, XGBoost et scikit-learn 10 Go
n1-highmem-32 Disponible pour tous les utilisateurs 32 208 Oui TensorFlow, XGBoost et scikit-learn 10 Go
n1-highcpu-2 Disponible pour tous les utilisateurs 2 1.8 Oui TensorFlow, XGBoost et scikit-learn 10 Go
n1-highcpu-4 Disponible pour tous les utilisateurs 4 3.6 Oui TensorFlow, XGBoost et scikit-learn 10 Go
n1-highcpu-8 Disponible pour tous les utilisateurs 8 7,2 Oui TensorFlow, XGBoost et scikit-learn 10 Go
n1-highcpu-16 Disponible pour tous les utilisateurs 16 14,4 Oui TensorFlow, XGBoost et scikit-learn 10 Go
n1-highcpu-32 Disponible pour tous les utilisateurs 32 28,8 Oui TensorFlow, XGBoost et scikit-learn 10 Go

Apprenez-en plus sur la tarification des différents types de machines. Pour obtenir les spécifications détaillées des types de machines Compute Engine (N1), consultez la documentation Compute Engine.

Spécifier un type de machine

Vous pouvez spécifier le type de machine de votre choix lorsque vous créez une version de modèle. Si vous n'indiquez aucun type de machine, la version de modèle utilise le type par défaut n1-standard-2 si vous utilisez un point de terminaison régional et mls1-c1-m2 si vous utilisez le point de terminaison global.

Les instructions suivantes expliquent comment spécifier un type de machine lorsque vous créez une version de modèle. Le type de machine n1-standard-4 y est utilisé à titre d'exemple. Pour en savoir plus sur le processus complet de création d'une version de modèle, consultez le guide de déploiement des modèles.

Cloud Console

Sur la page Créer une version, accédez à la liste déroulante Type de machine et sélectionnez Standard > n1-standard-4.

gcloud

Après avoir importé vos artefacts de modèle dans Cloud Storage et créé une ressource de modèle, vous pouvez créer une version de modèle utilisant le type de machine n1-standard-4 :

gcloud ai-platform versions create VERSION_NAME \
  --model MODEL_NAME \
  --origin gs://model-directory-uri \
  --runtime-version 2.5 \
  --python-version 3.7 \
  --framework ML_FRAMEWORK_NAME \
  --region us-central1 \
  --machine-type n1-standard-4

Python

Cet exemple utilise la bibliothèque cliente des API Google pour Python. Avant d'exécuter l'exemple de code suivant, vous devez configurer l'authentification.

Après avoir importé vos artefacts de modèle dans Cloud Storage et créé une ressource de modèle, envoyez une requête à la méthode projects.models.versions.create de votre modèle, en spécifiant le champ machineType dans le corps de votre requête :

from google.api_core.client_options import ClientOptions
from googleapiclient import discovery

endpoint = 'https://us-central1-ml.googleapis.com'
client_options = ClientOptions(api_endpoint=endpoint)
ml = discovery.build('ml', 'v1', client_options=client_options)

request_dict = {
    'name': 'VERSION_NAME',
    'deploymentUri': 'gs://model-directory-uri',
    'runtimeVersion': '2.5',
    'pythonVersion': '3.7',
    'framework': 'ML_FRAMEWORK_NAME',
    'machineType': 'n1-standard-4'
}
request = ml.projects().models().versions().create(
    parent='projects/PROJECT_NAME/models/MODEL_NAME',
    body=request_dict
)
response = request.execute()

Utiliser des GPU pour la prédiction en ligne

Pour certaines configurations, vous pouvez éventuellement ajouter des GPU pour accélérer chaque nœud de prédiction. Pour utiliser des GPU, vous devez tenir compte de plusieurs exigences :

  • Vous ne pouvez utiliser des GPU qu'avec des types de machines Compute Engine (N1). Les anciens types de machines (MLS1) ne sont pas compatibles avec les GPU.
  • Vous ne pouvez utiliser des GPU que lorsque vous déployez un modèle TensorFlow SavedModel. Vous ne pouvez pas utiliser de GPU pour les modèles scikit-learn ou XGBoost.
  • La disponibilité de chaque type de GPU varie en fonction de la région que vous utilisez pour votre modèle. Découvrez les types de GPU disponibles selon les régions.
  • Vous ne pouvez utiliser qu'un seul type de GPU pour votre version de modèle, et il existe certaines restrictions sur le nombre de GPU que vous pouvez ajouter suivant le type de machine que vous utilisez. Le tableau suivant décrit ces limitations.

Le tableau suivant illustre les GPU disponibles pour la prédiction en ligne et, pour chaque type de machine Compute Engine, le nombre de GPU de chaque type que vous pouvez utiliser :

Nombre de GPU autorisés pour chaque type de machine
Type de machine NVIDIA Tesla K80 NVIDIA Tesla P4 NVIDIA Tesla P100 NVIDIA Tesla T4 NVIDIA Tesla V100
n1-standard-2 1, 2, 4, 8 1, 2, 4 1, 2, 4 1, 2, 4 1, 2, 4, 8
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-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-highcpu-2 1, 2, 4, 8 1, 2, 4 1, 2, 4 1, 2, 4 1, 2, 4, 8
n1-highcpu-4 1, 2, 4, 8 1, 2, 4 1, 2, 4 1, 2, 4 1, 2, 4, 8
n1-highcpu-8 1, 2, 4, 8 1, 2, 4 1, 2, 4 1, 2, 4 1, 2, 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

Les GPU sont facultatifs et entraînent des coûts supplémentaires.

Spécifier des GPU

Vous spécifiez des GPU lorsque vous créez une version de modèle. AI Platform Prediction alloue le nombre et le type de GPU que vous spécifiez pour chaque nœud de prédiction. Vous pouvez mettre à l'échelle automatiquement (aperçu) ou effectuer un scaling manuel (disponibilité générale) des nœuds de prédiction, mais le nombre de GPU utilisés par chaque nœud est corrigé lors de la création de la version de modèle. À moins que vous n'ayez un cas d'utilisation avancé, nous vous recommandons de configurer un GPU sur chaque nœud de prédiction. En d'autres termes, définissez le nombre d'accélérateurs sur 1.

Les instructions suivantes indiquent comment spécifier des GPU pour la prédiction en ligne en créant une version de modèle qui s'exécute sur au moins deux nœuds de prédiction à tout moment. Chaque nœud utilise le type de machine n1-standard-4 et un GPU NVIDIA Tesla T4.

Les exemples supposent que vous avez déjà importé un modèle SavedModel TensorFlow dans Cloud Storage et créé une ressource de modèle dans une région compatible avec les GPU.

Cloud Console

Suivez le guide pour créer une version de modèle. Sur la page Créer une version, spécifiez les options suivantes :

  1. Dans la liste déroulante Scaling, sélectionnez Autoscaling.
  2. Dans le champ Nombre minimal de nœuds, saisissez 2.
  3. Dans la liste déroulante Type de machine, sélectionnez Standard > n1-standard-4.
  4. Dans la liste déroulante Type d'accélérateur, sélectionnez NVIDIA_TESLA_T4.
  5. Dans la liste déroulante Nombre d'accélérateurs, sélectionnez 1.

gcloud

Utilisez l'outil gcloud pour créer une version de modèle. Dans cet exemple, la version s'exécute sur des nœuds de prédiction n1-standard-4 utilisant chacun un GPU NVIDIA Tesla T4. AI Platform Prediction ajuste automatiquement le nombre de nœuds de prédiction à un nombre compris entre 2 et 4, en fonction de l'utilisation du GPU à un moment donné. L'exemple utilise le point de terminaison régional us-central1.

gcloud beta ai-platform versions create VERSION_NAME \
  --model MODEL_NAME \
  --origin gs://model-directory-uri \
  --runtime-version 2.5 \
  --python-version 3.7 \
  --framework tensorflow \
  --region us-central1 \
  --machine-type n1-standard-4 \
  --accelerator count=1,type=nvidia-tesla-t4 \
  --min-nodes 2 \
  --max-nodes 4 \
  --metric-targets gpu-duty-cycle=60

Notez que le nom de l'accélérateur est spécifié en minuscules et avec des tirets entre les mots.

Python

Cet exemple utilise la bibliothèque cliente des API Google pour Python. Avant d'exécuter l'exemple de code suivant, vous devez configurer l'authentification.

L'exemple utilise le point de terminaison régional us-central1.

Envoyez une requête à la méthode projects.models.versions.create de votre modèle, en spécifiant les champs machineType, acceleratorConfig et manualScaling dans le corps de la requête :

from google.api_core.client_options import ClientOptions
from googleapiclient import discovery

endpoint = 'https://us-central1-ml.googleapis.com'
client_options = ClientOptions(api_endpoint=endpoint)
ml = discovery.build('ml', 'v1', client_options=client_options)

request_dict = {
    'name': 'VERSION_NAME',
    'deploymentUri': 'gs://model-directory-uri',
    'runtimeVersion': '2.5',
    'pythonVersion': '3.7',
    'framework': 'TENSORFLOW',
    'machineType': 'n1-standard-4',
    'acceleratorConfig': {
      'count': 1,
      'type': 'NVIDIA_TESLA_T4'
    },
    'autoScaling': {
      'minNodes': 2,
      'maxNodes': 4,
      'metrics': [
        {
          'name': 'GPU_DUTY_CYCLE',
          'target': 60
        }
      ]
    }
}
request = ml.projects().models().versions().create(
    parent='projects/PROJECT_NAME/models/MODEL_NAME',
    body=request_dict
)
response = request.execute()

Notez que le nom de l'accélérateur est spécifié en majuscules et avec des traits de soulignement entre les mots.

Différences entre les types de machines

Outre le fait qu'ils diffèrent au niveau des quantités de ressources de calcul proposées, les types de machines varient également vis-à-vis de leur compatibilité avec certaines fonctionnalités d'AI Platform Prediction. Le tableau suivant présente les différences entre les types de machines Compute Engine (N1) et les anciens types de machines (MLS1) :

Types de machines Compute Engine (N1) Anciens types de machines (MLS1)
Régions Toutes les régions des points de terminaison régionaux Toutes les régions du point de terminaison mondial
Types d'artefacts de ML
Versions d'exécution Version 1.11 ou ultérieure Toutes les versions d'exécution d'AI Platform disponibles
Prise en charge des conteneurs personnalisés Oui Non
Taille maximale du modèle 10 Go 500 Mo
Autoscaling Nombre minimal de nœuds = 1 Nombre minimal de nœuds = 0
Scaling manuel Possibilité de mettre à jour le nombre de nœuds Impossible de mettre à jour le nombre de nœuds après création de la version de modèle
Compatibilité avec les GPU Oui (TensorFlow uniquement) Non
Compatibilité avec AI Explanations Oui (TensorFlow uniquement) Non
Compatibilité avec VPC Service Controls Oui Non
Couverture du contrat de niveau de service pour les types de machines en disponibilité générale Oui, dans certains cas Oui

Les sections suivantes fournissent des explications détaillées sur les différences entre les types de machines.

Disponibilité en fonction des régions

Les types de machines Compute Engine (N1) sont disponibles lorsque vous déployez votre modèle sur un point de terminaison régional. Lorsque vous utilisez un type de machine Compute Engine (N1), vous ne pouvez pas déployer votre modèle sur le point de terminaison mondial.

Lorsque vous effectuez le scaling d'une version de modèle utilisant des types de machines Compute Engine (N1) vers au moins deux nœuds de prédiction, ceux-ci s'exécutent dans plusieurs zones de la même région. Cela garantit une disponibilité continue en cas de panne dans l'une des zones. Pour en savoir plus, consultez la section sur le scaling de ce document.

Notez que la disponibilité des GPU pour les types de machines Compute Engine (N1) varie selon la région.

Les anciens types de machines (MLS1) sont disponibles sur le point de terminaison mondial dans de nombreuses régions. Les anciens types de machines (MLS1) ne sont pas disponibles sur les points de terminaison régionaux.

Compatibilité avec la prédiction par lot

Les versions de modèle utilisant le type de machine mls1-c1-m2 sont compatibles avec la prédiction par lot. Les versions de modèle qui utilisent d'autres types de machines ne sont pas compatibles avec la prédiction par lot.

Compatibilité avec les frameworks de ML

Si vous utilisez l'un des types de machines Compute Engine (N1), vous pouvez créer votre version de modèle avec tous les artefacts de modèle décrits dans le guide d'exportation de modèles de prédiction, sous réserve de ces deux exceptions :

Pour les anciens types de machines (MLS1), vous pouvez utiliser n'importe quel type d'artefact de modèle compatible avec AI Platform Prediction, y compris un pipeline scikit-learn avec un code personnalisé ou une routine de prédiction personnalisée.

Compatibilité avec les versions d'exécution

Si vous utilisez un type de machine Compute Engine (N1), vous devez utiliser une version d'exécution 1.11 ou ultérieure pour votre version de modèle.

Si vous utilisez un ancien type de machine (MLS1), vous pouvez utiliser n'importe quelle version d'exécution d'AI Platform disponible.

Prise en charge des conteneurs personnalisés

Pour utiliser un conteneur personnalisé pour diffuser des prédictions en ligne, vous devez utiliser un type de machine Compute Engine (N1).

Taille maximale du modèle

Si vous utilisez un ancien type de machine (MLS1), la taille totale des artefacts de modèle que vous fournissez lors de la création d'une version de modèle ne doit pas dépasser 500 Mo. Si vous utilisez un type de machine Compute Engine (N1), la taille totale du fichier peut atteindre 10 Go.

Journalisation des prédictions

Pour les types de machines Compute Engine (N1), la journalisation de la console est en version bêta. Pour les anciens types de machines (MLS1), la journalisation de la console est en disponibilité générale.

Scaling des nœuds de prédiction

Le scaling automatique et le scaling manuel des nœuds de prédiction présentent des contraintes différentes selon que vous utilisez un type de machine Compute Engine (N1) ou un ancien type de machine (MLS1).

Scaling automatique

Si vous utilisez l'un des types de machines Compute Engine (N1) avec scaling automatique, votre version de modèle doit toujours présenter au moins un nœud en cours d'exécution. En d'autres termes, le champ autoScaling.minNodes de la version prend par défaut la valeur 1 et ne peut pas être inférieur à 1. Si vous définissez autoScaling.minNodes sur 2 ou plus, les nœuds de prédiction s'exécutent dans plusieurs zones de la même région. Cela garantit une disponibilité continue en cas de panne dans l'une des zones.

Notez que si vous allouez plus de processeurs virtuels ou de mémoire RAM que nécessaire à votre modèle de machine learning, l'autoscaling peut ne pas fonctionner correctement. Cela peut causer des problèmes de performances du modèle. Testez différents types de machines pour votre modèle afin de ne pas mobiliser trop de ressources de calcul.

Si vous utilisez un ancien type de machine (MLS1), le nombre de nœuds de votre version de modèle peut être réduit à zéro lorsqu'elle ne reçoit aucun trafic. (autoScaling.minNodes peut voir sa valeur définie à 0, qui est aussi sa valeur par défaut.)

Scaling manuel

Si vous utilisez l'un des types de machines Compute Engine (N1) avec scaling manuel, vous pouvez mettre à jour à tout moment le nombre de nœuds de prédiction en cours d'exécution à l'aide de la méthode API projects.models.versions.patch. Si vous définissez le champ manualScaling.nodes sur 2 ou plus, les nœuds de prédiction s'exécutent dans plusieurs zones de la même région. Cela garantit une disponibilité continue en cas de panne dans l'une des zones.

Si vous utilisez un ancien type de machine (MLS1) avec scaling manuel, vous ne pouvez pas mettre à jour le nombre de nœuds de prédiction une fois la version de modèle créée. Si vous souhaitez modifier le nombre de nœuds, vous devez supprimer la version et en créer une nouvelle.

Compatibilité avec VPC Service Controls

Si vous utilisez VPC Service Controls pour protéger AI Platform Prediction, vous ne pouvez pas créer de versions utilisant des anciens types de machines (MLS1). Vous devez utiliser les types de machines Compute Engine (N1).