

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

# SageMaker Guida alla risoluzione dei problemi di Python SDK
<a name="sagemaker-python-sdk-troubleshooting"></a>

Puoi utilizzare l'SDK SageMaker Python per interagire con Amazon SageMaker AI all'interno dei tuoi script Python o dei notebook Jupyter. Nonostante l’SDK fornisca un flusso di lavoro semplificato, potresti riscontrare diverse eccezioni o errori. Questa guida alla risoluzione dei problemi ha lo scopo di aiutarti a comprendere e risolvere i problemi più comuni che potrebbero sorgere quando lavori con SageMaker Python SDK. Copre scenari relativi alla creazione di job di addestramento, processi di elaborazione ed endpoint, nonché pratiche generali di gestione delle eccezioni. Seguendo le indicazioni fornite nelle sezioni seguenti, puoi diagnosticare e risolvere in modo efficace i problemi più comuni.

L'SDK SageMaker Python funge da wrapper per le operazioni API di basso livello. SageMaker Il ruolo IAM che stai utilizzando per accedere all’SDK deve poter accedere alle operazioni sottostanti. Aggiungere l' SageMaker AI Full Access Policy al tuo ruolo IAM è il modo più semplice per assicurarti di avere le autorizzazioni per utilizzare l'SDK Python SageMaker . Per ulteriori informazioni sull' SageMaker AI Full Access Policy, consulta [Amazon SageMaker AI Full Access](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonSageMakerFullAccess.html).

Pur essendo meno conveniente, la scelta di fornire autorizzazioni più granulari è un approccio sicuro all’uso dell’SDK. Ciascuna delle sezioni seguenti contiene informazioni sulle autorizzazioni richieste.

## Creazione di un job di addestramento
<a name="sagemaker-python-sdk-troubleshooting-create-training-job"></a>

**Importante**  
Se non stai aggiungendo la policy SageMaker AI Full Access al tuo ruolo IAM, deve disporre delle autorizzazioni per chiamare le [DescribeTrainingJob](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeTrainingJob.html)operazioni [CreateTrainingJob](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html)and.  
Richiede inoltre le autorizzazioni per:  
Accedi ai input/output dati in S3
Eseguire istanze di Amazon EC2
Metriche di registro CloudWatch 
Se il tuo processo di SageMaker formazione deve accedere alle risorse in un Amazon Virtual Private Cloud (Amazon VPC), assicurati di configurare le impostazioni VPC e i gruppi di sicurezza necessari quando crei il processo di elaborazione.

Quando crei un job di addestramento, potresti imbatterti in eccezioni `botocore.exceptions.ClientError` o `ValueError`.

------
#### [ ValueError ]

Le eccezioni `ValueError` si verificano quando c’è un problema con i valori o i parametri che stai passando a una funzione. Utilizza l’elenco seguente per visualizzare esempi di eccezioni `ValueError` e indicazioni su come correggerle.
+ `ValueError: either image_uri or algorithm_arn is required. None was provided`:
  + Se utilizzi la funzione `AlgorithmEstimator`, fornisci `algorithm_arn`.
  + Se utilizzi la funzione `Estimator`, fornisci `estimator_arn`.
+ `ValueError: Unknown input channel: train is not supported by: scikit-decision-trees-15423055-57b73412d2e93e9239e4e16f83298b8f`

  Questo errore viene visualizzato quando fornisci un canale di input non valido. Un canale di input è un’origine dati o un parametro previsti dal modello.

  Nella pagina [Tipi di algoritmi](algorithms-choose.md) puoi accedere al modello per trovare informazioni sui suoi canali di input.

  Puoi anche trovare informazioni sui canali di input nella sezione **Utilizzo** della Marketplace AWS pagina dell'algoritmo.

  Utilizza la procedura seguente per ottenere informazioni sui canali di input di un algoritmo.

