Configuration de la sortie d'inférence dans les conteneurs générés - Amazon SageMaker

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Configuration de la sortie d'inférence dans les conteneurs générés

Autopilot génère une liste ContainerDefinition ordonnée. Elle peut être utilisée pour créer un modèle à déployer dans un pipeline de machine learning. Ce modèle peut être utilisé pour l'hébergement en ligne et l'inférence.

Les clients peuvent répertorier les définitions des conteneurs d'inférence à l'aide de l'API ListCandidateForAutoMLJob. La liste des définitions des conteneurs d'inférence représentant le meilleur candidat est également disponible dans la réponse DescribeAutoMLJob.

Définitions des conteneurs d'inférence pour les types de problèmes de régression et de classification

Autopilot génère des conteneurs d'inférence spécifiques au mode d'entraînement et au type de problèmes de la tâche.

Définitions de conteneurs pour le mode d'optimisation des hyperparamètres (HPO)

  • Régression : HPO génère deux conteneurs :

    1. Un conteneur d'ingénierie des fonctionnalités qui transforme les fonctionnalités d'origine en fonctionnalités sur lesquelles les algorithmes de régression peuvent s'entraîner.

    2. Un conteneur d'algorithme qui transforme les fonctionnalités et génère un score de régression pour le jeu de données.

  • Classification : HPO génère trois conteneurs :

    1. Un conteneur d'ingénierie des fonctionnalités qui transforme les fonctionnalités d'origine en fonctionnalités sur lesquelles les algorithmes de classification peuvent s'entraîner.

    2. Un conteneur d'algorithme qui génère l'étiquette predicted_label qui présente la plus forte probabilité. Ce conteneur peut également générer les différentes probabilités associées aux résultats de la classification dans la réponse d'inférence.

    3. Un conteneur d'ingénierie des fonctionnalités qui effectue le post-traitement de la prédiction de l'algorithme. Par exemple, il peut effectuer une transformation inverse sur l'étiquette prédite et la remplacer par l'étiquette d'origine.

Définitions de conteneur pour le mode Assemblage

En mode Assemblage, les types de problèmes de régression et de classification n'ont qu'un seul conteneur d'inférence. Ce conteneur d'inférence transforme les fonctionnalités et génère les prédictions en fonction du type de problème.

Réponses d'inférence par type de problèmes

Réponses d'inférence pour les modèles de classification

Pour les conteneurs d'inférence de classification, vous pouvez sélectionner le contenu de la réponse d'inférence à l'aide de quatre clés prédéfinies.

  • predicted_label : étiquette présentant la probabilité la plus élevée de prédire l'étiquette correcte, telle que déterminée par Autopilot.

  • probability:

    • Modèles HPO : probabilité de la classe True pour la classification binaire. La probabilité de l'étiquette predicted_label pour la classification multi-classes.

    • Modèles ensemblistes : probabilité de l'élément predicted_label pour la classification binaire et multi-classes.

  • probabilities : liste des probabilités pour toutes les classes correspondantes.

  • labels : liste de toutes les étiquettes.

Par exemple, pour un problème de classification binaire, si vous transmettez les clés de réponse d'inférence ['predicted_label', 'probability', 'probabilities', 'labels'] et que la réponse de sortie apparaît sous la forme [1, 0.1, "[0.9, 0.1]", "['1', '0']"], vous devez l'interpréter comme suit :

  1. La clé predicted_label est égale à 1 parce que l'étiquette « 1 » a une probabilité plus élevée (0.9 dans ce cas).

  2. Pour les modèles HPO, la clé probability est égale à 0.1 qui est la probabilité de l'élément positive_class (0 dans ce cas) sélectionné par Autopilot.

    Pour les modèles ensemblistes, la clé probability est égale à 0.9 qui est la probabilité de l'étiquette predicted_label.

  3. La clé probabilities répertorie la clé probability de chaque étiquette dans labels.

  4. Les éléments labels sont les étiquettes uniques du jeu de données, où la deuxième étiquette (« 0 » dans ce cas) est l'élément positive_class sélectionné par Autopilot.

