Configura l'output di inferenza nei container generati - Amazon SageMaker

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Configura l'output di inferenza nei container generati

Autopilot genera una lista ordinata ContainerDefinition. Questa può essere usata per creare un modello da implementare in una pipeline di machine learning. Questo modello può essere utilizzato per l'hosting e l'inferenza online.

I clienti possono elencare le definizioni dei container di inferenza con l'API ListCandidateForAutoMLJob. La lista delle definizioni dei container di inferenza che rappresentano il miglior candidato è disponibile anche nella risposta DescribeAutoMLJob.

Definizioni dei container di inferenza per i tipi di problemi di regressione e classificazione

Autopilot genera container di inferenza specifici per la modalità training e il tipo di problema del processo.

Definizioni dei container per la modalità di ottimizzazione degli iperparametri (HPO)

  • Regressione: HPO genera due container:

    1. Un container di ingegneria delle funzionalità che trasforma le funzionalità originali in funzionalità su cui si può effettuare il training degli algoritmi di regressione.

    2. Un container di algoritmi che trasforma le funzionalità e genera un punteggio di regressione per il set di dati.

  • Classificazione: HPO genera tre container:

    1. Un container di ingegneria delle funzionalità che trasforma le funzionalità originali in funzionalità su cui si può effettuare il training degli algoritmi di classificazione.

    2. Un container di algoritmi che genera il predicted_label con la più alta probabilità. Questo container può anche produrre le varie probabilità associate ai risultati della classificazione nella risposta inferenziale.

    3. Un container di ingegneria delle funzionalità che esegue la post-elaborazione della previsione dell'algoritmo. Ad esempio, può eseguire una trasformazione inversa sull'etichetta prevista e sostituirla con l'etichetta originale.

Definizioni dei container per la modalità raggruppamento

In modalità raggruppamento, sia i tipi di problemi di regressione che quelli di classificazione hanno un solo container di inferenza. Questo container di inferenza trasforma le funzionalità e genera le previsioni in base al tipo di problema.

Risposte di inferenza per tipo di problema

Risposte di inferenza per modelli di classificazione

Per i contenitori di inferenza di classificazione, è possibile selezionare il contenuto della risposta di inferenza utilizzando quattro chiavi predefinite:

  • predicted_label: L'etichetta con la più alta probabilità di prevedere l'etichetta corretta, come determinato da Autopilot.

  • probability:

    • Modelli HPO: la probabilità della classe True per la classificazione binaria. La probabilità del predicted_label per la classificazione multiclasse.

    • Ensemble models (Modelli di raggruppamento): la probabilità della classe predicted_label per la classificazione multiclasse.

  • probabilities: L'elenco delle probabilità per tutte le classi corrispondenti.

  • labels: L'elenco di tutte le etichette.

Ad esempio, per un problema di classificazione binaria, se si passano le chiavi di risposta dell'inferenza ['predicted_label', 'probability', 'probabilities', 'labels'] e la risposta di output appare come [1, 0.1, "[0.9, 0.1]", "['1', '0']"], è necessario interpretarla come segue:

  1. predicted_label è uguale a 1 perché l'etichetta "1" ha una probabilità maggiore (0.9 in questo caso).

  2. Per i modelli HPO, probability è uguale a 0.1 che è la probabilità del positive_class (0 in questo caso) selezionato da Autopilot.

    Per i modelli di raggruppamento, probability è uguale a 0.9 che è la probabilità del predicted_label

  3. probabilities elenca il probability di ogni etichetta in labels.

  4. labels sono le etichette univoche nel set di dati, dove la seconda etichetta ("0" in questo caso) è positive_class selezionato da Autopilot.

Per impostazione predefinita, i container di inferenza sono configurati per generare solo il predicted_label. Per selezionare contenuti di inferenza aggiuntivi, puoi aggiornare il parametro inference_response_keys per includere fino a queste tre variabili di ambiente:

  • SAGEMAKER_INFERENCE_SUPPORTED: è impostato per fornire suggerimenti sui contenuti supportati da ciascun container.

  • SAGEMAKER_INFERENCE_INPUT: Questo dovrebbe essere impostato sulle chiavi che il container si aspetta nel payload di input.

  • SAGEMAKER_INFERENCE_OUTPUT: Questo dovrebbe essere compilato con il set di chiavi emesso dal container.

Risposte di inferenza per modelli di classificazione in modalità HPO

Questa sezione mostra come configurare la risposta di inferenza dai modelli di classificazione utilizzando l'ottimizzazione degli iperparametri (HPO).

Per scegliere il contenuto della risposta all'inferenza in modalità HPO: aggiungi le variabili SAGEMAKER_INFERENCE_INPUT e SAGEMAKER_INFERENCE_OUTPUT al secondo e terzo container generati in modalità HPO per problemi di classificazione.

Le chiavi supportate dal secondo container (algoritmo) sono predicted_label, probability e probabilities. Nota che labels viene deliberatamente aggiunto a SAGEMAKER_INFERENCE_SUPPORTED.

Le chiavi supportate dal container del terzo modello di classificazione sono predicted_label, labels, probability eprobabilities. Pertanto, l'ambiente SAGEMAKER_INFERENCE_SUPPORTED include i nomi di queste chiavi.

Per aggiornare la definizione dei container di inferenza per ricevere predicted_label e probability, utilizza il seguente esempio di codice.

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

Il seguente esempio di codice aggiorna la definizione dei container di inferenza per ricevere predicted_label, probabilities e labels. Non passare il labels al secondo container (il container dell'algoritmo), poiché viene generato dal terzo container in modo indipendente.

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

Le seguenti sezioni comprimibili forniscono esempi di codice per AWS SDK for Python (Boto3) e per SageMaker SDK for Python. Ogni sezione mostra come selezionare il contenuto delle risposte di inferenza in modalità HPO per il rispettivo esempio di codice.

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)

Risposte di inferenza per modelli di classificazione in modalità raggruppamento

Questa sezione mostra come configurare la risposta di inferenza dai modelli di classificazione utilizzando la modalità raggruppamento.

In modalità ensembling (modalità raggruppamento), per scegliere il contenuto della risposta di inferenza, aggiorna la variabile dell'ambiente SAGEMAKER_INFERENCE_OUTPUT.

Le chiavi supportate dal container del modello di classificazione sonopredicted_label, labels, probability e probabilities. Queste chiavi sono incluse nell'ambiente SAGEMAKER_INFERENCE_SUPPORTED.

Per aggiornare la definizione del container di inferenza per ricevere predicted_label eprobability, fare riferimento al seguente esempio di codice.

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

La seguente sezione comprimibile fornisce un esempio di codice per la selezione del contenuto delle risposte di inferenza in modalità raggruppamento. L'esempio utilizza. 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 seguente sezione pieghevole fornisce un esempio di codice identico all'esempio SageMaker SDK for Python per HPO. È incluso per comodità.

Il seguente esempio di codice HPO utilizza SageMaker SDK per 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)