Salta al contenuto

Come posso risolvere i problemi relativi al mio endpoint di Inferenza serverless Amazon SageMaker AI?

6 minuti di lettura
0

Quando utilizzo un endpoint di Inferenza serverless Amazon SageMaker AI per il mio carico di lavoro, ricevo un errore.

Risoluzione

Risolvi il problema in base al messaggio di errore ricevuto.

Dimensione del container dell'immagine troppo grande per l'endpoint di Inferenza serverless

Gli endpoint di Inferenza serverless supportano il Bring Your Own Container (BYOC), analogamente agli endpoint in tempo reale. AWS Lambda supporta questo tipo specifico di inferenza, ma in tal caso la dimensione del container deve essere inferiore a 10 GB.

Se il container supera il limite di 10 GB, ricevi un messaggio di errore simile al seguente:

"Image size 11271073144 is greater than the supported size 10737418240"

Per risolvere il problema, intraprendi una delle seguenti azioni:

  • Rimuovi i pacchetti inutilizzati e riduci al minimo il numero di livelli nel file Docker per ridurre le dimensioni dell'immagine e ottimizzare il container Docker.
  • Utilizza un'immagine di base più piccola e crea una nuova configurazione dell'endpoint. Specifica il tipo di istanza desiderato e altri parametri pertinenti per ospitare l'endpoint in tempo reale.
  • Passa da un endpoint serverless a un endpoint in tempo reale. Crea una nuova configurazione dell'endpoint per ospitare l'endpoint in tempo reale specificandone il tipo di istanza e altri parametri. Quindi aggiorna l'endpoint esistente con la nuova configurazione.
  1. Per creare una nuova configurazione dell'endpoint, utilizza il seguente modello:
    import boto3
    
    client = boto3.client('sagemaker', region_name = 'us-east-1')
    
    endpoint_config_name = 'new-endpoint-config'
    production_variants = [
        {
            'VariantName': 'AllTraffic',
            'ModelName': 'ModelName',
            'InitialInstanceCount': 1,
            'InstanceType': 'ml.m5.xlarge',
            'InitialVariantWeight': 1.0
        }
    ]
    
    create_endpoint_config_response = client.create_endpoint_config(
        EndpointConfigName=endpoint_config_name,
        ProductionVariants=production_variants
    )
    Nota: sostituisci YourVariantName con il nome della tua variante dell'istanza e YourModelName con il nome del tuo modello. Sostituisci 1 con il tuo numero di istanze iniziale. Sostituisci ml.m5.xlarge con il tuo tipo di istanza. Sostituisci 1.0 con il peso della tua variante iniziale dell'istanza.
  2. Crea un nuovo endpoint con la nuova configurazione per passare da un endpoint serverless a un endpoint in tempo reale. Oppure aggiorna un endpoint serverless esistente con la nuova configurazione.
    Crea un nuovo esempio di endpoint:
    endpoint_name = 'new-endpoint'
    
    create_endpoint_response = client.create_endpoint(
        EndpointName=endpoint_name,
        EndpointConfigName=endpoint_config_name
    )
    Aggiorna un esempio di endpoint esistente:
    endpoint_name = 'my-old-endpoint'
    
    update_endpoint_response = client.update_endpoint(
        EndpointName=endpoint_name,
        EndpointConfigName=endpoint_config_name
    )

Per determinare la dimensione del container, recupera l'URI dell'immagine da Amazon Elastic Container Registry (ECR). Quindi esegui questo comando Docker per ottenere i dettagli dell'immagine Docker:

docker images

Memoria o spazio su disco insufficiente nell'endpoint di Inferenza serverless

Gli endpoint serverless SageMaker AI hanno un'allocazione di memoria massima di 6 GB e una capacità di archiviazione su disco effimera di 5 GB.

Se la memoria dell'endpoint serverless supera il limite, ricevi un messaggio di errore simile al seguente:

"UnexpectedStatusException: Error hosting endpoint: Failed. Reason: Ping failed due to insufficient memory."

Per risolvere il problema, scegli una delle seguenti opzioni:

  • Regola il parametro MemorySizeInMB.
  • Ottimizza la configurazione dei worker.
  • Distribuisci l'endpoint come endpoint in tempo reale e fornisci i dettagli dell'istanza richiesti.

Regola il parametro MemorySizeInMB

  1. Crea una nuova configurazione delll'endpoint serverless con un valore MemorySizeInMB maggiore.
    Esempio:
    import boto3
    
    client = boto3.client('sagemaker', region_name='us-east-1')
    
    endpoint_config_name = "new-endpoint-config"
    
    endpoint_config_response = client.create_endpoint_config(
        EndpointConfigName=endpoint_config_name,
        ProductionVariants=[
            {
                "VariantName": YourVariantName,
                "ModelName": YourModelName,
                "ServerlessConfig": {
                    "MemorySizeInMB": NewMemorySize,
                    "MaxConcurrency": 1,
                },
            },
        ],
    )
    Nota: sostituisci YourVariantName con il nome della tua variante e YourModelName con il nome del tuo modello. Sostituisci NewMemorySize con il nuovo limite per la dimensione della memoria. Il valore massimo utilizzabile è 6 GB.
  2. Aggiorna l'endpoint serverless con la nuova configurazione.
    Esempio:
    endpoint_name = 'my-old-endpoint'
    
    update_endpoint_response = client.update_endpoint(
        EndpointName=endpoint_name,
        EndpointConfigName=endpoint_config_name
    )