Par défaut, les conteneurs d'inférence sont configurés pour générer uniquement les étiquettes predicted_label. Pour sélectionner du contenu d'inférence supplémentaire, vous pouvez mettre à jour le paramètre inference_response_keys afin d'inclure jusqu'à ces trois variables d'environnement :

  • SAGEMAKER_INFERENCE_SUPPORTED : est définie pour vous fournir des conseils sur le contenu pris en charge par chaque conteneur.

  • SAGEMAKER_INFERENCE_INPUT : doit être définie sur les clés que le conteneur attend dans la charge utile d'entrée.

  • SAGEMAKER_INFERENCE_OUTPUT : doit être renseignée avec le jeu de clés que le conteneur délivre en sortie.

Réponses d'inférence pour les modèles de classification en mode HPO

Cette section explique comment configurer la réponse d'inférence à partir de modèles de classification à l'aide du mode d'optimisation des hyperparamètres (HPO).

Pour choisir le contenu de la réponse d'inférence en mode HPO : ajoutez les variables SAGEMAKER_INFERENCE_INPUT et SAGEMAKER_INFERENCE_OUTPUT aux deuxième et troisième conteneurs générés en mode HPO pour les problèmes de classification.

Les clés prises en charge par le deuxième conteneur (algorithme) sont predicted_label, probabilité et probabilités. Notez que labels n'est délibérément pas ajouté à SAGEMAKER_INFERENCE_SUPPORTED.

Les clés prises en charge par le troisième conteneur de modèle de classification sont predicted_label, labels, probability et probabilities. Par conséquent, l'environnement SAGEMAKER_INFERENCE_SUPPORTED inclut les noms de ces clés.

Pour mettre à jour la définition des conteneurs d'inférence afin de recevoir predicted_labelet probability, utilisez l'exemple de code suivant.

containers[1]['Environment'].update({'SAGEMAKER_INFERENCE_OUTPUT': 'predicted_label, probability'}) containers[2]['Environment'].update({'SAGEMAKER_INFERENCE_INPUT': 'predicted_label, probability'}) containers[2]['Environment'].update({'SAGEMAKER_INFERENCE_OUTPUT': 'predicted_label, probability'})

L'exemple de code suivant met à jour la définition des conteneurs d'inférence afin de recevoir predicted_label, probabilities et labels. Ne passez pas l'étiquette labels au deuxième conteneur (conteneur d'algorithme) car elle peut être générée par le troisième conteneur indépendamment.

containers[1]['Environment'].update({'SAGEMAKER_INFERENCE_OUTPUT': 'predicted_label,probabilities'}) containers[2]['Environment'].update({'SAGEMAKER_INFERENCE_INPUT': 'predicted_label,probabilities'}) containers[2]['Environment'].update({'SAGEMAKER_INFERENCE_OUTPUT': 'predicted_label, probabilities,labels'})

Les sections démontables suivantes fournissent des exemples de code pour AWS SDK for Python (Boto3) et pour le SageMaker SDK pour Python. Chaque section montre comment sélectionner le contenu des réponses d'inférence en mode HPO pour l'exemple de code correspondant.

