Cette page explique comment obtenir des inférences par lot à partir de vos modèles entraînés personnalisés à l'aide de la console Google Cloud ou de l'API Vertex AI.
Pour effectuer une requête d'inférence par lot, vous devez spécifier une source d'entrée et un emplacement de sortie (Cloud Storage ou BigQuery) dans lequel Vertex AI stocke les résultats de l'inférence par lot.
Limites et exigences
Tenez compte des limites et des exigences suivantes lorsque vous obtenez des inférences par lots :
- Pour réduire le temps de traitement, vos emplacements d'entrée et de sortie doivent se trouver dans la même région ou le même emplacement multirégional. Par exemple, si votre entrée se trouve dans
us-central1
, la sortie peut être localisée dansus-central1
ouUS
, mais pas danseurope-west4
. Pour en savoir plus, consultez Emplacements Cloud Storage et Emplacements BigQuery. - Votre entrée et votre sortie doivent également se trouver dans la même région ou le même emplacement multirégional que votre modèle.
- Contrairement à l'inférence en ligne, les jobs d'inférence par lot n'effectuent pas d'autoscaling. Étant donné que toutes les données d'entrée sont connues à l'avance, le système partitionne les données sur chaque instance répliquée au démarrage du job. Le système utilise le paramètre
starting_replica_count
. Le paramètremax_replica_count
est ignoré. - Remarque : Les modèles BigQuery ML ne sont pas des modèles entraînés personnalisés. Toutefois, les informations de cette page peuvent être utilisées pour obtenir des inférences par lot à partir d'un modèle BigQuery ML dans les conditions suivantes :
- Le modèle BigQuery ML doit être enregistré auprès de Vertex AI Model Registry.
- Pour utiliser une table BigQuery comme entrée, vous devez définir
InstanceConfig.instanceType
sur"object"
à l'aide de l'API Vertex AI.
- Le chargement d'un modèle d'inférence par lots expire au bout d'environ 40 minutes.
Si le message d'erreur suivant s'affiche, utilisez un modèle plus petit pour les inférences par lots :
Error: model server never became ready. Please validate that your model file or container configuration are valid.
- Les comptes de service personnalisés ne sont compatibles qu'avec le serveur de modèle, et non avec le client d'inférence par lot qui effectue des opérations de lecture et d'écriture de données vers et depuis Cloud Storage et BigQuery.
Exigences concernant les données d'entrée
L'entrée des requêtes par lot spécifie les éléments à envoyer à votre modèle pour l'inférence. Les formats d'entrée suivants sont acceptés :
JSON Lines
Utilisez un fichier JSON Lines pour spécifier une liste d'instances d'entrée sur lesquelles effectuer des inférences. Stockez le fichier dans un bucket Cloud Storage.
Exemple 1
L'exemple suivant montre un fichier JSON Lines où chaque ligne contient un tableau :
[1, 2, 3, 4]
[5, 6, 7, 8]
Voici ce qui est envoyé au conteneur dans le corps de la requête HTTP :
Tous les autres conteneurs
{"instances": [ [1, 2, 3, 4], [5, 6, 7, 8] ]}
Conteneurs PyTorch
{"instances": [ { "data": [1, 2, 3, 4] }, { "data": [5, 6, 7, 8] } ]}
Exemple 2
L'exemple suivant montre un fichier JSON Lines dans lequel chaque ligne contient un objet.
{ "values": [1, 2, 3, 4], "key": 1 }
{ "values": [5, 6, 7, 8], "key": 2 }
Voici ce qui est envoyé au conteneur dans le corps de la requête HTTP. Notez que le même corps de requête est envoyé à tous les conteneurs.
{"instances": [
{ "values": [1, 2, 3, 4], "key": 1 },
{ "values": [5, 6, 7, 8], "key": 2 }
]}
Exemple 3
Pour les conteneurs prédéfinis PyTorch, assurez-vous d'encapsuler chaque instance dans un champ data
comme requis par le gestionnaire par défaut de TorchServe. Vertex AI n'encapsule pas vos instances pour vous. Exemple :
{ "data": { "values": [1, 2, 3, 4], "key": 1 } }
{ "data": { "values": [5, 6, 7, 8], "key": 2 } }
Voici ce qui est envoyé au conteneur d'inférence dans le corps de la requête HTTP :
{"instances": [
{ "data": { "values": [1, 2, 3, 4], "key": 1 } },
{ "data": { "values": [5, 6, 7, 8], "key": 2 } }
]}
TFRecord
Enregistrez les instances d'entrée au format TFRecord. Vous pouvez éventuellement compresser les fichiers TFRecord avec Gzip. Stockez les fichiers TFRecord dans un bucket Cloud Storage.
Vertex AI lit chaque instance de vos fichiers TFRecord en tant qu'élément binaire, puis l'encode en base64 en tant qu'objet JSON avec une seule clé nommée b64
.
Voici ce qui est envoyé au conteneur dans le corps de la requête HTTP :
Tous les autres conteneurs
{"instances": [ { "b64": "b64EncodedASCIIString" }, { "b64": "b64EncodedASCIIString" } ]}
Conteneurs PyTorch
{"instances": [ { "data": {"b64": "b64EncodedASCIIString" } }, { "data": {"b64": "b64EncodedASCIIString" } } ]}
Assurez-vous que votre conteneur sait comment décoder l'instance.
CSV
Spécifiez une instance d'entrée par ligne dans un fichier CSV. La première ligne doit être une ligne d'en-tête. Vous devez placer toutes les chaînes entre guillemets doubles ("). Vertex AI n'accepte pas les valeurs de cellule contenant des sauts de ligne. Les valeurs sans guillemets sont lues comme des nombres à virgule flottante.
L'exemple suivant montre un fichier CSV avec deux instances d'entrée :
"input1","input2","input3"
0.1,1.2,"cat1"
4.0,5.0,"cat2"
Voici ce qui est envoyé au conteneur dans le corps de la requête HTTP :
Tous les autres conteneurs
{"instances": [ [0.1,1.2,"cat1"], [4.0,5.0,"cat2"] ]}
Conteneurs PyTorch
{"instances": [ { "data": [0.1,1.2,"cat1"] }, { "data": [4.0,5.0,"cat2"] } ]}
Liste de fichiers
Créez un fichier texte dans lequel chaque ligne correspond à l'URI Cloud Storage d'un fichier. Vertex AI lit le contenu de chaque fichier en tant qu'élément binaire, puis l'encode en base64 en tant qu'objet JSON avec une seule clé nommée b64
.
Si vous prévoyez d'utiliser la console Google Cloud pour obtenir des inférences par lot, collez votre liste de fichiers directement dans la console Google Cloud . Sinon, enregistrez la liste dans un bucket Cloud Storage.
L'exemple suivant montre une liste de fichiers avec deux instances d'entrée :
gs://path/to/image/image1.jpg
gs://path/to/image/image2.jpg
Voici ce qui est envoyé au conteneur dans le corps de la requête HTTP :
Tous les autres conteneurs
{ "instances": [ { "b64": "b64EncodedASCIIString" }, { "b64": "b64EncodedASCIIString" } ]}
Conteneurs PyTorch
{ "instances": [ { "data": { "b64": "b64EncodedASCIIString" } }, { "data": { "b64": "b64EncodedASCIIString" } } ]}
Assurez-vous que votre conteneur sait comment décoder l'instance.
BigQuery
Spécifiez une table BigQuery en tant que projectId.datasetId.tableId
.
Vertex AI transforme chaque ligne de la table en instance JSON.
Par exemple, si votre table contient les éléments suivants :
Colonne 1 | Colonne 2 | Colonne 3 |
---|---|---|
1.0 | 3.0 | "Cat1" |
2.0 | 4.0 | "Cat2" |
Voici ce qui est envoyé au conteneur dans le corps de la requête HTTP :
Tous les autres conteneurs
{"instances": [ [1.0,3.0,"cat1"], [2.0,4.0,"cat2"] ]}
Conteneurs PyTorch
{"instances": [ { "data": [1.0,3.0,"cat1"] }, { "data": [2.0,4.0,"cat2"] } ]}
Voici comment les types de données BigQuery sont convertis au format JSON :
Type BigQuery | Type JSON | Exemple de valeur |
---|---|---|
Chaîne | Chaîne | "abc" |
Entier | Entier | 1 |
Nombre à virgule flottante | Nombre à virgule flottante | 1.2 |
Numérique | Nombre à virgule flottante | 4925.000000000 |
Booléen | Booléen | true |
Code temporel | Chaîne | "2019-01-01 23:59:59.999999+00:00" |
Date | Chaîne | "2018-12-31" |
Heure | Chaîne | "23:59:59.999999" |
DateTime | Chaîne | "2019-01-01T00:00:00" |
Enregistrement | Objet | { "A": 1,"B": 2} |
Type répété | Type Array (tableau) | [1, 2] |
Enregistrement imbriqué | Objet | {"A": {"a": 0}, "B": 1} |
Partitionner les données
L'inférence par lot utilise MapReduce pour segmenter l'entrée sur chaque instance dupliquée. Pour utiliser les fonctionnalités de MapReduce, l'entrée doit être partitionnable.
Vertex AI partitionne automatiquement l'entrée BigQuery, la liste de fichiers et les lignes JSON.
Vertex AI ne partitionne pas automatiquement les fichiers CSV, car ils ne sont pas naturellement compatibles avec le partitionnement. Les lignes des fichiers CSV ne sont pas autodescriptives, sont typées et peuvent contenir des sauts de ligne. Nous vous déconseillons d'utiliser des entrées CSV pour les applications sensibles au débit.
Pour les entrées TFRecord, veillez à partitionner manuellement les données en divisant les instances en fichiers plus petits et en transmettant les fichiers au job avec un caractère générique (par exemple, gs://my-bucket/*.tfrecord
). Le nombre de fichiers doit être au moins équivalent au nombre d'instances répliquées spécifié.
Filtrer et transformer les données d'entrée
Vous pouvez filtrer et transformer votre entrée par lots en spécifiant instanceConfig
dans votre requête BatchPredictionJob
.
Le filtrage vous permet d'exclure certains champs des données d'entrée de votre requête d'inférence ou de n'inclure qu'un sous-ensemble de champs à partir des données d'entrée de votre requête d'inférence, sans avoir à effectuer de prétraitement/post-traitement personnalisé dans le conteneur d'inférence. Cela s'avère utile lorsque votre fichier de données d'entrée contient des colonnes supplémentaires dont le modèle n'a pas besoin, telles que des clés ou des données supplémentaires.
La transformation vous permet d'envoyer les instances à votre conteneur au format JSON array
ou object
. Pour en savoir plus, consultez la page sur instanceType
.
Par exemple, si votre table contient les éléments suivants :
customerId | col1 | col2 |
---|---|---|
1001 | 1 | 2 |
1002 | 5 | 6 |
et que vous spécifiez l'élément instanceConfig
suivant :
{
"name": "batchJob1",
...
"instanceConfig": {
"excludedFields":["customerId"]
"instanceType":"object"
}
}
Ensuite, les instances de votre requête d'inférence sont envoyées en tant qu'objets JSON et la colonne customerId
est exclue :
{"col1":1,"col2":2}
{"col1":5,"col2":6}
Notez que la spécification de l'élément instanceConfig
suivant donne le même résultat :
{
"name": "batchJob1",
...
"instanceConfig": {
"includedFields": ["col1","col2"]
"instanceType":"object"
}
}
Pour une démonstration de l'utilisation des filtres de caractéristiques, consultez le notebook Inférence par lot de modèles personnalisés avec filtrage des caractéristiques.
Demander une inférence par lot
Pour les requêtes d'inférence par lot, vous pouvez utiliser la console Google Cloud ou l'API Vertex AI. Selon le nombre d'éléments d'entrée envoyés, la tâche d'inférence par lot peut prendre plus ou moins de temps.
Lorsque vous demandez une inférence par lot, le conteneur d'inférence s'exécute en tant que compte de service personnalisé fourni par l'utilisateur. Les opérations de lecture/écriture, telles que la lecture des instances d'inférence à partir de la source de données ou l'écriture des résultats de l'inférence, sont effectuées à l'aide de l'agent de service Vertex AI, lequel, par défaut, a accès à BigQuery et à Cloud Storage.
Console Google Cloud
Utilisez la console Google Cloud pour demander une inférence par lot.
- Dans la section Vertex AI de la console Google Cloud , accédez à la page Prédictions par lots.
Accéder à la page "Prédictions par lots"
Cliquez sur Créer pour ouvrir la fenêtre Nouvelle prédiction par lots.
Dans Définir votre prédiction par lots, procédez comme suit :
Saisissez un nom pour l'inférence par lot.
Dans Nom du modèle, sélectionnez le nom du modèle à utiliser pour cette inférence par lots.
Dans le champ Sélectionner une source, sélectionnez la source qui s'applique à vos données d'entrée :
- Si vous avez formaté votre entrée au format JSON Lines, CSV ou TFRecord, sélectionnez Fichier sur Cloud Storage (JSON Lines, CSV, TFRecord, TFRecord, TFRecord Gzip). Ensuite, spécifiez votre fichier d'entrée dans le champ Chemin source.
- Si vous utilisez une liste de fichiers en entrée, sélectionnez Fichiers sur Cloud Storage (autre) et collez votre liste de fichiers dans le champ suivant.
- Pour l'entrée BigQuery, sélectionnez Chemin d'accès dans BigQuery. Si vous sélectionnez BigQuery en tant qu'entrée, vous devez également sélectionner BigQuery en tant que sortie et Google-managed encryption key. La clé de chiffrement gérée par le client (CMEK) n'est pas compatible avec BigQuery en tant qu'entrée/sortie.
Dans le champ Chemin de la destination, spécifiez le répertoire Cloud Storage dans lequel vous souhaitez que Vertex AI stocke le résultat de l'inférence par lot.
Vous pouvez éventuellement cocher Activer les attributions de caractéristiques pour ce modèle pour obtenir des attributions de caractéristiques dans la réponse d'inférence par lot. Cliquez ensuite sur Modifier pour configurer les paramètres d'explication. (La modification des paramètres d'explication est facultative si vous avez précédemment configuré les paramètres d'explication pour le modèle. Elle est obligatoire dans les autres cas.)
Spécifiez les options de calcul pour la tâche d'inférence par lot : Nombre de nœuds de calcul, Type de machine et (éventuellement) Type d'accélérateur et Nombre d'accélérateurs.
Facultatif : L'analyse Model Monitoring pour les inférences par lot est disponible en version preview. Consultez la section Prérequis pour ajouter une configuration de détection de décalages à votre tâche d'inférence par lot.
Cliquez sur Activer la surveillance du modèle pour cette prédiction par lots.
Sélectionnez une source de données d'entraînement. Saisissez le chemin d'accès ou l'emplacement de la source de données d'entraînement que vous avez sélectionnée.
Facultatif : sous Seuils d'alerte, spécifiez les seuils auxquels les alertes doivent être déclenchées.
Dans le champ E-mails de notification, saisissez une ou plusieurs adresses e-mail séparées par une virgule afin de recevoir des alertes lorsqu'un modèle dépasse un seuil d'alerte.
Facultatif : Pour Canaux de notification, ajoutez des canaux Cloud Monitoring afin de recevoir des alertes lorsqu'un modèle dépasse un seuil d'alerte. Vous pouvez sélectionner des canaux Cloud Monitoring existants ou en créer un en cliquant sur Gérer les canaux de notification. La console Google Cloud est compatible avec les canaux de notification PagerDuty, Slack et Pub/Sub.
Cliquez sur Créer.
API
Envoyez des requêtes d'inférence par lot à l'aide de l'API Vertex AI. Sélectionnez l'onglet correspondant à l'outil que vous utilisez pour obtenir des inférences par lot.
REST
Avant d'utiliser les données de requête, effectuez les remplacements suivants :
LOCATION_ID : région où le modèle est stocké et la tâche de prédiction par lots est exécutée. Par exemple :
us-central1
.PROJECT_ID : ID de votre projet.
BATCH_JOB_NAME : nom à afficher du job de prédiction par lots.
MODEL_ID : ID du modèle à utiliser pour effectuer des prédictions.
INPUT_FORMAT : format des données d'entrée :
jsonl
,csv
,tf-record
,tf-record-gzip
oufile-list
.INPUT_URI : URI Cloud Storage de vos données d'entrée. Peut contenir des caractères génériques.
OUTPUT_DIRECTORY : URI Cloud Storage d'un répertoire dans lequel vous souhaitez que Vertex AI enregistre la sortie.
MACHINE_TYPE : ressources machine à utiliser pour ce job de prédiction par lots.
Vous pouvez éventuellement configurer le champ
machineSpec
pour utiliser des accélérateurs, mais l'exemple suivant n'illustre pas ce cas de figure.BATCH_SIZE : nombre d'instances à envoyer dans chaque requête de prédiction. La valeur par défaut est 64. L'augmentation de la taille du lot peut entraîner un débit plus élevé, mais elle peut également provoquer l'expiration des requêtes.
STARTING_REPLICA_COUNT : nombre de nœuds pour ce job de prédiction par lots.
Méthode HTTP et URL :
POST https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/batchPredictionJobs
Corps JSON de la requête :
{ "displayName": "BATCH_JOB_NAME", "model": "projects/PROJECT_ID/locations/LOCATION_ID/models/MODEL_ID", "inputConfig": { "instancesFormat": "INPUT_FORMAT", "gcsSource": { "uris": ["INPUT_URI"], }, }, "outputConfig": { "predictionsFormat": "jsonl", "gcsDestination": { "outputUriPrefix": "OUTPUT_DIRECTORY", }, }, "dedicatedResources" : { "machineSpec" : { "machineType": MACHINE_TYPE }, "startingReplicaCount": STARTING_REPLICA_COUNT }, "manualBatchTuningParameters": { "batch_size": BATCH_SIZE, } }
Pour envoyer votre requête, choisissez l'une des options suivantes :
curl
Enregistrez le corps de la requête dans un fichier nommé request.json
, puis exécutez la commande suivante :
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/batchPredictionJobs"
PowerShell
Enregistrez le corps de la requête dans un fichier nommé request.json
, puis exécutez la commande suivante :
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/batchPredictionJobs" | Select-Object -Expand Content
Vous devriez recevoir une réponse JSON de ce type :
{ "name": "projects/PROJECT_NUMBER/locations/LOCATION_ID/batchPredictionJobs/BATCH_JOB_ID", "displayName": "BATCH_JOB_NAME 202005291958", "model": "projects/PROJECT_ID/locations/LOCATION_ID/models/MODEL_ID", "inputConfig": { "instancesFormat": "jsonl", "gcsSource": { "uris": [ "INPUT_URI" ] } }, "outputConfig": { "predictionsFormat": "jsonl", "gcsDestination": { "outputUriPrefix": "OUTPUT_DIRECTORY" } }, "state": "JOB_STATE_PENDING", "createTime": "2020-05-30T02:58:44.341643Z", "updateTime": "2020-05-30T02:58:44.341643Z", }
Java
Avant d'essayer cet exemple, suivez les instructions de configuration pour Java décrites dans le guide de démarrage rapide de Vertex AI à l'aide des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Vertex AI Java.
Pour vous authentifier auprès de Vertex AI, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.
Dans l'exemple suivant, remplacez PREDICTIONS_FORMAT par jsonl
.
Pour savoir comment remplacer les autres espaces réservés, consultez l'onglet REST & CMD LINE
de cette section.
Python
Pour savoir comment installer ou mettre à jour le SDK Vertex AI pour Python, consultez la section Installer le SDK Vertex AI pour Python. Pour en savoir plus, consultez la documentation de référence de l'API Python.
BigQuery
L'exemple REST précédent utilise Cloud Storage pour la source et la destination. Pour utiliser BigQuery, apportez les modifications suivantes :
Remplacez le champ
inputConfig
par ce qui suit :"inputConfig": { "instancesFormat": "bigquery", "bigquerySource": { "inputUri": "bq://SOURCE_PROJECT_ID.SOURCE_DATASET_NAME.SOURCE_TABLE_NAME" } }
Remplacez le champ
outputConfig
par ce qui suit :"outputConfig": { "predictionsFormat":"bigquery", "bigqueryDestination":{ "outputUri": "bq://DESTINATION_PROJECT_ID.DESTINATION_DATASET_NAME.DESTINATION_TABLE_NAME" } }
Remplacez les éléments suivants :
SOURCE_PROJECT_ID
: ID du projet Google Cloud source.SOURCE_DATASET_NAME
: nom de l'ensemble de données BigQuery source.SOURCE_TABLE_NAME
: nom de la table BigQuery source.DESTINATION_PROJECT_ID
: ID du projet Google Cloud de destination.DESTINATION_DATASET_NAME
: nom de l'ensemble de données BigQuery de destination.DESTINATION_TABLE_NAME
: nom de la table BigQuery de destination.
Importance des caractéristiques
Si vous souhaitez que les valeurs d'importance des caractéristiques soient renvoyées pour vos inférences, définissez la propriété generateExplanation
sur true
. Notez que les modèles de prévision ne sont pas compatibles avec l'importance des caractéristiques. Vous ne pouvez donc pas l'inclure dans vos requêtes d'inférence par lot.
L'importance des caractéristiques, parfois appelée attribution de caractéristiques, fait partie de Vertex Explainable AI.
Vous pouvez uniquement définir generateExplanation
sur true
si vous avez configuré votre Model
pour obtenir des explications ou si vous spécifiez le champ explanationSpec
de BatchPredictionJob
.
Choisir le type de machine et le nombre d'instances répliquées
Le scaling horizontal en augmentant le nombre d'instances répliquées améliore le débit de manière plus linéaire et prévisible qu'avec des types de machines plus volumineux.
En règle générale, nous vous recommandons de spécifier le plus petit type de machine possible pour votre job et d'augmenter le nombre d'instances répliquées.
Pour plus de rentabilité, nous vous recommandons de choisir le nombre d'instances dupliquées afin que votre tâche d'inférence par lot s'exécute pendant au moins 10 minutes. En effet, vous êtes facturé par heure-nœud d'instance répliquée, dont environ 5 minutes pour le démarrage de chaque instance répliquée. Il n'est pas rentable de procéder pendant quelques secondes, puis d'arrêter.
En règle générale, pour des milliers d'instances, nous recommandons une valeur starting_replica_count
exprimée en dizaines. Pour des millions d'instances, nous recommandons une valeur starting_replica_count
exprimée en centaines. Vous pouvez également utiliser la formule suivante pour estimer le nombre d'instances répliquées :
N / (T * (60 / Tb))
Où :
- N : nombre de lots dans le job. Par exemple, 1 million d'instances/100 lots = 10 000 lots.
- T : durée attendue pour le job d'inférence par lot. Par exemple, 10 minutes.
- Tb : temps en secondes nécessaire à une instance répliquée pour traiter un seul lot. Par exemple, 1 seconde par lot sur un type de machine à 2 cœurs.
Dans notre exemple, 10 000 lots/(10 minutes * (60/1 s)) arrondis à 17 instances répliquées.
Ces recommandations sont toutes des consignes approximatives. Elles n'offrent pas nécessairement un débit optimal pour chaque modèle. Elles ne fournissent pas d'estimations exactes sur le temps et le coût de traitement. De plus, elles ne capturent pas nécessairement les meilleurs compromis coût/débit pour chaque scénario. Utilisez-les comme point de départ raisonnable et ajustez-les si nécessaire. Pour mesurer les caractéristiques telles que le débit de votre modèle, exécutez le notebook Trouver le type de machine idéal.
Pour les machines accélérées par GPU ou TPU
Suivez les consignes précédentes (qui s'appliquent également aux modèles CPU uniquement), en tenant compte des considérations supplémentaires suivantes :
- Vous aurez peut-être besoin de plus de processeurs et de GPU (par exemple, pour le prétraitement des données).
- Le démarrage des types de machines avec GPU est plus long (10 minutes). Vous pouvez donc cibler des temps plus longs (par exemple, au moins 20 minutes au lieu de 10 minutes) pour le job d'inférence par lots afin qu'une proportion raisonnable du temps et des coûts soit allouée à la génération des inférences.
Récupérer les résultats de l'inférence par lot
Lorsqu'une tâche d'inférence par lot est terminée, le résultat de l'inférence est stocké dans le bucket Cloud Storage ou l'emplacement BigQuery que vous avez spécifié dans votre requête.
Exemple de résultat d'inférence par lot
Le dossier de sortie contient un ensemble de fichiers JSON Lines.
Les fichiers sont nommés {gcs_path}/prediction.results-{file_number}-of-{number_of_files_generated}
.
Le nombre de fichiers est non déterministe, en raison de la nature distribuée de l'inférence par lot.
Chaque ligne du fichier correspond à une instance de l'entrée et possède les paires clé/valeur suivantes :
prediction
: contient la valeur renvoyée par le conteneur.instance
: pour une liste de fichiers, contient l'URI Cloud Storage. Pour tous les autres formats d'entrée, elle contient la valeur envoyée au conteneur dans le corps de la requête HTTP.
Exemple 1
Si la requête HTTP contient les éléments suivants :
{
"instances": [
[1, 2, 3, 4],
[5, 6, 7, 8]
]}
Et que le conteneur renvoie ce qui suit :
{
"predictions": [
[0.1,0.9],
[0.7,0.3]
],
}
Le fichier de sortie JSON Lines se présente alors comme suit :
{ "instance": [1, 2, 3, 4], "prediction": [0.1,0.9]}
{ "instance": [5, 6, 7, 8], "prediction": [0.7,0.3]}
Exemple 2
Si la requête HTTP contient les éléments suivants :
{
"instances": [
{"values": [1, 2, 3, 4], "key": 1},
{"values": [5, 6, 7, 8], "key": 2}
]}
Et que le conteneur renvoie ce qui suit :
{
"predictions": [
{"result":1},
{"result":0}
],
}
Le fichier de sortie JSON Lines se présente alors comme suit :
{ "instance": {"values": [1, 2, 3, 4], "key": 1}, "prediction": {"result":1}}
{ "instance": {"values": [5, 6, 7, 8], "key": 2}, "prediction": {"result":0}}
Point de terminaison visible par l'utilisateur
Pour améliorer l'observabilité et réduire le nombre de quotas à gérer, le serveur de modèles est disponible en tant que point de terminaison Vertex AI destiné aux utilisateurs. Si vous configurez l'une des fonctionnalités suivantes, le modèle sera déployé sur un point de terminaison destiné aux utilisateurs :
- Réservations partagées
- VM Spot
- VM à démarrage flexible
Utiliser Explainable AI
Nous vous déconseillons d'exécuter des explications basées sur les caractéristiques sur une grande quantité de données. En effet, chaque entrée peut potentiellement être ramifiée vers des milliers de requêtes en fonction de l'ensemble des valeurs de caractéristiques possibles, ce qui peut entraîner une augmentation considérable du temps de traitement et des coûts. En général, un petit ensemble de données est suffisant pour comprendre l'importance des caractéristiques.
L'inférence par lot n'est pas compatible avec les explications basées sur des exemples.
Notebooks
Étapes suivantes
- En savoir plus sur les ressources de calcul pour l'inférence
- Découvrez comment utiliser des réservations avec l'inférence par lot Vertex AI.