Esegui modelli ML ensemble su Amazon SageMaker PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.

Esegui modelli ML ensemble su Amazon SageMaker

L'implementazione dei modelli nell'apprendimento automatico (ML) sta diventando sempre più complessa. Si desidera distribuire non solo un modello ML, ma grandi gruppi di modelli ML rappresentati come flussi di lavoro insieme. Questi flussi di lavoro sono costituiti da più modelli ML. La produzione di questi modelli ML è impegnativa perché è necessario rispettare vari requisiti di prestazioni e latenza.

Amazon Sage Maker supporta insiemi a istanza singola con Server di inferenza Triton. Questa funzionalità consente di eseguire insiemi di modelli che si adattano a una singola istanza. Dietro le quinte, SageMaker sfrutta Triton Inference Server per gestire l'insieme su ogni istanza dietro l'endpoint per massimizzare il throughput e l'utilizzo dell'hardware con una latenza di inferenza estremamente bassa (millisecondi a una cifra). Con Triton, puoi anche scegliere tra un'ampia gamma di framework ML supportati (inclusi TensorFlow, PyTorch, ONNX, XGBoost e NVIDIA TensorRT) e backend dell'infrastruttura, tra cui GPU, CPU e AWS Inferenza.

Con questa funzionalità su SageMaker, puoi ottimizzare i tuoi carichi di lavoro evitando costose latenza di rete e sfruttando i vantaggi della localizzazione dei dati e di calcolo per le pipeline di inferenza di ensemble. In questo post, discutiamo dei vantaggi derivanti dall'utilizzo di Triton Inference Server insieme a considerazioni su se questa sia l'opzione giusta per il tuo carico di lavoro.

Panoramica della soluzione

Triton Inference Server è progettato per consentire ai team di distribuire, eseguire e scalare modelli di intelligenza artificiale addestrati da qualsiasi framework su qualsiasi infrastruttura basata su GPU o CPU. Inoltre, è stato ottimizzato per offrire inferenza ad alte prestazioni su larga scala con funzionalità come batching dinamico, esecuzioni simultanee, configurazione ottimale del modello, funzionalità di ensemble di modelli e supporto per input in streaming.

I carichi di lavoro dovrebbero tenere conto delle capacità fornite da Triton per garantire che i propri modelli possano essere serviti. Triton supporta una serie di framework popolari pronti all'uso, tra cui TensorFlow, PyTorch, ONNX, XGBoost e NVIDIA TensorRT. Triton supporta anche vari backend necessari affinché gli algoritmi funzionino correttamente. Dovresti assicurarti che i tuoi modelli siano supportati da questi backend e, nel caso in cui un backend non lo faccia, Triton ti consente di implementarne uno tuo e di integrarlo. Dovresti anche verificare che la versione del tuo algoritmo sia supportata e assicurarti che gli artefatti del modello siano accettabili dal backend corrispondente. Per verificare se il tuo particolare algoritmo è supportato, fai riferimento a Backend del server di inferenza Triton per un elenco dei backend supportati nativamente gestiti da NVIDIA.

Potrebbero esserci alcuni scenari in cui i tuoi modelli o gruppi di modelli non funzioneranno su Triton senza richiedere maggiori sforzi, ad esempio se non esiste un backend supportato nativamente per il tuo algoritmo. Ci sono alcune altre considerazioni da tenere in considerazione, ad esempio il formato del payload potrebbe non essere l'ideale, soprattutto quando le dimensioni del payload potrebbero essere grandi per la tua richiesta. Come sempre, dovresti convalidare le tue prestazioni dopo aver distribuito questi carichi di lavoro per assicurarti che le tue aspettative siano soddisfatte.

Prendiamo un modello di rete neurale di classificazione delle immagini e vediamo come possiamo accelerare i nostri carichi di lavoro. In questo esempio, utilizziamo il backend NVIDIA DALI per accelerare la nostra preelaborazione nel contesto del nostro insieme.

