Distribuera och hantera pipelines för maskininlärning med Terraform med Amazon SageMaker PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.

Distribuera och hantera pipelines för maskininlärning med Terraform med Amazon SageMaker

AWS-kunder förlitar sig på Infrastructure as Code (IaC) för att designa, utveckla och hantera sin molninfrastruktur. IaC säkerställer att kundens infrastruktur och tjänster är konsekventa, skalbara och reproducerbara, samtidigt som de kan följa bästa praxis inom området utvecklingsverksamhet (DevOps).

En möjlig metod för att hantera AWS-infrastruktur och tjänster med IaC är Terraform, vilket gör att utvecklare kan organisera sin infrastruktur i återanvändbara kodmoduler. Denna aspekt blir allt viktigare inom området maskininlärning (ML). Genom att utveckla och hantera ML-pipelines, inklusive utbildning och slutledning med Terraform som IaC, kan du enkelt skala för flera ML-användningsfall eller regioner utan att behöva utveckla infrastrukturen från grunden. Dessutom ger det konsistens för infrastrukturen (till exempel instanstyp och storlek) för utbildning och slutledning över olika implementeringar av ML-pipeline. Detta låter dig dirigera förfrågningar och inkommande trafik till olika Amazon SageMaker slutpunkter.

I det här inlägget visar vi dig hur du distribuerar och hanterar ML-pipelines med Terraform och Amazon SageMaker.

Lösningsöversikt

Det här inlägget tillhandahåller kod och leder dig genom stegen som krävs för att distribuera AWS-infrastruktur för ML-pipelines med Terraform för modellträning och slutledning med Amazon SageMaker. ML pipeline hanteras via AWS stegfunktioner för att orkestrera de olika stegen som implementeras i ML-pipelinen, som illustreras i följande figur.

Steg Funktion Steg

Steg Funktioner startar en AWS Lambda funktion, genererar ett unikt jobb-ID, som sedan används när du startar ett SageMaker-utbildningsjobb. Stegfunktioner skapar också en modell, slutpunktskonfiguration och slutpunkt som används för slutledning. Ytterligare resurser inkluderar följande:

Den ML-relaterade koden för utbildning och slutledning med en Docker-bild bygger huvudsakligen på befintligt arbete i det följande GitHub repository.

Följande diagram illustrerar lösningsarkitekturen:

Arkitektur diagram

Vi går igenom följande steg på hög nivå:

  1. Distribuera din AWS-infrastruktur med Terraform.
  2. Skicka din Docker-bild till Amazon ECR.
  3. Kör ML-pipeline.
  4. Åberopa din slutpunkt.

Förvarsstruktur

Du kan hitta arkivet som innehåller koden och data som används för detta inlägg i följande GitHub repository.

Förvaret innehåller följande kataloger:

  • /terraform – Består av följande undermappar:
    • ./infrastructure – Innehåller main.tf-filen som anropar ML pipeline-modulen, förutom variabla deklarationer som vi använder för att distribuera infrastrukturen
    • ./ml-pipeline-module – Innehåller Terraform ML pipeline-modulen som vi kan återanvända
  • /src – Består av följande undermappar:
    • ./container – Innehåller exempelkod för träning och slutledning med definitionerna för Docker-bilden
    • ./lambda_function – Innehåller Python-koden för Lambda-funktionsgenererande konfigurationer, såsom ett unikt jobb-ID för SageMaker-utbildningsjobbet
  • /data – Innehåller följande fil:
    • ./iris.csv – Innehåller data för träning av ML-modellen

Förutsättningar

För detta genomgång bör du ha följande förutsättningar:

Distribuera din AWS-infrastruktur med Terraform

För att distribuera ML-pipelinen måste du justera några variabler och namn efter dina behov. Koden för detta steg finns i /terraform katalog.

När du initialiserar för första gången, öppna filen terraform/infrastructure/terraform.tfvars och justera variabeln Projektnamn till namnet på ditt projekt, förutom variabeln region om du vill distribuera i en annan region. Du kan också ändra ytterligare variabler som instanstyper för träning och slutledning.

Använd sedan följande kommandon för att distribuera infrastrukturen med Terraform:

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

Kontrollera utdata och se till att de planerade resurserna visas korrekt, och bekräfta med ja i appliceringssteget om allt är korrekt. Gå sedan till Amazon ECR-konsolen (eller kontrollera utdata från Terraform i terminalen) och hämta URL:en till ditt ECR-förråd som du skapade via Terraform.