**Per ottenere informazioni sui canali di input di un algoritmo**

  1. Vai alla [console SageMaker AI](https://console.aws.amazon.com/sagemaker).

  1. Nel pannello di navigazione a sinistra, scegli **Addestramento**.

  1. Seleziona **Algoritmi**.

  1. Scegli **Trova algoritmo**.

  1. Trova il tuo algoritmo nell’elenco risultante.

  1. Seleziona la scheda **Utilizzo**.

  1. Vai all’intestazione delle **specifiche del canale**.

------
#### [ botocore.exceptions.ClientError ]

`botocore.exceptions.ClientError`le eccezioni si verificano quando un AWS servizio sottostante genera un'eccezione. Questo potrebbe dipendere da vari motivi, ad esempio parametri errati, problemi di autorizzazioni o vincoli di risorse. Utilizza l’elenco seguente come contesto per le eccezioni `botocore.exceptions.ClientError` e per ottenere informazioni su come correggerle.
+ `ResourceLimitExceeded`— Il tuo AWS account non ha accesso alle istanze Amazon EC2 necessarie per eseguire il processo di formazione. Per accedere, richiedi un aumento della quota. Per informazioni sugli aumenti delle quote, consulta [Service Quotas](https://docs.aws.amazon.com/general/latest/gr/sagemaker.html#limits_sagemaker). Utilizza l’elenco seguente per informazioni sulle eccezioni `botocore.exceptions.ClientError`.
+ `ValidationException`: le eccezioni di convalida si verificano se hai utilizzato il tipo di istanza Amazon EC2 errato per il job di addestramento. Possono verificarsi anche quando il ruolo IAM che stai utilizzando non dispone delle autorizzazioni per il job di addestramento.

------

## Aggiornamento di un job di addestramento.
<a name="sagemaker-python-sdk-troubleshooting-update-training-job"></a>

**Importante**  
Se non stai aggiungendo l' SageMaker AI Managed Policy al tuo ruolo IAM, devi concedere al ruolo l'accesso alle seguenti autorizzazioni:  
`s3:GetObject`: fornisce le autorizzazioni per leggere gli artefatti del modello dai bucket Amazon S3
`s3:PutObject`: se applicabile, fornisce le autorizzazioni per scrivere aggiornamenti negli artefatti del modello
`iam:GetRole`: fornisce le autorizzazioni per ottenere informazioni sul ruolo IAM necessario per eseguire il job di addestramento.
`sagemaker:UpdateTrainingJob`— Fornisce le autorizzazioni per modificare i lavori di formazione utilizzando l'[UpdateTrainingJob](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateTrainingJob.html)operazione.
`logs:PutLogEvents`— Fornisce le autorizzazioni per scrivere log nei log di Amazon durante il CloudWatch processo di aggiornamento.

Quando aggiorni un job di addestramento, potresti imbatterti in eccezioni `botocore.exceptions.ParamValidationError` o `botocore.exceptions.ClientError`.

------
#### [ botocore.exceptions.ClientError ]

`ClientError` mostra il messaggio seguente:

```
botocore.exceptions.ClientError: An error occurred (ValidationException) when calling the UpdateTrainingJob operation: Invalid UpdateTrainingJobRequest, the request cannot be empty            
```

Se riscontri questo errore, devi includere uno dei seguenti parametri insieme al nome del job di addestramento:
+ `profiler_rule_configs` (elenco): un elenco di configurazioni delle regole del profiler. Per impostazione predefinita, non esistono configurazioni delle regole del profiler.
+ `profiler_config`(dict) — La configurazione per SageMaker AI Profiler raccoglie le metriche e le invia. Per impostazione predefinita, non esiste una configurazione del profiler.
+ `resource_config` (dict): la configurazione per le risorse del job di addestramento. Puoi aggiornare il periodo keep-alive se lo stato del warm pool è `Available`. Nessun altro campo può essere aggiornato.
+ `remote_debug_config` (dict): la configurazione per `RemoteDebug`. Il dizionario può contenere `EnableRemoteDebug` (bool). 

------
#### [ botocore.exceptions.ParamValidationError ]

`botocore.exceptions.ParamValidationError` presenta il seguente errore:

```
botocore.exceptions.ParamValidationError: Parameter validation failed:
Invalid type for parameter ProfilerRuleConfigurations, value: {'DisableProfiler': False}, type: <class 'dict'>, valid types: <class 'list'>, <class 'tuple'>
```

Questa eccezione può verificarsi se il parametro non viene fornito nel formato previsto dalla funzione `update_training_job`. Ad esempio, il parametro `profiler_rule_configs` previsto dovrebbe essere un elenco. Se invece il parametro viene passato come dizionario, si verifica un errore.

------

## Creazione un processo di elaborazione
<a name="sagemaker-python-sdk-troubleshooting-create-processing-job"></a>

**Importante**  
Se non stai aggiungendo l' SageMaker AI Managed Policy al tuo ruolo IAM, devi concedere al ruolo l'accesso alle seguenti autorizzazioni:  
`sagemaker:CreateProcessingJob`: fornisce le autorizzazioni per creare un processo di elaborazione
`sagemaker:DescribeProcessingJob`: fornisce le autorizzazioni per ottenere informazioni su un processo di elaborazione
`s3:GetObject`: fornisce le autorizzazioni per leggere gli artefatti del modello dai bucket Amazon S3
`s3:PutObject`: se applicabile, fornisce le autorizzazioni per scrivere aggiornamenti negli artefatti del modello
`logs:PutLogEvents`— Fornisce le autorizzazioni per scrivere i log nei log di Amazon durante il CloudWatch processo di aggiornamento.
Se il processo di elaborazione deve accedere a risorse all’interno di un Amazon Virtual Private Cloud, devi specificarne `security_group_ids` e `subnets` quando crei lo strumento di stima. Per un esempio di come accedere alle risorse all’interno di un Amazon VPC, consulta [Secure Training and Inference with VPC](https://sagemaker.readthedocs.io/en/stable/overview.html#secure-training-and-inference-with-vpc).

Quando crei un processo di elaborazione, potresti imbatterti in errori `ValueError`, `UnexpectedStatusException` o `botocore.exceptions.ClientError`.

------
#### [ ValueError ]

Di seguito è riportato un esempio di `ValueError`:

```
ValueError: code preprocess.py wasn't found. Please make sure that the file exists.           
```

Il percorso che hai specificato non era corretto. Puoi specificare un percorso relativo o assoluto per il file di script. [Per ulteriori informazioni sulla specificazione dei percorsi dei file, consulta sagemaker.processing. RunArgs](https://sagemaker.readthedocs.io/en/stable/api/training/processing.html#sagemaker.processing.RunArgs).

------
#### [ UnexpectedStatusException ]

Di seguito è riportato un esempio di `UnexpectedStatusException`:

```
UnexpectedStatusException: Error for Processing job sagemaker-scikit-learn-2024-07-02-14-08-55-993: Failed. Reason: AlgorithmError: , exit code: 1           
```

Il traceback che accompagna l’eccezione può aiutarti a identificare la causa principale:

```
Traceback (most recent call last):
  File "/opt/ml/processing/input/code/preprocessing.py", line 51, in <module>
    df = pd.read_csv(input_data_path)
  .
  .
  .
  File "pandas/_libs/parsers.pyx", line 689, in pandas._libs.parsers.TextReader._setup_parser_source
FileNotFoundError: [Errno 2] File b'/opt/ml/processing/input/census-income.csv' does not exist: b'/opt/ml/processing/input/census-income.csv'
```

L’errore `"FileNotFoundError: [Errno 2] File b'/opt/ml/processing/input/census-income.csv' does not exist"` indica che il file di input `census-income.csv` non è stato trovato nel percorso specificato `/opt/ml/processing/input/`. Verifica che i dati di input vengano forniti correttamente e che lo script di pre-elaborazione stia copiando i dati nel percorso previsto.

------
#### [ botocore.exceptions.ClientError ]

Di seguito è riportato un esempio di `botocore.exceptions.ClientError`:

```
botocore.exceptions.ClientError: An error occurred (ValidationException) when calling the CreateProcessingJob operation: RoleArn: Cross-account pass role is not allowed.
```

L'`"Cross-account pass role is not allowed in create processing job"`errore si verifica quando si tenta di creare un SageMaker processo di elaborazione utilizzando un ruolo IAM da un AWS account diverso. Questa funzionalità di sicurezza garantisce che i ruoli e le autorizzazioni siano gestiti all’interno di ciascun account. Per risolvere il problema, procedi come descritto di seguito:

1. Verifica che il ruolo IAM si trovi nello stesso account del processo di elaborazione. I ruoli multi-account richiedono un’autorizzazione esplicita

1. Se utilizzi un ruolo di un altro account, aggiornane la policy di attendibilità per consentire all’account che ha creato il processo di elaborazione di assumere il ruolo.

1. Assicurati che il ruolo disponga delle autorizzazioni necessarie per i processi di elaborazione come `sagemaker:CreateProcessingJob` o `iam:PassRole`.

------

## Creazione di un endpoint
<a name="sagemaker-python-sdk-troubleshooting-create-endpoint"></a>

**Importante**  
Se non stai aggiungendo l' SageMaker AI Managed Policy al tuo ruolo IAM, devi concedere al ruolo l'accesso alle seguenti autorizzazioni:  
`sagemaker:CreateModel`: fornisce le autorizzazioni per creare il modello che stai implementando sull’endpoint
`sagemaker:CreateEndpointConfig`: fornisce le autorizzazioni per creare una configurazione dell’endpoint che definisce il comportamento dell’endpoint, ad esempio il tipo e il numero di istanze
`sagemaker:CreateEndpoint`: fornisce le autorizzazioni per creare la configurazione dell’endpoint utilizzando l’endpoint specificato
Inoltre, sono necessarie le autorizzazioni per descrivere ed elencare i modelli, gli endpoint e le configurazioni degli endpoint.

Quando crei un endpoint, potresti imbatterti in un errore `UnexpectedStatusException` o `botocore.exceptions.ClientError`.

Di seguito è riportato un esempio di `UnexpectedStatusException`:

```
UnexpectedStatusException: Error hosting endpoint gpt2-large-2024-07-03-15-28-20-448: Failed. Reason: The primary container for production variant AllTraffic did not pass the ping health check. Please check CloudWatch logs for this endpoint.. Try changing the instance type or reference the troubleshooting page https://docs.aws.amazon.com/sagemaker/latest/dg/async-inference-troubleshooting.html            
```

Il messaggio di errore ti dice di controllare i CloudWatch log di Amazon. Utilizza la procedura seguente per controllare i log.

**Per controllare i log CloudWatch**

1. Accedi alla [console Amazon SageMaker AI](https://console.aws.amazon.com/sagemaker).

1. Nel riquadro di navigazione a sinistra, scegli **Endpoint**.

1. Seleziona l’endpoint in cui si è verificato l’errore.

1. Nella pagina dei **dettagli dell'endpoint**, scegli **Visualizza accessi. CloudWatch**

Dopo aver trovato i log, cerca il problema specifico. Di seguito è riportato un esempio di registro: CloudWatch 

```
NotImplementedError: gptq quantization is not supported for AutoModel, you can try to quantize it with text-generation-server quantize ORIGINAL_MODEL_ID NEW_MODEL_ID            
```

Per informazioni sulla risoluzione di `botocore.exceptions.ClientError`, consulta [Guida alla gestione delle eccezioni](#sagemaker-python-sdk-troubleshooting-exception-handling).

## Aggiornamento di un endpoint
<a name="sagemaker-python-sdk-troubleshooting-update-endpoint"></a>

**Importante**  
Se non stai aggiungendo l' SageMaker AI Managed Policy al tuo ruolo IAM, devi concedere al ruolo l'accesso alle seguenti autorizzazioni:  
`sagemaker:UpdateEndpoint`: fornisce le autorizzazioni per aggiornare un endpoint esistente, ad esempio per modificare il tipo o il numero delle istanze dell’endpoint
`sagemaker:UpdateEndpointWeightsAndCapacities`: fornisce le autorizzazioni per creare una configurazione dell’endpoint che definisce il comportamento dell’endpoint, ad esempio il tipo e il numero di istanze
`sagemaker:DescribeEndpoint`: fornisce le autorizzazioni per descrivere la configurazione corrente dell’endpoint, spesso richiesta prima dell’aggiornamento
Inoltre, potrebbero essere necessarie le autorizzazioni per descrivere ed elencare gli endpoint e le configurazioni degli endpoint.

Puoi imbatterti in un errore `ValueError` come il seguente:

```
ValueError: Endpoint with name 'abc' does not exist; please use an existing endpoint name            
```

L'errore indica che il nome dell'endpoint specificato non corrisponde a nessun endpoint esistente nel tuo account. AWS Utilizza la procedura seguente per risolvere l’errore:

**Per risolvere un errore di valore**

1. Utilizza questo codice per elencare tutti gli endpoint:

   ```
   import sagemaker
   sagemaker_session = sagemaker.Session()
   # List all endpoints
   endpoints = sagemaker_session.sagemaker_client.list_endpoints()
   print(endpoints)
   ```

1. Verifica che l’endpoint che hai specificato per la funzione `update_endpoint` sia nell’elenco.

1. Assicurati di operare nella regione corretta AWS . SageMaker Gli endpoint AI sono specifici della regione.

1. Assicurati che il ruolo IAM che stai utilizzando disponga delle autorizzazioni per elencare, descrivere o aggiornare gli endpoint.

## Guida alla gestione delle eccezioni
<a name="sagemaker-python-sdk-troubleshooting-exception-handling"></a>

Se non riesci a trovare informazioni che ti aiutino a risolvere un problema specifico, gli esempi di codice seguenti potrebbero darti qualche idea su come gestire le eccezioni.

Di seguito è riportato un esempio generico che puoi utilizzare per rilevare la maggior parte delle eccezioni.

```
import sagemaker
from botocore.exceptions import ParamValidationError, ClientError

try:
    sagemaker.some_api_call(SomeParam='some_param')

except ClientError as error:
    # Put your error handling logic here
    raise error

except ParamValidationError as error:
    raise ValueError('The parameters you provided are incorrect: {}'.format(error))
    
except ValueError as error:
    # Catch generic ValueError exceptions
```

Esistono due categorie principali di errori:
+ Errori specifici dell'SDK SageMaker Python
+ Errori specifici del servizio sottostante AWS 

Gli errori specifici del AWS servizio sottostante sono sempre `botocore.exceptions.ClientError` eccezioni. `botocore.exceptions.ClientError` ha un oggetto `Error` e un oggetto `ResponseMetadata`. Di seguito viene mostrato il modello di un errore del client:

```
{
    'Error': {
        'Code': 'SomeServiceException',
        'Message': 'Details/context around the exception or error'
    },
    'ResponseMetadata': {
        'RequestId': '1234567890ABCDEF',
        'HostId': 'host ID data will appear here as a hash',
        'HTTPStatusCode': 400,
        'HTTPHeaders': {'header metadata key/values will appear here'},
        'RetryAttempts': 0
    }
}
```

Di seguito è riportato un esempio della gestione specifica degli errori che puoi eseguire con `botocore.exceptions.ClientError`:

```
try:
    sagemaker.some_api_call(SomeParam='some_param')

except botocore.exceptions.ClientError as err:
    if err.response['Error']['Code'] == 'InternalError': # Generic error
        # We grab the message, request ID, and HTTP code to give to customer support
        print('Error Message: {}'.format(err.response['Error']['Message']))
        print('Request ID: {}'.format(err.response['ResponseMetadata']['RequestId']))
        print('Http code: {}'.format(err.response['ResponseMetadata']['HTTPStatusCode']))
        raise err
    else if err.response['Error']['Code'] == 'ValidationException':
       raise ValueError(err.response['Error']['Message'])
```

Per ulteriori informazioni su come gestire le `ClientError` eccezioni, consulta [Analisi delle risposte agli errori e rilevamento delle eccezioni da. Servizi AWS](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/error-handling.html#parsing-error-responses-and-catching-exceptions-from-aws-services)