Crea gruppi di modelli Triton

Triton Inference Server semplifica l'implementazione di modelli IA su larga scala. Triton Inference Server viene fornito con una soluzione conveniente che semplifica la creazione di pipeline di preelaborazione e postelaborazione. La piattaforma Triton Inference Server fornisce lo scheduler dell'ensemble, che puoi utilizzare per creare modelli di ensemble di pipeline che partecipano al processo di inferenza garantendo efficienza e ottimizzando il throughput.

Triton Inference Server serve modelli da repository di modelli. Diamo un'occhiata al layout del repository di modelli per il modello di ensemble contenente il modello di preelaborazione DALI, il modello V3 iniziale di TensorFlow e la configurazione di ensemble del modello. Ciascuna sottodirectory contiene le informazioni sul repository per i modelli corrispondenti. IL config.pbtxt il file descrive la configurazione del modello per i modelli. Ogni directory deve avere una sottocartella numerica per ogni versione del modello ed è gestita da un backend specifico supportato da Triton.

Repository dei modelli NVIDIA Triton

NVIDIA DALI

Per questo post, utilizziamo la libreria NVIDIA Data Loading Library (DALI) come modello di preelaborazione nel nostro insieme di modelli. NVIDIA DALI è una libreria per il caricamento e la preelaborazione dei dati per accelerare le applicazioni di deep learning. Fornisce una raccolta di elementi costitutivi ottimizzati per il caricamento e l'elaborazione di dati di immagini, video e audio. Puoi utilizzarlo come sostituto portatile dei caricatori di dati e degli iteratori di dati integrati nei framework di deep learning più diffusi.

NVIDIA Dalì

Il codice seguente mostra la configurazione del modello per un backend DALI:

name: "dali"
backend: "dali"
max_batch_size: 256
input [
  {
    name: "DALI_INPUT_0"
    data_type: TYPE_UINT8
    dims: [ -1 ]
  }
]
output [
  {
    name: "DALI_OUTPUT_0"
    data_type: TYPE_FP32
    dims: [ 299, 299, 3 ]
  }
]
parameters: [
  {
    key: "num_threads"
    value: { string_value: "12" }
  }
]

Modello Inception V3

Per questo post, mostriamo come DALI viene utilizzato in un insieme di modelli con Inception V3. Il modello pre-addestrato Inception V3 TensorFlow viene salvato in formato GraphDef come un singolo file denominato model.graphdef. config.pbtxt il file contiene informazioni sul nome del modello, sulla piattaforma, max_batch_sizee contratti di input e output. Si consiglia di impostare il max_batch_size configurazione inferiore alla dimensione batch del modello V3 iniziale. Il file di etichette contiene etichette di classe per 1,000 classi diverse. Copiamo le etichette del modello di classificazione iniziale nel file inception_graphdef directory nel repository del modello. Il file delle etichette contiene 1,000 etichette di classe del file IMAGEnet set di dati di classificazione.

name: "inception_graphdef"
platform: "tensorflow_graphdef"
max_batch_size: 256
input [
  {
    name: "input"
    data_type: TYPE_FP32
    format: FORMAT_NHWC
    dims: [ 299, 299, 3 ]
  }
]
output [
  {
    name: "InceptionV3/Predictions/Softmax"
    data_type: TYPE_FP32
    dims: [ 1001 ]
    label_filename: "inception_labels.txt"
  }
]

Insieme del Tritone

Il codice seguente mostra una configurazione di modello di un modello ensemble per la preelaborazione DALI e la classificazione delle immagini:

