Configurer la sortie d'inférence dans les conteneurs générés par AutoPilote - Amazon SageMaker

Configurer la sortie d'inférence dans les conteneurs générés par AutoPilote

Amazon SageMaker Autopilot génère une liste ordonnée ContainerDefinition qui 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 accéder à la liste des 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

Les conteneurs d'inférence générés dépendent du type de problème de la tâche.

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

    1. Le premier est le conteneur d'ingénierie des fonctionnalités qui transforme les fonctions originales en des fonctions sur lesquelles les algorithmes de régression peuvent s'entraîner.

    2. Le deuxième est le conteneur d'algorithme qui transforme les fonctions et génère le score de régression pour le jeu de données.

  • Classification : génère trois conteneurs :

    1. Le premier est le conteneur d'ingénierie des fonctionnalités qui transforme les fonctions originales en des fonctions sur lesquelles les algorithmes de classification peuvent s'entraîner.

    2. Le deuxième est le conteneur d'algorithme qui génère l'predicted_label gagnante et peut aussi produire les diverses probabilités associées aux résultats de classification dans la réponse d'inférence.

    3. Le troisième est un conteneur d'ingénierie des fonctionnalités qui effectue le post-traitement de la prédiction de l'algorithme, par exemple une transformation inverse de l'étiquette prédite vers l'étiquette d'origine.

Sélectionner la réponse d'inférence pour les modèles de classification

Les conteneurs d'inférence de classification vous permettent de sélectionner le contenu des réponses d'inférence. Il y a quatre clés prédéfinies :

  • predicted_label : l'étiquette gagnante déterminée par Autopilot.

  • probability : la probabilité de la classe True pour la classification binaire. La probabilité de la classe gagnante pour la classification multiclasse.

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

  • labels : la liste de toutes les étiquettes

Par défaut, les conteneurs d'inférence sont configurés pour générer les predicted_label uniquement.

Trois variables d'environnement sont utilisées pour sélectionner le contenu d'inférence facultatif :

  • 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 aux clés que le conteneur attend dans sa 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.

Afin de choisir le contenu de la réponse d'inférence, nous devons ajouter les SAGEMAKER_INFERENCE_INPUT et SAGEMAKER_INFERENCE_OUTPUT de manière appropriée dans les deuxième et troisième conteneurs de la liste des conteneurs associés au problème de classification.

Les clés prises en charge par le troisième conteneur du modèle de classification sont predicted_label, labels, probability et probabilities. L'environnement SAGEMAKER_INFERENCE_SUPPORTED inclut donc les noms de toutes ces clés.

Les clés prises en charge par le deuxième conteneur (algorithme) sont predicted_label, probabilité et probabilités. Vous noterez que les étiquettes ne sont volontairement pas ajoutées au SAGEMAKER_INFERENCE_SUPPORTED.

Voici comment mettre à jour la définition des conteneurs d'inférence pour recevoir predicted_label et probability.

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'})

Voici comment mettre à jour la définition des conteneurs d'inférence pour recevoir predicted_label, probabilities et labels. Vous n'avez pas besoin de passer les labels au deuxième conteneur, le conteneur d'algorithme, car, en raison de la redondance, elles peuvent être générées par le troisième conteneur indépendamment. Cela réduit la latence.

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'})

Vous pouvez utiliser le kit SDK Python Amazon SageMaker. pour accomplir ce qui suit :

from sagemaker import AutoML aml = AutoML.attach(auto_ml_job_name='AUTOML_JOB_NAME') aml_best_model = aml.create_model(name='SELECT_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(test_data_s3_path, content_type='text/csv', split_type='Line', job_name=<Add jobName>, wait=True)