Distribuisci e gestisci pipeline di machine learning con Terraform utilizzando Amazon SageMaker PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.

Distribuisci e gestisci pipeline di machine learning con Terraform utilizzando Amazon SageMaker

I clienti AWS si affidano a Infrastructure as Code (IaC) per progettare, sviluppare e gestire la propria infrastruttura cloud. IaC garantisce che l'infrastruttura e i servizi del cliente siano coerenti, scalabili e riproducibili, pur essendo in grado di seguire le migliori pratiche nell'area delle operazioni di sviluppo (DevOps).

Un possibile approccio per gestire l'infrastruttura e i servizi AWS con IaC è Terraform, che consente agli sviluppatori di organizzare la propria infrastruttura in moduli di codice riutilizzabili. Questo aspetto sta acquisendo sempre più importanza nell'area del machine learning (ML). Lo sviluppo e la gestione di pipeline di ML, inclusa la formazione e l'inferenza con Terraform come IaC, ti consente di scalare facilmente per più casi d'uso o regioni di ML senza dover sviluppare l'infrastruttura da zero. Inoltre, fornisce coerenza per l'infrastruttura (ad esempio, tipo e dimensione dell'istanza) per l'addestramento e l'inferenza in diverse implementazioni della pipeline ML. Ciò ti consente di indirizzare le richieste e il traffico in entrata a diversi Amazon Sage Maker endpoint.

In questo post, ti mostriamo come distribuire e gestire pipeline ML utilizzando Terraform e Amazon SageMaker.

Panoramica della soluzione

Questo post fornisce il codice e ti guida attraverso i passaggi necessari per distribuire l'infrastruttura AWS per pipeline ML con Terraform per l'addestramento del modello e l'inferenza utilizzando Amazon SageMaker. La pipeline ML è gestita tramite Funzioni AWS Step per orchestrare i diversi passaggi implementati nella pipeline ML, come illustrato nella figura seguente.

Passo Funzione Passi

Passo Funzioni avvia un AWS Lambda funzione, generando un ID lavoro univoco, che viene quindi utilizzato all'avvio di un lavoro di formazione SageMaker. Step Functions crea anche un modello, una configurazione dell'endpoint e un endpoint utilizzato per l'inferenza. Le risorse aggiuntive includono quanto segue:

Il codice relativo a ML per l'addestramento e l'inferenza con un'immagine Docker si basa principalmente sul lavoro esistente di seguito Repository GitHub.

Il diagramma seguente illustra l'architettura della soluzione:

Diagramma di architettura

Ti guidiamo attraverso i seguenti passaggi di alto livello:

  1. Distribuisci la tua infrastruttura AWS con Terraform.
  2. Invia la tua immagine Docker ad Amazon ECR.
  3. Esegui la pipeline ML.
  4. Richiama il tuo endpoint.

Struttura del repository

Di seguito puoi trovare il repository contenente il codice e i dati utilizzati per questo post Repository GitHub.

Il repository include le seguenti directory:

  • /terraform – È costituito dalle seguenti sottocartelle:
    • ./infrastructure – Contiene il file main.tf che chiama il modulo pipeline ML, oltre alle dichiarazioni di variabili che utilizziamo per distribuire l'infrastruttura
    • ./ml-pipeline-module – Contiene il modulo pipeline Terraform ML, che possiamo riutilizzare
  • /src – È costituito dalle seguenti sottocartelle:
    • ./container – Contiene codice di esempio per l'addestramento e l'inferenza con le definizioni per l'immagine Docker
    • ./lambda_function – Contiene il codice Python per le configurazioni di generazione della funzione Lambda, ad esempio un ID lavoro univoco per il lavoro di formazione SageMaker
  • /data – Contiene il seguente file:
    • ./iris.csv – Contiene i dati per l'addestramento del modello ML

Prerequisiti

Per questa procedura dettagliata, è necessario disporre dei seguenti prerequisiti:

Distribuisci la tua infrastruttura AWS con Terraform

Per distribuire la pipeline ML, è necessario modificare alcune variabili e nomi in base alle proprie esigenze. Il codice per questo passaggio è in /terraform directory.

Quando si esegue l'inizializzazione per la prima volta, aprire il file terraform/infrastructure/terraform.tfvars e regolare la variabile Nome del progetto al nome del tuo progetto, oltre alla variabile regione se vuoi distribuire in un'altra regione. Puoi anche modificare variabili aggiuntive come i tipi di istanza per l'addestramento e l'inferenza.

Quindi utilizzare i seguenti comandi per distribuire l'infrastruttura con Terraform:

export AWS_PROFILE=<your_aws_cli_profile_name>
cd terraform/infrastructure
terraform init
terraform plan
terraform apply

Controllare l'output e assicurarsi che le risorse pianificate appaiano correttamente e confermare con sì nella fase di applicazione se tutto è corretto. Quindi vai alla console Amazon ECR (o controlla l'output di Terraform nel terminale) e ottieni l'URL per il tuo repository ECR che hai creato tramite Terraform.

L'output dovrebbe essere simile al seguente output visualizzato, incluso l'URL del repository ECR:

Apply complete! Resources: 19 added, 0 changed, 0 destroyed. Outputs: ecr_repository_url = <account_number>.dkr.ecr.eu-west-1.amazonaws.com/ml-pipeline-terraform-demo

Invia la tua immagine Docker ad Amazon ECR