Utdata ska se ut som följande visade utdata, inklusive ECR-förvarets URL:

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

Skicka din Docker-bild till Amazon ECR

För att ML-pipeline och SageMaker ska träna och tillhandahålla en SageMaker-slutpunkt för slutledning måste du tillhandahålla en Docker-bild och lagra den i Amazon ECR. Du kan hitta ett exempel i katalogen src/container. Om du redan har tillämpat AWS-infrastrukturen från det tidigare steget, kan du trycka på Docker-bilden enligt beskrivningen. Efter att din Docker-bild har utvecklats kan du vidta följande åtgärder och skicka den till Amazon ECR (justera Amazon ECR URL efter dina behov):

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>

Om du redan har tillämpat AWS-infrastrukturen med Terraform kan du skicka ändringarna av din kod och Docker-bild direkt till Amazon ECR utan att distribuera via Terraform igen.

Kör ML-pipeline

För att träna och köra ML-pipeline, gå till Step Functions-konsolen och påbörja implementeringen. Du kan kontrollera framstegen för varje steg i visualiseringen av tillståndsmaskinen. Du kan också kontrollera SageMaker-utbildningens framsteg och statusen för din SageMaker-slutpunkt.

Start Steg Funktion

När du har kört tillståndsmaskinen i Step Functions kan du se att SageMaker-slutpunkten har skapats. Välj på SageMaker-konsolen Slutledning i navigeringsfönstret, alltså endpoints. Se till att vänta på att statusen ändras till InService.

SageMaker Endpoint Status

Åberopa din slutpunkt

För att anropa din slutpunkt (i det här exemplet, för irisdatasetet), kan du använda följande Python-skript med AWS SDK för Python (Boto3). Du kan göra detta från en SageMaker-anteckningsbok eller bädda in följande kodavsnitt i en Lambda-funktion:

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)

Städa upp

Du kan förstöra infrastrukturen som skapats av Terraform med kommandot terraform destroy, men du måste först radera data och filer i S3-hinkarna. Dessutom skapas SageMaker-slutpunkten (eller flera SageMaker-slutpunkter om de körs flera gånger) via stegfunktioner och hanteras inte via Terraform. Detta innebär att distributionen sker när ML-pipeline körs med stegfunktioner. Se därför till att du tar bort SageMaker-slutpunkten eller slutpunkterna som skapats via Step Functions ML-pipeline för att undvika onödiga kostnader. Slutför följande steg:

  1. På Amazon S3-konsolen, radera datasetet i S3-träningshinken.
  2. Ta bort alla modeller du tränade via ML-pipelinen i S3-modellens hink, antingen via Amazon S3-konsolen eller AWS CLI.
  3. Förstör infrastrukturen som skapats via Terraform:
    cd terraform/infrastructure
    terraform destroy

  4. Ta bort SageMaker-slutpunkterna, slutpunktskonfigurationen och modellerna som skapats via stegfunktioner, antingen på SageMaker-konsolen eller via AWS CLI.

Slutsats

Grattis! Du har distribuerat en ML-pipeline med SageMaker med Terraform. Den här exempellösningen visar hur du enkelt kan distribuera AWS-infrastruktur och tjänster för ML-pipelines på ett återanvändbart sätt. Detta gör att du kan skala för flera användningsfall eller regioner, och gör det möjligt att träna och distribuera ML-modeller med ett klick på ett konsekvent sätt. Dessutom kan du köra ML-pipeline flera gånger, till exempel när ny data finns tillgänglig eller om du vill ändra algoritmkoden. Du kan också välja att dirigera förfrågningar eller trafik till olika SageMaker-slutpunkter.

Jag uppmuntrar dig att utforska att lägga till säkerhetsfunktioner och anta bästa säkerhetsmetoder enligt dina behov och potentiella företagsstandarder. Om du dessutom bäddar in den här lösningen i dina CI/CD-pipelines kommer du att få ytterligare möjligheter att anta och etablera DevOps bästa praxis och standarder enligt dina krav.


Om författaren

Distribuera och hantera pipelines för maskininlärning med Terraform med Amazon SageMaker PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.Oliver Zollikofer är dataforskare på Amazon Web Services. Han gör det möjligt för globala företagskunder att bygga, träna och distribuera modeller för maskininlärning, samt hantera ML-modellens livscykel med MLOps. Vidare bygger och arkitekter han relaterade molnlösningar.

Tidsstämpel:

Mer från AWS maskininlärning