Ottimizza la configurazione dei worker

Per evitare un errore di memoria, crea un solo worker nel container che utilizzi tutte le risorse CPU disponibili. Questo approccio è diverso rispetto a quello adottato per endpoint in tempo reale, in cui alcuni container SageMaker AI potrebbero creare un worker per ogni vCPU.

Per i container predefiniti con il kit di strumenti per l’inferenza SageMaker AI, modifica la creazione del modello per l'inferenza impostando SAGEMAKER_MODEL_SERVER_WORKERS su 1.

Esempio:

import boto3

client = boto3.client('sagemaker', region_name='us-east-1')

response = client.create_model(
    ModelName='YourModelName',
    Containers=[
    {
        'Image': "YourImage"
        'Mode': 'SingleModel',
        'ModelDataUrl': "YourModelDataURL",
        'Environment': {
            'SAGEMAKER_CONTAINER_LOG_LEVEL': '20',
            'SAGEMAKER_MODEL_SERVER_WORKERS': '1'
        }
    }
    ],
    ExecutionRoleArn=role
)

Nota: sostituisci YourModelName on il nome del tuo modello, YourImage con il nome della tua immagine e YourModelDataUrl con l'URL dei dati del tuo modello.

Distribuisci l'endpoint come endpoint in tempo reale e fornisci i dettagli dell'istanza richiesti

Per informazioni sulla distribuzione dell'endpoint come endpoint in tempo reale, consulta "Passa da un endpoint serverless a un endpoint in tempo realet" in questo articolo.

Spazio su disco insufficiente

Se l'endpoint serverless non dispone di spazio su disco disponibile, potresti ricevere il seguente messaggio di errore:

"OSError: [Errno 28] No space left on device"

Per risolvere il problema, intraprendi le seguenti azioni:

  • Assicurati che la dimensione del modello compresso non superi lo spazio disponibile su disco quando viene decompresso. Un file decompresso può occupare fino al triplo della sua dimensione compressa.
  • Utilizza un artefatto del modello più piccolo, quindi assicurati che tutti i file nell'archivio .tar siano essenziali per la distribuzione.
  • Se l'inferenza serverless non è praticabile, esegui la distribuzione su un endpoint in tempo reale per personalizzare le specifiche dell'istanza.

Scenari di avvio a freddo negli endpoint di Inferenza serverless

A causa della natura on-demand del provisioning delle risorse e delle limitazioni dell'inferenza serverless di SageMaker AI, non esiste un metodo definitivo per preriscaldare un endpoint di Inferenza serverless SageMaker AI. Per ulteriori informazioni, consulta Riduzione al minimo degli avvii a freddo.

Per la concorrenza assegnata (ProvisionedConcurrency), SageMaker AI mantiene caldo l'endpoint per rispondere entro millisecondi. Per ridurre al minimo i problemi di latenza derivanti dall'avvio a freddo, aggiorna l'endpoint intervenendo sul valore ProvisionedConcurrency. Per ulteriori informazioni, consulta Metriche per il monitoraggio di Amazon SageMaker AI con Amazon CloudWatch.

Completa i seguenti passaggi:

  1. Crea una nuova configurazione dell'endpoint serverless con un valore ProvisionedConcurrency inferiore o uguale a MaxConcurrency.
    Esempio di configurazione:
    import boto3
    client = boto3.client('sagemaker', region_name='us-east-1')
    
    endpoint_config_name = "new-endpoint-config"
    
    endpoint_config_response = client.create_endpoint_config(
        EndpointConfigName=endpoint_config_name,
        ProductionVariants=[
            {
                "VariantName": YourVariantName,
                "ModelName": YourModelName,
                "ServerlessConfig": {
                    "MemorySizeInMB": NewMemorySize,
                    "MaxConcurrency": 1,
                    "ProvisionedConcurrency": 1,
                },
            },
        ],
    )
    Nota: sostituisci YourVariantName con il nome della tua variante e YourModelName con il nome del tuo modello. Sostituisci NewMemorySize con il nuovo limite per la dimensione della memoria. Il valore massimo utilizzabile è 6 GB.
  2. Aggiorna l'endpoint con la nuova configurazione.
    Esempio:
    endpoint_name = 'my-serverless-endpoint'
    update_endpoint_response = client.update_endpoint(
        EndpointName=endpoint_name,
        EndpointConfigName=endpoint_config_name
    )

Nota: per determinare la configurazione di distribuzione più efficiente per un endpoint serverless, è consigliabile utilizzare il kit di strumenti di benchmarking per Inferenza serverless SageMaker AI.

Informazioni correlate

Implementa modelli con Inferenza serverless Amazon SageMaker AI

AWS UFFICIALEAggiornata un anno fa