name: "ensemble_dali_inception"
platform: "ensemble"
max_batch_size: 256
input [
  {
    name: "INPUT"
    data_type: TYPE_UINT8
    dims: [ -1 ]
  }
]
output [
  {
    name: "OUTPUT"
    data_type: TYPE_FP32
    dims: [ 1001 ]
  }
]
ensemble_scheduling {
  step [
    {
      model_name: "dali"
      model_version: -1
      input_map {
        key: "DALI_INPUT_0"
        value: "INPUT"
      }
      output_map {
        key: "DALI_OUTPUT_0"
        value: "preprocessed_image"
      }
    },
    {
      model_name: "inception_graphdef"
      model_version: -1
      input_map {
        key: "input"
        value: "preprocessed_image"
      }
      output_map {
        key: "InceptionV3/Predictions/Softmax"
        value: "OUTPUT"
      }
    }
  ]
}

Crea un endpoint SageMaker

Endpoint di SageMaker consentire l'hosting in tempo reale dove è richiesto un tempo di risposta di millisecondi. SageMaker si assume il carico indifferenziato della gestione dell'hosting di modelli e ha la capacità di scalare automaticamente. Inoltre, vengono fornite anche una serie di funzionalità, tra cui l'hosting di più varianti del modello, test A/B dei modelli, integrazione con Amazon Cloud Watch per ottenere l'osservabilità delle prestazioni del modello e il monitoraggio della deriva del modello.

Creiamo un modello SageMaker dagli artefatti del modello su cui abbiamo caricato Servizio di archiviazione semplice Amazon (Amazon S3).

Successivamente, forniamo anche una variabile di ambiente aggiuntiva: SAGEMAKER_TRITON_DEFAULT_MODEL_NAME, che specifica il nome del modello che verrà caricato da Triton. Il valore di questa chiave deve corrispondere al nome della cartella nel pacchetto modello caricato su Amazon S3. Questa variabile è facoltativa nei casi in cui utilizzi un singolo modello. Nel caso di modelli ensemble, questa chiave deve essere specificata affinché Triton possa avviarsi in SageMaker.

Inoltre, puoi impostare SAGEMAKER_TRITON_BUFFER_MANAGER_THREAD_COUNT ed SAGEMAKER_TRITON_THREAD_COUNT per ottimizzare il conteggio dei thread.

container = {
    "Image": triton_image_uri,
    "ModelDataUrl": model_uri,
    "Environment": {"SAGEMAKER_TRITON_DEFAULT_MODEL_NAME": "ensemble_dali_inception"},
}
create_model_response = sm_client.create_model(
    ModelName=sm_model_name, ExecutionRoleArn=role, PrimaryContainer=container
)

Con il modello precedente, creiamo una configurazione dell'endpoint in cui possiamo specificare il tipo e il numero di istanze che vogliamo nell'endpoint:

create_endpoint_config_response = sm_client.create_endpoint_config(
    EndpointConfigName=endpoint_config_name,
    ProductionVariants=[
        {
            "InstanceType": instance_type,
            "InitialVariantWeight": 1,
            "InitialInstanceCount": 1,
            "ModelName": sm_model_name,
            "VariantName": "AllTraffic",
        }
    ],
)
endpoint_config_arn = create_endpoint_config_response["EndpointConfigArn"]

Utilizziamo questa configurazione dell'endpoint per creare un nuovo endpoint SageMaker e attendere il completamento della distribuzione. Lo stato cambia in InService quando la distribuzione ha esito positivo.

create_endpoint_response = sm_client.create_endpoint(
    EndpointName=endpoint_name, EndpointConfigName=endpoint_config_name
)
endpoint_arn = create_endpoint_response["EndpointArn"]

Carico utile dell'inferenza

L'immagine del payload in ingresso passa attraverso la pipeline DALI di preelaborazione e viene utilizzata nello scheduler dell'insieme fornito da Triton Inference Server. Costruiamo il payload da passare all'endpoint di inferenza:

payload = {
    "inputs": [
        {
            "name": "INPUT",
            "shape": rv2.shape,
            "datatype": "UINT8",
            "data": rv2.tolist(),
        }
    ]
}

Inferenza d'insieme