Affinché la pipeline ML e SageMaker possano addestrare ed eseguire il provisioning di un endpoint SageMaker per l'inferenza, è necessario fornire un'immagine Docker e archiviarla in Amazon ECR. Puoi trovare un esempio nella directory src/container. Se hai già applicato l'infrastruttura AWS dal passaggio precedente, puoi eseguire il push dell'immagine Docker come descritto. Dopo aver sviluppato l'immagine Docker, puoi eseguire le seguenti azioni e inviarla ad Amazon ECR (modificare l'URL Amazon ECR in base alle tue esigenze):

cd src/container
export AWS_PROFILE=<your_aws_cli_profile_name>
aws ecr get-login-password --region eu-west-1 | docker login --username AWS --password-stdin <account_number>.dkr.ecr.eu-west-1.amazonaws.com
docker build -t ml-training .
docker tag ml-training:latest <account_number>.dkr.ecr.eu-west-1.amazonaws.com/<ecr_repository_name>:latest
docker push <account_number>.dkr.ecr.eu-west-1.amazonaws.com/<ecr_repository_name>

Se hai già applicato l'infrastruttura AWS con Terraform, puoi inviare le modifiche al codice e all'immagine Docker direttamente su Amazon ECR senza eseguire nuovamente la distribuzione tramite Terraform.

Esegui la pipeline ML

Per addestrare ed eseguire la pipeline ML, vai alla console Step Functions e avvia l'implementazione. Puoi controllare l'andamento di ogni passaggio nella visualizzazione della macchina a stati. Puoi anche controllare l'avanzamento del lavoro di formazione SageMaker e lo stato del tuo endpoint SageMaker.

Avvia la funzione di passaggio

Dopo aver eseguito correttamente la macchina a stati in Step Functions, puoi vedere che l'endpoint SageMaker è stato creato. Sulla console SageMaker, scegli Inferenza nel riquadro di navigazione, quindi endpoint. Assicurati di attendere che lo stato cambi in InService.

Stato dell'endpoint di SageMaker

Richiama il tuo endpoint

Per richiamare l'endpoint (in questo esempio, per il set di dati iris), puoi utilizzare il seguente script Python con SDK AWS per Python (Boto3). Puoi farlo da un notebook SageMaker o incorporare il seguente frammento di codice in una funzione Lambda:

import boto3
from io import StringIO
import pandas as pd client = boto3.client('sagemaker-runtime') endpoint_name = 'Your endpoint name' # Your endpoint name.
content_type = "text/csv"   # The MIME type of the input data in the request body. payload = pd.DataFrame([[1.5,0.2,4.4,2.6]])
csv_file = StringIO()
payload.to_csv(csv_file, sep=",", header=False, index=False)
payload_as_csv = csv_file.getvalue() response = client.invoke_endpoint(
EndpointName=endpoint_name,
ContentType=content_type,
Body=payload_as_csv
) label = response['Body'].read().decode('utf-8')
print(label)

ripulire

Puoi distruggere l'infrastruttura creata da Terraform con il comando terraform destroy, ma devi prima eliminare i dati e i file nei bucket S3. Inoltre, l'endpoint SageMaker (o più endpoint SageMaker se eseguito più volte) viene creato tramite Step Functions e non gestito tramite Terraform. Ciò significa che la distribuzione avviene durante l'esecuzione della pipeline ML con Step Functions. Pertanto, assicurati di eliminare anche l'endpoint SageMaker o gli endpoint creati tramite la pipeline Step Functions ML per evitare costi inutili. Completa i seguenti passaggi:

  1. Sulla console Amazon S3, elimina il set di dati nel bucket di addestramento S3.
  2. Elimina tutti i modelli addestrati tramite la pipeline ML nel bucket dei modelli S3, tramite la console Amazon S3 o l'AWS CLI.
  3. Distruggi l'infrastruttura creata tramite Terraform:
    cd terraform/infrastructure
    terraform destroy

  4. Elimina gli endpoint SageMaker, la configurazione dell'endpoint e i modelli creati tramite Step Functions, sulla console SageMaker o tramite l'AWS CLI.

Conclusione

Congratulazioni! Hai distribuito una pipeline ML utilizzando SageMaker con Terraform. Questa soluzione di esempio mostra come distribuire facilmente l'infrastruttura e i servizi AWS per pipeline ML in modo riutilizzabile. Ciò ti consente di scalare per più casi d'uso o regioni e consente di addestrare e distribuire modelli ML con un clic in modo coerente. Inoltre, puoi eseguire la pipeline ML più volte, ad esempio, quando sono disponibili nuovi dati o desideri modificare il codice dell'algoritmo. Puoi anche scegliere di instradare le richieste o il traffico a diversi endpoint SageMaker.

Ti incoraggio a esplorare l'aggiunta di funzionalità di sicurezza e l'adozione delle migliori pratiche di sicurezza in base alle tue esigenze e ai potenziali standard aziendali. Inoltre, l'integrazione di questa soluzione nelle pipeline CI/CD ti fornirà ulteriori capacità nell'adozione e nella definizione delle best practice e degli standard DevOps in base alle tue esigenze.


L'autore

Distribuisci e gestisci pipeline di machine learning con Terraform utilizzando Amazon SageMaker PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.Oliver Zollikofer è un Data Scientist presso Amazon Web Services. Consente ai clienti aziendali globali di creare, addestrare e distribuire modelli di machine learning, nonché di gestire il ciclo di vita del modello ML con MLOps. Inoltre, costruisce e progetta soluzioni cloud correlate.

Timestamp:

Di più da Apprendimento automatico di AWS