Implementa modelli con DJL Serving - Amazon SageMaker AI

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

Implementa modelli con DJL Serving

DJL Serving è una soluzione di distribuzione dei modelli universale autonoma ad alte prestazioni. Prende un modello di deep learning, diversi modelli o flussi di lavoro e li rende disponibili tramite un endpoint HTTP.

È possibile utilizzare uno dei Container di Deep Learning (DLC) di DJL Serving per fornire i propri modelli su AWS. Per conoscere i tipi di modello e i framework supportati, consulta il repository GitHub di DJL Serving.

DJL Serving offre molte funzionalità che aiutano a implementare i propri modelli con prestazioni elevate:

  • Facilità d'uso: DJL Serving può servire con la maggior parte dei modelli senza alcuna modifica. Tu usi gli artefatti del modello e DJL Serving può ospitarli.

  • Supporto per più dispositivi e acceleratori: DJL Serving supporta l'implementazione di modelli su CPU, GPU e Inferentia AWS.

  • Prestazioni: DJL Serving esegue l'inferenza multithread in un'unica macchina virtuale Java (JVM) per aumentare il throughput.

  • Batching dinamico: DJL Serving supporta il batching dinamico per aumentare il throughput.

  • Dimensionamento automatico: DJL Serving aumenta o riduce automaticamente i worker in base al carico di traffico.

  • Supporto multimotore: DJL Serving può ospitare i modelli contemporaneamente utilizzando diversi framework (ad esempio, PyTorch e TensorFlow).

  • Modelli di flusso di lavoro e ensemble: DJL Serving supporta l'implementazione di flussi di lavoro complessi composti di più modelli e può eseguire parti del flusso di lavoro su CPU e altre parti su GPU. I modelli all'interno di un flusso di lavoro possono sfruttare diversi framework.

Le sezioni seguenti descrivono come configurare un endpoint con DJL Serving su SageMaker AI.

Nozioni di base

Per iniziare, assicurati di rispettare i seguenti prerequisiti:

  1. Assicurati di avere accesso a un account AWS. Configura il tuo ambiente in modo tale che AWS CLI possa accedere al tuo account tramite un ruolo IAM o un utente IAM AWS. Consigliamo di utilizzare un ruolo IAM. Ai fini del test nel tuo account personale, puoi collegare le seguenti policy di autorizzazione gestita al ruolo IAM:

  2. Assicurati di avere il docker client configurato sul tuo sistema.

  3. Accedi ad Amazon Elastic Container Registry e imposta le seguenti variabili di ambiente:

    export ACCOUNT_ID=<your_account_id> export REGION=<your_region> aws ecr get-login-password --region $REGION | docker login --username AWS --password-stdin $ACCOUNT_ID.dkr.ecr.$REGION.amazonaws.com
  4. Estrai l'immagine docker.

    docker pull 763104351884.dkr.ecr.us-west-2.amazonaws.com/djl-inference:0.22.1-deepspeed0.9.2-cu118

    Per tutte le immagini container di DJL Serving disponibili, consulta i container di inferenza per modelli di grandi dimensioni e i container di inferenza per CPU di DJL Serving. Quando scegli un'immagine dalle tabelle dei link precedenti, sostituisci la regione AWS nella colonna URL di esempio con la Regione in cui ti trovi. I DLC sono disponibili nelle Regioni elencate nella tabella nella parte superiore della pagina Immagine di container di Deep Learning disponibili.

Personalizza il tuo container

Puoi aggiungere pacchetti alle immagini DLC di base per personalizzare il container. Supponiamo di voler aggiungere un pacchetto all'immagine docker 763104351884.dkr.ecr.us-west-2.amazonaws.com/djl-inference:0.22.1-deepspeed0.9.2-cu118. È necessario creare un dockerfile con l'immagine desiderata come immagine di base, aggiungere i pacchetti richiesti e inviare l'immagine ad Amazon ECR.

Per creare un pacchetto, completa la seguente procedura:

  1. Specifica le istruzioni per eseguire le librerie o i pacchetti desiderati nel dockerfile dell'immagine di base.

    FROM 763104351884.dkr.ecr.us-west-2.amazonaws.com/djl-inference:0.22.1-deepspeed0.9.2-cu118 ## add custom packages/libraries RUN git clone https://github.com/awslabs/amazon-sagemaker-examples
  2. Crea l'immagine Docker dal tuo dockerfile. Specifica il tuo repository di Amazon ECR, il nome dell'immagine di base e un tag per l'immagine. Se non disponi di un repository di Amazon ECR, consulta Utilizzare Amazon ECR con AWS CLI nella Guida per l'utente di Amazon ECR per istruzioni su come crearne uno.

    docker build -f Dockerfile -t <registry>/<image_name>:<image_tag>
  3. Invia l'immagine Docker al tuo repository di Amazon ECR.

    docker push $ACCOUNT_ID.dkr.ecr.$REGION.amazonaws.com/<image_name>:<image_tag>

Ora dovresti avere un'immagine del container personalizzata da poter utilizzare per la distribuzione dei modelli. Per altri esempi di personalizzazione del container, consulta Creazione di immagini personalizzate dei container di Deep Learning AWS.

Preparazione degli artefatti del modello

