

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
<a name="autopilot-automate-model-development-container-output"></a>

Autopilot genera una lista ordinata [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ContainerDefinition.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ContainerDefinition.html). 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 [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ListCandidateForAutoMLJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ListCandidateForAutoMLJob.html). La lista delle definizioni dei container di inferenza che rappresentano il miglior candidato è disponibile anche nella risposta [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeAutoMLJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeAutoMLJob.html).

## Definizioni dei container di inferenza per i tipi di problemi di regressione e classificazione
<a name="autopilot-problem-type-container-output"></a>

Autopilot genera container di inferenza specifici per la [modalità addestramento](https://docs.aws.amazon.com/sagemaker/latest/dg/autopilot-model-support-validation.html#autopilot-training-mode) e il [tipo di problema](https://docs.aws.amazon.com/sagemaker/latest/dg/autopilot-datasets-problem-types.html#autopilot-problem-types) del processo.

### Definizioni dei container per la modalità di ottimizzazione degli iperparametri (HPO)
<a name="autopilot-problem-type-container-output-hpo"></a>
+ **Regressione**: HPO genera due container:

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

  1. 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 possono addestrare gli algoritmi di classificazione.

  1. 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.

  1. 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
<a name="autopilot-problem-type-container-output-ensemble"></a>

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
<a name="autopilot-problem-type-inference-response"></a>

### Risposte di inferenza per modelli di classificazione
<a name="autopilot-problem-type-inference-response-classification"></a>

Per i container 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).

1. 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`

1. `probabilities` elenca il `probability` di ogni etichetta in `labels`.

1. `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
<a name="autopilot-problem-type-inference-response-classification-hpo"></a>

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\$1label, 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` e`probabilities`. 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 per 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.

#### AWS SDK per Python (Boto3)
<a name="autopilot-problem-type-inference-response-classification-hpo-boto3"></a>

```
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,
    },
)
```

#### SageMaker SDK per Python
<a name="autopilot-problem-type-inference-response-classification-hpo-sdk"></a>

```
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
<a name="autopilot-problem-type-inference-response-classification-ensemble"></a>

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 sono`predicted_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` e`probability`, 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 per Python (Boto3)

#### AWS SDK per Python (Boto3)
<a name="autopilot-problem-type-inference-response-classification-ensembling-boto3"></a>

```
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à.

#### SageMaker SDK per Python
<a name="autopilot-problem-type-inference-response-classification-ensembling-sdk"></a>

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)
```