Quando l'endpoint è in esecuzione, possiamo utilizzare l'immagine di esempio per eseguire una richiesta di inferenza utilizzando JSON come formato del payload. Per il formato della richiesta di inferenza, Triton utilizza i protocolli di inferenza standard della comunità KFServing.

response = runtime_sm_client.invoke_endpoint(
    EndpointName=endpoint_name, ContentType="application/octet-stream", Body=json.dumps(payload)
)
print(json.loads(response["Body"].read().decode("utf8")))

Grazie alla binary+json formato, dobbiamo specificare la lunghezza dei metadati della richiesta nell'intestazione per consentire a Triton di analizzare correttamente il payload binario. Questo viene fatto utilizzando un'intestazione Content-Type personalizzata application/vnd.sagemaker-triton.binary+json;json-header-size={}.

Questo è diverso dall'usare an Inference-Header-Content-Length su un server Triton autonomo perché le intestazioni personalizzate non sono consentite in SageMaker.

Il pacchetto tritonclient fornisce metodi di utilità per generare il carico utile senza dover conoscere i dettagli delle specifiche. Utilizziamo i seguenti metodi per convertire la nostra richiesta di inferenza in un formato binario, che fornisce latenze inferiori per l'inferenza. Fare riferimento a GitHub taccuino per i dettagli di implementazione.

response = runtime_sm_client.invoke_endpoint(
    EndpointName=endpoint_name,
    ContentType="application/vnd.sagemaker-triton.binary+json;json-header-size={}".format(
        header_length
    ),
    Body=request_body,
)

Conclusione

In questo post, abbiamo mostrato come produrre insiemi di modelli eseguiti su una singola istanza su SageMaker. Questo modello di progettazione può essere utile per combinare qualsiasi logica di preelaborazione e postelaborazione insieme alle previsioni di inferenza. SageMaker utilizza Triton per eseguire l'inferenza dell'insieme su un singolo contenitore su un'istanza che supporta tutti i principali framework.

Per ulteriori campioni sugli ensemble Triton su SageMaker, fare riferimento a Repository GitHub. Provalo!


Informazioni sugli autori

Esegui modelli ML ensemble su Amazon SageMaker PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.James Park è un Solutions Architect presso Amazon Web Services. Lavora con Amazon.com per progettare, costruire e distribuire soluzioni tecnologiche su AWS e ha un interesse particolare per l'intelligenza artificiale e l'apprendimento automatico. Nel tempo libero gli piace scoprire nuove culture, nuove esperienze e rimanere aggiornato sulle ultime tendenze tecnologiche.

Esegui modelli ML ensemble su Amazon SageMaker PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.Vikram Elango è un Senior AI/ML Specialist Solutions Architect presso Amazon Web Services, con sede in Virginia, Stati Uniti. Vikram aiuta i clienti del settore finanziario e assicurativo con leadership di progettazione e pensiero per creare e distribuire applicazioni di machine learning su larga scala. Attualmente si concentra sull'elaborazione del linguaggio naturale, sull'intelligenza artificiale responsabile, sull'ottimizzazione dell'inferenza e sulla scalabilità del machine learning in tutta l'azienda. Nel tempo libero gli piace viaggiare, fare escursioni, cucinare e campeggiare con la sua famiglia.

Esegui modelli ML ensemble su Amazon SageMaker PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.Saurabh Trikande è un Senior Product Manager per Amazon SageMaker Inference. È appassionato di lavorare con i clienti ed è motivato dall'obiettivo di democratizzare l'apprendimento automatico. Si concentra sulle sfide principali relative all'implementazione di applicazioni ML complesse, modelli ML multi-tenant, ottimizzazioni dei costi e rendere più accessibile l'implementazione di modelli di deep learning. Nel tempo libero, Saurabh ama fare escursioni, conoscere tecnologie innovative, seguire TechCrunch e trascorrere del tempo con la sua famiglia.

Timestamp:

Di più da Apprendimento automatico di AWS