Prima di implementare il tuo modello su SageMaker AI, devi creare pacchetti con gli artefatti del modello in un file .tar.gz. DJL Serving accetta i seguenti artefatti nel tuo archivio:

  • Checkpoint del modello: file che memorizzano le ponderazioni del modello.

  • serving.properties: un file di configurazione che è possibile aggiungere per ogni modello. Inserisci serving.properties nella stessa directory del file del tuo modello.

  • model.py: codice del gestore di inferenza. È applicabile solo quando si utilizza la modalità Python. Se non specifichi model.py, djl-serving utilizza uno dei gestori predefiniti.

Di seguito è riportato un esempio di struttura model.tar.gz:

- model_root_dir # root directory - serving.properties - model.py # your custom handler file for Python, if you choose not to use the default handlers provided by DJL Serving - model binary files # used for Java mode, or if you don't want to use option.model_id and option.s3_url for Python mode

DJL Serving supporta i motori Java alimentati da motori DJL o Python. Non tutti gli artefatti precedenti sono obbligatori. Gli artefatti obbligatori variano in base alla modalità scelta. Ad esempio, in modalità Python, è sufficiente specificare option.model_id nel file serving.properties. Non è necessario specificare il checkpoint del modello all'interno dei container LMI. In modalità Java, è necessario inserire il checkpoint del modello nel pacchetto. Per maggiori dettagli sul modo per configurare serving.properties e utilizzare motori diversi, consulta Modalità di gestione di DJL Serving.

Utilizza endpoint a modello singolo per l'implementazione con DJL Serving

Dopo aver preparato gli artefatti del modello, puoi implementare il modello su un endpoint di SageMaker AI. Questa sezione descrive come implementare un modello unico su un endpoint con DJL Serving. Se stai implementando più modelli, salta questa sezione e vai a Usa endpoint multimodello per implementazioni con DJL Serving.

L'esempio seguente mostra un metodo per creare un oggetto modello utilizzando Amazon SageMaker Python SDK. Sarà necessario specificare i seguenti campi:

  • image_uri: puoi recuperare una delle immagini di base di DJL Serving come mostrato in questo esempio, oppure puoi specificare un'immagine Docker personalizzata dal tuo repository di Amazon ECR, se hai seguito le istruzioni in Personalizza il tuo container.

  • model_s3_url: dovrebbe essere un URI Amazon S3 che punta al tuo file .tar.gz.

  • model_name: specificate un nome per l'oggetto modello.

import boto3 import sagemaker from sagemaker.model import Model from sagemaker import image_uris, get_execution_role aws_region = "aws-region" sagemaker_session = sagemaker.Session(boto_session=boto3.Session(region_name=aws_region)) role = get_execution_role() def create_model(model_name, model_s3_url): # Get the DJL DeepSpeed image uri image_uri = image_uris.retrieve( framework="djl-deepspeed", region=sagemaker_session.boto_session.region_name, version="0.20.0" ) model = Model( image_uri=image_uri, model_data=model_s3_url, role=role, name=model_name, sagemaker_session=sagemaker_session, ) return model

Usa endpoint multimodello per implementazioni con DJL Serving

Se desideri implementare più modelli su un endpoint, SageMaker AI offre gli endpoint multi-modello, una soluzione scalabile ed economica per l’implementazione di un numero elevato di modelli. DJL Serving supporta anche il caricamento di più modelli contemporaneamente e l'esecuzione di inferenze su ciascuno dei modelli contemporaneamente. I container DJL Serving sono conformi ai contratti di endpoint multi-modello di SageMaker AI e possono essere utilizzati per implementare endpoint multi-modello.

Ogni singolo artefatto del modello deve essere inserito in pacchetti nello stesso modo descritto nella sezione precedente Preparazione degli artefatti del modello. È possibile impostare configurazioni specifiche del modello nel file serving.properties e il codice del gestore di inferenza specifico del modello in model.py. Per un endpoint multimodello, i modelli devono essere disposti nel modo seguente:

root_dir |-- model_1.tar.gz |-- model_2.tar.gz |-- model_3.tar.gz . . .

Amazon SageMaker Python SDK utilizza l'oggetto MultiDataModel per creare un'istanza di un endpoint multimodello. L'URI Amazon S3 per la directory root deve essere passato come argomento model_data_prefix al costruttore MultiDataModel.

DJL Serving fornisce anche diversi parametri di configurazione per gestire i requisiti di memoria del modello, come required_memory_mb e reserved_memory_mb, che possono essere configurati per ciascun modello nel file serving.properties. Questi parametri sono utili per gestire gli errori per memoria insufficiente in modo più efficiente. Per tutti i parametri configurabili, consulta Gestione di OutOfMemory in djl-serving.

La funzione di dimensionamento automatico di DJL Serving rende più facile garantire che i modelli siano dimensionati in modo appropriato per il traffico in entrata. Per impostazione predefinita, DJL Serving determina il numero massimo di worker per un modello che può essere supportato in base all'hardware disponibile (ad esempio i core CPU o i dispositivi GPU). È possibile impostare limiti inferiori e superiori per ogni modello per garantire che sia sempre possibile fornire un livello di traffico minimo e che un singolo modello non consumi tutte le risorse disponibili. È possibile impostare le seguenti proprietà nel file serving.properties:

  • gpu.minWorkers: numero minimo di worker per GPU.

  • gpu.maxWorkers: numero massimo di worker per GPU.

  • cpu.minWorkers: numero minimo di worker per CPU.

  • cpu.maxWorkers: numero massimo di worker per CPU.

Per un esempio completo di come implementare un endpoint multi-modello su SageMaker AI utilizzando un container DJL Serving, consulta il notebook di esempio Multi-model-Inference-Demo.ipynb.