

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

# Prevedere un modello Autopilot implementato
<a name="timeseries-forecasting-deploy-models"></a>

Dopo aver addestrato i modelli utilizzando l’API AutoML, è possibile implementarli per previsioni in tempo reale o basate su batch. 

L’API AutoML addestra diversi modelli candidati per i dati di serie temporali, quindi seleziona un modello di previsione ottimale in base a una determinata metrica oggettiva. [Una volta formati i tuoi candidati modello, puoi trovare il candidato migliore nella risposta V2 all'indirizzo. DescribeAuto MLJob [BestCandidate](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_AutoMLCandidate.html#sagemaker-Type-AutoMLCandidate-CandidateName)](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeAutoMLJobV2.html)

Per ottenere previsioni utilizzando questo modello di migliori candidati, è possibile configurare un endpoint per ottenere previsioni in modo interattivo o utilizzare la previsione in batch per fare previsioni su un batch di osservazioni.

**Considerazioni**
+ Quando si forniscono dati di input per la previsione, lo schema dei dati deve rimanere lo stesso di quello utilizzato per addestrare il modello, incluso il numero di colonne, le intestazioni di colonna e i tipi di dati. È possibile effettuare previsioni per un elemento esistente o nuovo IDs all'interno dello stesso intervallo di timestamp o in un intervallo di timestamp diverso e prevedere per un periodo di tempo diverso.
+ I modelli di previsione prevedono per i punti dell'orizzonte di previsione nel futuro specificati nella richiesta di input al momento dell'addestramento, che va dalla *data di fine target* alla *data di fine target \$1 orizzonte di previsione*. Per utilizzare il modello per prevedere date specifiche, è necessario fornire i dati nello stesso formato dei dati di input originali, fino a una *data di fine target* specificata. In questo scenario, il modello inizierà a fare previsioni a partire dalla nuova data di fine target.

  Ad esempio, se il set di dati contiene dati mensili da gennaio a giugno con un orizzonte di previsione di 2, il modello prevede il valore target per i prossimi 2 mesi, ovvero luglio e agosto. Se ad agosto vuoi fare previsioni per i prossimi 2 mesi, questa volta i dati di input dovrebbero essere da gennaio ad agosto e il modello farà previsioni per i successivi 2 mesi (settembre, ottobre).
+ Durante la previsione di punti dati futuri, non esiste un minimo prestabilito per la quantità di dati storici da fornire. Includi dati sufficienti per acquisire modelli stagionali e ricorrenti nelle serie temporali.

**Topics**
+ [Previsione in tempo reale](timeseries-forecasting-realtime.md)
+ [Previsione in batch](timeseries-forecasting-batch.md)

# Previsione in tempo reale
<a name="timeseries-forecasting-realtime"></a>

La previsione in tempo reale è utile quando è necessario generare previsioni on-the-fly, ad esempio per le applicazioni che richiedono risposte immediate o per le previsioni per singoli punti dati.

Implementando il modello AutoML come endpoint in tempo reale, è possibile generare previsioni on demand e ridurre al minimo la latenza tra la ricezione di nuovi dati e delle previsioni. Questo rende le previsioni in tempo reale particolarmente adatte per applicazioni che richiedono funzionalità di previsione immediate, personalizzate o basate sugli eventi.

Per le previsioni in tempo reale, il set di dati deve essere un sottoinsieme del set di dati di input. L'endpoint in tempo reale ha una dimensione dei dati di input di circa 6 MB e un limite di timeout di risposta di 60 secondi. Ti consigliamo di portare uno o più articoli alla volta.

Puoi utilizzarlo SageMaker APIs per recuperare il miglior candidato di un lavoro AutoML e quindi creare SageMaker un endpoint AI utilizzando quel candidato.

In alternativa, puoi scegliere l'opzione di implementazione automatica durante la creazione dell'esperimento Autopilot. Per informazioni sulla configurazione dell'implementazione automatica dei modelli, consulta [Come abilitare l'implementazione automatica](autopilot-create-experiment-timeseries-forecasting.md#timeseries-forecasting-auto-model-deployment).

**Per creare un endpoint SageMaker AI utilizzando il tuo miglior candidato modello:**

1. 

**Recupera i dettagli del processo AutoML.**

   Il seguente esempio di AWS CLI comando utilizza l'API [DescribeAutoMLJobV2](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeAutoMLJobV2.html) per ottenere i dettagli del job AutoML, incluse le informazioni sul miglior modello candidato.

   ```
   aws sagemaker describe-auto-ml-job-v2 --auto-ml-job-name job-name --region region
   ```

1. 

**Estrai la definizione del contenitore da [InferenceContainers](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_AutoMLCandidate.html#sagemaker-Type-AutoMLCandidate-InferenceContainers)per il miglior modello candidato.**

   Una definizione di contenitore è l'ambiente containerizzato utilizzato per ospitare il modello di SageMaker intelligenza artificiale addestrato per fare previsioni.

   ```
   BEST_CANDIDATE=$(aws sagemaker describe-auto-ml-job-v2 \
     --auto-ml-job-name job-name 
     --region region \
     --query 'BestCandidate.InferenceContainers[0]' \
     --output json
   ```

   Questo comando estrae la definizione di container per il miglior modello candidato e la archivia nella variabile `BEST_CANDIDATE`.

1. 

**Crea un modello di SageMaker intelligenza artificiale utilizzando la migliore definizione di contenitore candidata.**

   Utilizza le definizioni dei contenitori dei passaggi precedenti per creare un modello di SageMaker intelligenza artificiale utilizzando l'[CreateModel](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModel.html)API.

   ```
   aws sagemaker create-model \
               --model-name 'your-candidate-name>' \
               --primary-container "$BEST_CANDIDATE"
               --execution-role-arn 'execution-role-arn>' \
               --region 'region>
   ```

   Il `--execution-role-arn` parametro specifica il ruolo IAM che l' SageMaker IA assume quando utilizza il modello per l'inferenza. Per i dettagli sulle autorizzazioni richieste per questo ruolo, consulta [CreateModel API:](https://docs.aws.amazon.com/) Execution Role Permissions.

1. 

**Crea una configurazione di endpoint SageMaker AI utilizzando il modello.**

   Il AWS CLI comando seguente utilizza l'[CreateEndpointConfig](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEndpointConfig.html)API per creare una configurazione dell'endpoint.

   ```
   aws sagemaker create-endpoint-config \
     --production-variants file://production-variants.json \
     --region 'region'
   ```

   Dove il file `production-variants.json` contiene la configurazione del modello, inclusi il nome del modello e il tipo di istanza.
**Nota**  
È consigliabile utilizzare le istanze [m5.12xlarge](https://aws.amazon.com/ec2/instance-types/m5/) per le previsioni in tempo reale.

   ```
   [
       {
         "VariantName": "variant-name",
         "ModelName": "model-name",
         "InitialInstanceCount": 1,
         "InstanceType": "m5.12xlarge"
       }
     ]
   }
   ```

1. 

**Crea l'endpoint SageMaker AI utilizzando la configurazione dell'endpoint.**

   L' AWS CLI esempio seguente utilizza l'[CreateEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEndpoint.html)API per creare l'endpoint.

   ```
   aws sagemaker create-endpoint \
               --endpoint-name 'endpoint-name>' \
               --endpoint-config-name 'endpoint-config-name' \
               --region 'region'
   ```

   Controlla lo stato di avanzamento della distribuzione degli endpoint di inferenza in tempo reale utilizzando l'API. [DescribeEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeEndpoint.html) Vedi il AWS CLI comando seguente come esempio.

   ```
   aws sagemaker describe-endpoint \
               --endpoint-name 'endpoint-name' \
               --region 'region'
   ```

   Dopo che `EndpointStatus` cambia in `InService`, l’endpoint è pronto per l’uso per l’inferenza in tempo reale.

1. 

**Invoca l'endpoint SageMaker AI per fare previsioni.**

   ```
   aws sagemaker invoke-endpoint \
               --endpoint-name 'endpoint-name' \ 
               --region 'region' \
               --body file://input-data-in-bytes.json \
               --content-type 'application/json' outfile
   ```

   Dove il file `input-data-in-bytes.json` contiene i dati di input per la previsione.

# Previsione in batch
<a name="timeseries-forecasting-batch"></a>

La previsione in batch, nota anche come inferenza offline, genera previsioni di modelli su un batch di osservazioni. L’inferenza in batch è una buona opzione per set di dati di grandi dimensioni o se non è necessaria una risposta immediata a una richiesta di previsione del modello.

Al contrario, l'inferenza online (inferenza in tempo reale) genera previsioni in tempo reale. 

È possibile SageMaker APIs utilizzarlo per recuperare il miglior candidato di un lavoro AutoML e quindi inviare un batch di dati di input per l'inferenza utilizzando quel candidato.

1. 

**Recupera i dettagli del processo AutoML.**

   Il seguente esempio di AWS CLI comando utilizza l'API [DescribeAutoMLJobV2](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeAutoMLJobV2.html) per ottenere i dettagli del job AutoML, incluse le informazioni sul miglior modello candidato.

   ```
   aws sagemaker describe-auto-ml-job-v2 --auto-ml-job-name job-name --region region
   ```

1. 

**Estrai la definizione del contenitore da [InferenceContainers](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_AutoMLCandidate.html#sagemaker-Type-AutoMLCandidate-InferenceContainers)per il miglior modello candidato.**

   Una definizione di contenitore è l'ambiente containerizzato utilizzato per ospitare il modello di SageMaker intelligenza artificiale addestrato per fare previsioni.

   ```
   BEST_CANDIDATE=$(aws sagemaker describe-auto-ml-job-v2 \
         --auto-ml-job-name job-name 
         --region region \
         --query 'BestCandidate.InferenceContainers[0]' \
         --output json
   ```

   Questo comando estrae la definizione di container per il miglior modello candidato e la archivia nella variabile `BEST_CANDIDATE`.

1. 

**Crea un modello di SageMaker intelligenza artificiale utilizzando la migliore definizione di contenitore candidata.**

   Utilizza le definizioni dei contenitori dei passaggi precedenti per creare un modello di SageMaker intelligenza artificiale utilizzando l'[CreateModel](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModel.html)API.

   ```
   aws sagemaker create-model \
         --model-name 'model-name' \
         --primary-container "$BEST_CANDIDATE"
         --execution-role-arn 'execution-role-arn>' \
         --region 'region>
   ```

   Il `--execution-role-arn` parametro specifica il ruolo IAM che l' SageMaker IA assume quando utilizza il modello per l'inferenza. Per i dettagli sulle autorizzazioni richieste per questo ruolo, consulta [CreateModel API:](https://docs.aws.amazon.com/) Execution Role Permissions.

1. 

**Crea un processo di trasformazione in batch.**

   L'esempio seguente crea un processo di trasformazione utilizzando l'[CreateTransformJob](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/create-transform-job.html)API. 

   ```
   aws sagemaker create-transform-job \ 
          --transform-job-name 'transform-job-name' \
          --model-name 'model-name'\
          --transform-input file://transform-input.json \
          --transform-output file://transform-output.json \
          --transform-resources file://transform-resources.json \
          --region 'region'
   ```

   I dettagli di input, output e risorse sono definiti in file JSON separati:
   + `transform-input.json`:

     ```
     {
       "DataSource": {
         "S3DataSource": {
           "S3DataType": "S3Prefix",
           "S3Uri": "s3://my-input-data-bucket/path/to/input/data"
         }
       },
       "ContentType": "text/csv",
       "SplitType": "None"
     }
     ```
   + `transform-output.json`:

     ```
     {
       "S3OutputPath": "s3://my-output-bucket/path/to/output",
       "AssembleWith": "Line"
     }
     ```
   + `transform-resources.json`:
**Nota**  
È consigliabile utilizzare istanze [m5.12xlarge](https://aws.amazon.com/ec2/instance-types/m5/) per carichi di lavoro generici e istanze `m5.24xlarge` per attività di previsione dei big data.

     ```
     {
       "InstanceType": "instance-type",
       "InstanceCount": 1
     }
     ```

1. 

**Monitora lo stato di avanzamento del processo di trasformazione utilizzando l'[DescribeTransformJob](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeTransformJob.html)API.**

   Vedi il AWS CLI comando seguente come esempio.

   ```
   aws sagemaker describe-transform-job \
         --transform-job-name 'transform-job-name' \
         --region region
   ```

1. 

**Recupera l’output della trasformazione in batch.**

   Al termine del processo, il risultato previsto è disponibile in `S3OutputPath`. 

   Il nome file di output presenta il formato seguente: `input_data_file_name.out`. Ad esempio, se il file di input è `text_x.csv`, il nome di output sarà `text_x.csv.out`.

   ```
   aws s3 ls s3://my-output-bucket/path/to/output/
   ```

I seguenti esempi di codice illustrano l'uso dell' AWS SDK per Python (boto3) e per la previsione in batch. AWS CLI 

------
#### [ AWS SDK for Python (boto3) ]

 L’esempio seguente utilizza **AWS SDK per Python (boto3)** per fare previsioni in batch.

```
import sagemaker 
import boto3

session = sagemaker.session.Session()

sm_client = boto3.client('sagemaker', region_name='us-west-2')
role = 'arn:aws:iam::1234567890:role/sagemaker-execution-role'
output_path = 's3://test-auto-ml-job/output'
input_data = 's3://test-auto-ml-job/test_X.csv'

best_candidate = sm_client.describe_auto_ml_job_v2(AutoMLJobName=job_name)['BestCandidate']
best_candidate_containers = best_candidate['InferenceContainers']
best_candidate_name = best_candidate['CandidateName']

# create model
reponse = sm_client.create_model(
    ModelName = best_candidate_name,
    ExecutionRoleArn = role,
    Containers = best_candidate_containers 
)

# Lauch Transform Job
response = sm_client.create_transform_job(
    TransformJobName=f'{best_candidate_name}-transform-job',
    ModelName=model_name,
    TransformInput={
        'DataSource': {
            'S3DataSource': {
                'S3DataType': 'S3Prefix',
                'S3Uri': input_data
            }
        },
        'ContentType': "text/csv",
        'SplitType': 'None'
    },
    TransformOutput={
        'S3OutputPath': output_path,
        'AssembleWith': 'Line',
    },
    TransformResources={
        'InstanceType': 'ml.m5.2xlarge',
        'InstanceCount': 1,
    },
)
```

Il processo di inferenza batch restituisce una risposta nel formato seguente.

```
{'TransformJobArn': 'arn:aws:sagemaker:us-west-2:1234567890:transform-job/test-transform-job',
 'ResponseMetadata': {'RequestId': '659f97fc-28c4-440b-b957-a49733f7c2f2',
  'HTTPStatusCode': 200,
  'HTTPHeaders': {'x-amzn-requestid': '659f97fc-28c4-440b-b957-a49733f7c2f2',
   'content-type': 'application/x-amz-json-1.1',
   'content-length': '96',
   'date': 'Thu, 11 Aug 2022 22:23:49 GMT'},
  'RetryAttempts': 0}}
```

------
#### [ AWS Command Line Interface (AWS CLI) ]

1. **Ottieni le definizioni dei container di miglior candidati**

   ```
   aws sagemaker describe-auto-ml-job-v2 --auto-ml-job-name 'test-automl-job' --region us-west-2
   ```

1. **Crea il modello**.

   ```
   aws sagemaker create-model --model-name 'test-sagemaker-model'
   --containers '[{
       "Image": "348316444620.dkr.ecr.us-west-2.amazonaws.com/sagemaker-sklearn-automl:2.5-1-cpu-py3",
       "ModelDataUrl": "s3://amzn-s3-demo-bucket/out/test-job1/data-processor-models/test-job1-dpp0-1-e569ff7ad77f4e55a7e549a/output/model.tar.gz",
       "Environment": {
           "AUTOML_SPARSE_ENCODE_RECORDIO_PROTOBUF": "1",
           "AUTOML_TRANSFORM_MODE": "feature-transform",
           "SAGEMAKER_DEFAULT_INVOCATIONS_ACCEPT": "application/x-recordio-protobuf",
           "SAGEMAKER_PROGRAM": "sagemaker_serve",
           "SAGEMAKER_SUBMIT_DIRECTORY": "/opt/ml/model/code"
       }
   }, {
       "Image": "348316444620.dkr.ecr.us-west-2.amazonaws.com/sagemaker-xgboost:1.3-1-cpu-py3",
       "ModelDataUrl": "s3://amzn-s3-demo-bucket/out/test-job1/tuning/flicdf10v2-dpp0-xgb/test-job1E9-244-7490a1c0/output/model.tar.gz",
       "Environment": {
           "MAX_CONTENT_LENGTH": "20971520",
           "SAGEMAKER_DEFAULT_INVOCATIONS_ACCEPT": "text/csv",
           "SAGEMAKER_INFERENCE_OUTPUT": "predicted_label", 
           "SAGEMAKER_INFERENCE_SUPPORTED": "predicted_label,probability,probabilities" 
       }
   }, {
       "Image": "348316444620.dkr.ecr.us-west-2.amazonaws.com/sagemaker-sklearn-automl:2.5-1-cpu-py3", 
       "ModelDataUrl": "s3://amzn-s3-demo-bucket/out/test-job1/data-processor-models/test-job1-dpp0-1-e569ff7ad77f4e55a7e549a/output/model.tar.gz", 
       "Environment": { 
           "AUTOML_TRANSFORM_MODE": "inverse-label-transform", 
           "SAGEMAKER_DEFAULT_INVOCATIONS_ACCEPT": "text/csv", 
           "SAGEMAKER_INFERENCE_INPUT": "predicted_label", 
           "SAGEMAKER_INFERENCE_OUTPUT": "predicted_label", 
           "SAGEMAKER_INFERENCE_SUPPORTED": "predicted_label,probability,labels,probabilities", 
           "SAGEMAKER_PROGRAM": "sagemaker_serve", 
           "SAGEMAKER_SUBMIT_DIRECTORY": "/opt/ml/model/code" 
       } 
   }]' \
   --execution-role-arn 'arn:aws:iam::1234567890:role/sagemaker-execution-role' \
   --region 'us-west-2'
   ```

1. **Crea un processo di trasformazione**.

   ```
   aws sagemaker create-transform-job --transform-job-name 'test-tranform-job'\
    --model-name 'test-sagemaker-model'\
    --transform-input '{
           "DataSource": {
               "S3DataSource": {
                   "S3DataType": "S3Prefix",
                   "S3Uri": "s3://amzn-s3-demo-bucket/data.csv"
               }
           },
           "ContentType": "text/csv",
           "SplitType": "None"
       }'\
   --transform-output '{
           "S3OutputPath": "s3://amzn-s3-demo-bucket/output/",
           "AssembleWith": "Line"
       }'\
   --transform-resources '{
           "InstanceType": "ml.m5.2xlarge",
           "InstanceCount": 1
       }'\
   --region 'us-west-2'
   ```

1. **Controlla lo stato di avanzamento del processo di trasformazione**. 

   ```
   aws sagemaker describe-transform-job --transform-job-name  'test-tranform-job' --region us-west-2
   ```

   Di seguito è riportata la risposta del processo di trasformazione.

   ```
   {
       "TransformJobName": "test-tranform-job",
       "TransformJobArn": "arn:aws:sagemaker:us-west-2:1234567890:transform-job/test-tranform-job",
       "TransformJobStatus": "InProgress",
       "ModelName": "test-model",
       "TransformInput": {
           "DataSource": {
               "S3DataSource": {
                   "S3DataType": "S3Prefix",
                   "S3Uri": "s3://amzn-s3-demo-bucket/data.csv"
               }
           },
           "ContentType": "text/csv",
           "CompressionType": "None",
           "SplitType": "None"
       },
       "TransformOutput": {
           "S3OutputPath": "s3://amzn-s3-demo-bucket/output/",
           "AssembleWith": "Line",
           "KmsKeyId": ""
       },
       "TransformResources": {
           "InstanceType": "ml.m5.2xlarge",
           "InstanceCount": 1
       },
       "CreationTime": 1662495635.679,
       "TransformStartTime": 1662495847.496,
       "DataProcessing": {
           "InputFilter": "$",
           "OutputFilter": "$",
           "JoinSource": "None"
       }
   }
   ```

   Dopo che `TransformJobStatus` cambia in `Completed`, puoi controllare il risultato dell’inferenza in `S3OutputPath`.

------