import boto3 sm_client = boto3.client('sagemaker', region_name='<Region>') role = '<IAM role>' input_data = '<S3 input uri>' output_path = '<S3 output uri>' best_candidate = sm_client.describe_auto_ml_job(AutoMLJobName='<AutoML Job Name>')['BestCandidate'] best_candidate_containers = best_candidate['InferenceContainers'] best_candidate_name = best_candidate['CandidateName'] best_candidate_containers[1]['Environment'].update({'SAGEMAKER_INFERENCE_OUTPUT': 'predicted_label, probability'}) best_candidate_containers[2]['Environment'].update({'SAGEMAKER_INFERENCE_INPUT': 'predicted_label, probability'}) best_candidate_containers[2]['Environment'].update({'SAGEMAKER_INFERENCE_OUTPUT': 'predicted_label, probability'}) # create model reponse = sm_client.create_model( ModelName = '<Model Name>', ExecutionRoleArn = role, Containers = best_candidate_containers ) # Lauch Transform Job response = sm_client.create_transform_job( TransformJobName='<Transform Job Name>', ModelName='<Model Name>', TransformInput={ 'DataSource': { 'S3DataSource': { 'S3DataType': 'S3Prefix', 'S3Uri': input_data } }, 'ContentType': "text/CSV", 'SplitType': 'Line' }, TransformOutput={ 'S3OutputPath': output_path, 'AssembleWith': 'Line', }, TransformResources={ 'InstanceType': 'ml.m4.xlarge', 'InstanceCount': 1, }, )
from sagemaker import AutoML aml = AutoML.attach(auto_ml_job_name='<AutoML Job Name>') aml_best_model = aml.create_model(name='<Model Name>', candidate=None, inference_response_keys**=['probabilities', 'labels']) aml_transformer = aml_best_model.transformer(accept='text/csv', assemble_with='Line', instance_type='ml.m5.xlarge', instance_count=1,) aml_transformer.transform('<S3 input uri>', content_type='text/csv', split_type='Line', job_name='<Transform Job Name>', wait=True)

Réponses d'inférence pour les modèles de classification en mode Assemblage

Cette section explique comment configurer la réponse d'inférence à partir de modèles de classification à l'aide du mode Assemblage.

En mode Assemblage, pour choisir le contenu de la réponse d'inférence, mettez à jour la variable d'environnement SAGEMAKER_INFERENCE_OUTPUT.

Les clés prises en charge par le conteneur de modèle de classification sont predicted_label, labels, probability et probabilities. Ces clés sont incluses dans l'environnement SAGEMAKER_INFERENCE_SUPPORTED.

Pour mettre à jour la définition des conteneurs d'inférence afin de recevoir predicted_labelet probability, consultez l'exemple de code suivant.

containers[0]['Environment'].update({'SAGEMAKER_INFERENCE_OUTPUT': 'predicted_label, probability'})

La section réductible suivante fournit un exemple de code permettant de sélectionner le contenu des réponses d'inférence en mode Assemblage. L'exemple utilise AWS SDK for Python (Boto3).

import boto3 sm_client = boto3.client('sagemaker', region_name='<Region>') role = '<IAM role>' input_data = '<S3 input uri>' output_path = '<S3 output uri>' best_candidate = sm_client.describe_auto_ml_job(AutoMLJobName='<AutoML Job Name>')['BestCandidate'] best_candidate_containers = best_candidate['InferenceContainers'] best_candidate_name = best_candidate['CandidateName'] *best_candidate_containers[0]['Environment'].update({'SAGEMAKER_INFERENCE_OUTPUT': 'predicted_label, probability'}) * # create model reponse = sm_client.create_model( ModelName = '<Model Name>', ExecutionRoleArn = role, Containers = best_candidate_containers ) # Lauch Transform Job response = sm_client.create_transform_job( TransformJobName='<Transform Job Name>', ModelName='<Model Name>', TransformInput={ 'DataSource': { 'S3DataSource': { 'S3DataType': 'S3Prefix', 'S3Uri': input_data } }, 'ContentType': "text/CSV", 'SplitType': 'Line' }, TransformOutput={ 'S3OutputPath': output_path, 'AssembleWith': 'Line', }, TransformResources={ 'InstanceType': 'ml.m4.xlarge', 'InstanceCount': 1, }, )

La section pliable suivante fournit un exemple de code identique à l'exemple du SageMaker SDK pour Python pour HPO. Ces informations sont incluses à titre indicatif.

L'exemple de code HPO suivant utilise le SageMaker SDK pour Python.

from sagemaker import AutoML aml = AutoML.attach(auto_ml_job_name='<AutoML Job Name>') aml_best_model = aml.create_model(name='<Model Name>', candidate=None, *inference_response_keys**=['probabilities', 'labels'])* aml_transformer = aml_best_model.transformer(accept='text/csv', assemble_with='Line', instance_type='ml.m5.xlarge', instance_count=1,) aml_transformer.transform('<S3 input uri>', content_type='text/csv', split_type='Line', job_name='<Transform Job Name>', wait=True)