Kjør arbeidsbelastninger for maskinlæring på AWS Graviton-baserte forekomster med Amazon SageMaker PlatoBlockchain Data Intelligence. Vertikalt søk. Ai.

Kjør arbeidsbelastninger for maskinlæring på AWS Graviton-baserte forekomster med Amazon SageMaker

I dag lanserer vi Amazon SageMaker slutning om AWS Graviton slik at du kan dra nytte av pris-, ytelses- og effektivitetsfordelene som kommer fra Graviton-brikker.

Graviton-baserte forekomster er tilgjengelige for modellslutning i SageMaker. Dette innlegget hjelper deg med å migrere og distribuere en arbeidsbelastning for maskinlæring (ML) fra x86 til Graviton-baserte forekomster i SageMaker. Vi gir en trinn-for-trinn-guide for å distribuere din SageMaker-trente modell til Graviton-baserte forekomster, dekke beste praksis når du arbeider med Graviton, diskutere pris-ytelsesfordelene og demonstrere hvordan du distribuerer en TensorFlow-modell på en SageMaker Graviton-forekomst.

Kort oversikt over Graviton

AWS Graviton er en familie av prosessorer designet av AWS som gir den beste prisytelsen og er mer energieffektive enn x86-motpartene. AWS Graviton 3-prosessorer er de siste i Graviton-prosessorfamilien og er optimalisert for ML-arbeidsbelastninger, inkludert støtte for bfloat16, og dobbelt så stor båndbredde (SIMD) (Single Instruction Multiple Data). Når disse to funksjonene kombineres, kan Graviton 3 levere opptil tre ganger bedre ytelse sammenlignet med Graviton 2-forekomster. Graviton 3 bruker også opptil 60 % mindre energi for samme ytelse som sammenlignbare Amazon Elastic Compute Cloud (Amazon EC2) forekomster. Dette er en flott funksjon hvis du ønsker å redusere karbonfotavtrykket og oppnå bærekraftsmålene dine.

Løsningsoversikt

For å distribuere modellene dine til Graviton-forekomster, bruker du enten AWS Deep Learning-beholdere or ta med egne containere kompatibel med Arm v8.2-arkitektur.

Migreringen (eller ny distribusjon) av modellene dine fra x86-drevne forekomster til Graviton-forekomster er enkel fordi AWS gir containere til vertsmodeller med PyTorch, TensorFlow, Scikit-learn og XGBoost, og modellene er arkitekturagnostiske. Likevel, hvis du er villig til å ta med dine egne biblioteker, kan du også gjøre det, bare sørg for at beholderen din er bygget med et miljø som støtter Arm64-arkitektur. For mer informasjon, se Bygg din egen algoritmebeholder.

Du må fullføre tre trinn for å distribuere modellen din:

  1. Opprett en SageMaker-modell: Denne vil blant annet inneholde informasjon om modellfilplasseringen, beholderen som skal brukes for distribusjonen og plasseringen av inferensskriptet. (Hvis du allerede har en eksisterende modell distribuert i en x86-basert slutningsforekomst, kan du hoppe over dette trinnet.)
  2. Lag en endepunktkonfigurasjon: Denne vil inneholde informasjon om hvilken type instans du ønsker for endepunktet (for eksempel ml.c7g.xlarge for Graviton3), navnet på modellen du opprettet i trinn 1, og antall instanser pr. endepunkt.
  3. Start endepunktet med endepunktkonfigurasjonen opprettet i trinn 2.

Forutsetninger

Før du starter, vurder følgende forutsetninger:

  1. Fullfør forutsetningene som er oppført i Forutsetninger.
  2. Modellen din bør enten være en PyTorch-, TensorFlow-, XGBoost- eller Scikit-learn-basert modell. Tabellen nedenfor oppsummerer versjonene som for øyeblikket støttes når dette skrives. For de siste oppdateringene, se SageMaker Framework Containers (kun SM-støtte).
    . Python tensorflow PyTorch Scikit lære Xgboost
    Versjoner støttes 3.8 2.9.1 1.12.1 1.0-1 1.3-1 til 1.5-1
  3. Inferensskriptet er lagret i Amazon enkel lagringstjeneste (Amazon S3).

I de følgende delene leder vi deg gjennom distribusjonstrinnene.

Lag en SageMaker-modell

Hvis du allerede har en eksisterende modell distribuert i en x86-basert slutningsforekomst, kan du hoppe over dette trinnet. Ellers, fullfør følgende trinn for å lage en SageMaker-modell:

  1. Finn modellen du har lagret i en S3-bøtte. Kopier URI.
    Du bruker modellen URI senere i MODEL_S3_LOCATION.
  2. Identifiser rammeversjonen og Python-versjonen som ble brukt under modelltrening.
    Du må velge en beholder fra listen over tilgjengelige AWS Deep Learning-beholdere i henhold til rammeverket og Python-versjonen. For mer informasjon, se Vi introduserer containerbilder med flere arkitekturer for Amazon ECR.
  3. Finn inferens Python-skript-URI i S3-bøtten (det vanlige filnavnet er inference.py).
    Inferensskriptets URI er nødvendig i INFERENCE_SCRIPT_S3_LOCATION.
  4. Med disse variablene kan du kalle SageMaker API med følgende kommando:
    client = boto3.client("sagemaker")
    
    client.create_model(
        ModelName="Your model name",
        PrimaryContainer={
            "Image": ,
            "ModelDataUrl": ,
            "Environment": {
            "SAGEMAKER_PROGRAM": "inference.py",
            "SAGEMAKER_SUBMIT_DIRECTORY": ,
            "SAGEMAKER_CONTAINER_LOG_LEVEL": "20",
            "SAGEMAKER_REGION": 
            }
        },
        ExecutionRoleArn= 
    )

Du kan også lage bilder med flere arkitekturer, og bruke det samme bildet, men med forskjellige tagger. Du kan angi hvilken arkitektur forekomsten din skal distribueres på. For mer informasjon, se Vi introduserer containerbilder med flere arkitekturer for Amazon ECR.

Opprett en endepunktkonfigurasjon

Etter at du har opprettet modellen, må du opprette en endepunktkonfigurasjon ved å kjøre følgende kommando (merk hvilken type forekomst vi bruker):

client.create_endpoint_config(
    EndpointConfigName= ,
    ProductionVariants=[
        {
         "VariantName": "v0",
         "ModelName": "Your model name",
         "InitialInstanceCount": 1,
         "InstanceType": "ml.c7g.xlarge",
        },
    ]
)

Følgende skjermbilde viser endepunktkonfigurasjonsdetaljene på SageMaker-konsollen.

Start endepunktet

Med endepunktkonfigurasjonen opprettet i forrige trinn, kan du distribuere endepunktet:

client.create_endpoint(
    EndpointName = "",
    EndpointConfigName = ""
    )

Vent til modellens endepunkt er distribuert. Forslag kan forespørres på samme måte som du ber om forutsigelser for endepunktene dine distribuert i x86-baserte forekomster.

Følgende skjermbilde viser endepunktet ditt på SageMaker-konsollen.

SageMaker Endpoint fra Configuration

Hva støttes

SageMaker leverer ytelsesoptimerte Graviton dype beholdere for TensorFlow- og PyTorch-rammeverk. Disse beholderne støtter datasyn, naturlig språkbehandling, anbefalinger og generiske dype og brede modellbaserte konklusjonsbruk. I tillegg til dyplæringsbeholdere, tilbyr SageMaker også beholdere for klassiske ML-rammeverk som XGBoost og Scikit-learn. Beholderne er binærkompatible på tvers av c6g/m6g- og c7g-forekomster, derfor er det sømløst å migrere slutningsapplikasjonen fra en generasjon til en annen.

C6g/m6g støtter fp16 (halvpresisjonsflyter) og gir for kompatible modeller tilsvarende eller bedre ytelse sammenlignet med c5-forekomster. C7g øker ML-ytelsen betydelig ved å doble SIMD-bredden og støtte bfloat-16 (bf16), som er den mest kostnadseffektive plattformen for å kjøre modellene dine.

Både c6g/m6g og c7g gir god ytelse for klassisk ML (for eksempel XGBoost) sammenlignet med andre CPU-forekomster i SageMaker. Bfloat-16-støtte på c7g tillater effektiv distribusjon av bf16-trente eller AMP (Automatic Mixed Precision)-trente modeller. Arm Compute Library (ACL)-backend på Graviton gir bfloat-16-kjerner som kan akselerere selv fp32-operatørene via rask matematisk modus, uten modellkvantisering.

Anbefalte beste fremgangsmåter

På Graviton-forekomster er hver vCPU en fysisk kjerne. Det er ingen strid om de vanlige CPU-ressursene (i motsetning til SMT), og skaleringen av arbeidsbelastningsytelsen er lineær med hvert vCPU-tillegg. Derfor anbefales det å bruke batch-slutning når brukssaken tillater det. Dette vil muliggjøre effektiv bruk av vCPUene ved å parallellbehandle batchen på hver fysisk kjerne. Hvis batch-inferensen ikke er mulig, kreves den optimale forekomststørrelsen for en gitt nyttelast for å sikre at OS-trådplanleggingsoverhead ikke oppveier datakraften som følger med de ekstra vCPUene.

TensorFlow kommer med Eigen-kjerner som standard, og det anbefales å bytte til OneDNN med ACL for å få den mest optimaliserte inferens-backend. OneDNN-backend og bfloat-16 fast math-modus kan aktiveres mens du starter containertjenesten:

docker run -p 8501:8501 --name tfserving_resnet 
--mount type=bind,source=/tmp/resnet,target=/models/resnet 
-e MODEL_NAME=resnet -e TF_ENABLE_ONEDNN_OPTS=1 
-e DNNL_DEFAULT_FPMATH_MODE=BF16 -e -t tfs:mkl_aarch64

Den foregående serveringskommandoen er vert for en standard resnet50-modell med to viktige konfigurasjoner:

-e TF_ENABLE_ONEDNN_OPTS=1
-e DNNL_DEFAULT_FPMATH_MODE=BF16

Disse kan overføres til slutningsbeholderen på følgende måte:

client.create_model(
    ModelName="Your model name",
    PrimaryContainer={
    "Image": ,
    "ModelDataUrl": ,
    "Environment": {
        "SAGEMAKER_PROGRAM": "inference.py",
        "SAGEMAKER_SUBMIT_DIRECTORY": "",
        "SAGEMAKER_CONTAINER_LOG_LEVEL": "20",
        "SAGEMAKER_REGION": ,
        "TF_ENABLE_ONEDNN_OPTS": "1",
        "DNNL_DEFAULT_FPMATH_MODE": "BF16"
         }
     },
     ExecutionRoleArn='ARN for AmazonSageMaker-ExecutionRole'
)

Implementeringseksempel

I dette innlegget viser vi deg hvordan du distribuerer en TensorFlow-modell, opplært i SageMaker, på en Graviton-drevet SageMaker-inferensforekomst.

Du kan kjøre kodeeksemplet enten i en SageMaker notatbokforekomst, en Amazon SageMaker Studio notatbok, eller en Jupyter notatbok i lokal modus. Du må hente SageMaker-utførelsesrollen hvis du bruker en Jupyter-notisbok i lokal modus.

Følgende eksempel tar for seg CIFAR-10-datasettet. Du kan følge notatbokeksemplet fra SageMaker-eksemplene GitHub repo for å gjengi modellen som er brukt i dette innlegget. Vi bruker den opplærte modellen og cifar10_keras_main.py Python-skript for slutning.

Modellen oppbevares i en S3 bøtte: s3://aws-ml-blog/artifacts/run-ml-inference-on-graviton-based-instances-with-amazon-sagemaker/model.tar.gz

De cifar10_keras_main.py skript, som kan brukes for slutningen, er lagret på:s3://aws-ml-blog/artifacts/run-ml-inference-on-graviton-based-instances-with-amazon-sagemaker/script/cifar10_keras_main.py

Vi bruker us-east-1 Region og distribuer modellen på en ml.c7g.xlarge Graviton-basert instans. Basert på dette er URIen til vår AWS Deep Learning Container 763104351884.dkr.ecr.us-east-1.amazonaws.com/tensorflow-inference-graviton:2.9.1-cpu-py38-ubuntu20.04-sagemaker

  1. Sett opp med følgende kode:
    import sagemaker
    import boto3
    import datetime
    import json
    import gzip
    import os
    
    sagemaker_session = sagemaker.Session()
    bucket = sagemaker_session.default_bucket()
    role = sagemaker.get_execution_role()
    region = sagemaker_session.boto_region_name

  2. Last ned datasettet for endepunktstesting:
    from keras.datasets import cifar10
    (x_train, y_train), (x_test, y_test) = cifar10.load_data()

  3. Opprett modellen og endepunktkonfigurasjonen, og distribuer endepunktet:
    timestamp = "{:%Y-%m-%d-%H-%M-%S}".format(datetime.datetime.now())
    
    client = boto3.client("sagemaker")
    
    MODEL_NAME = f"graviton-model-{timestamp}"
    ENDPOINT_NAME = f"graviton-endpoint-{timestamp}"
    ENDPOINT_CONFIG_NAME = f"graviton-endpoint-config-{timestamp}"
    
    # create sagemaker model
    create_model_response = client.create_model(
        ModelName=MODEL_NAME,
        PrimaryContainer={
        "Image":  "763104351884.dkr.ecr.us-east-1.amazonaws.com/tensorflow-inference-graviton:2.9.1-cpu-py38-ubuntu20.04-sagemaker ",
        "ModelDataUrl":  "s3://aws-ml-blog/artifacts/run-ml-inference-on-graviton-based-instances-with-amazon-sagemaker/model.tar.gz",
        "Environment": {
            "SAGEMAKER_CONTAINER_LOG_LEVEL": "20",
            "SAGEMAKER_REGION": region
            }
        },
        ExecutionRoleArn=role
    )
    print ("create_model API response", create_model_response)

  4. Eventuelt kan du legge til inferensskriptet ditt Environment in create_model hvis du ikke opprinnelig la den til som en artefakt til SageMaker-modellen din under trening:
    "SAGEMAKER_PROGRAM": "inference.py",
    "SAGEMAKER_SUBMIT_DIRECTORY": ,
    		
    # create sagemaker endpoint config
    create_endpoint_config_response = client.create_endpoint_config(
        EndpointConfigName=ENDPOINT_CONFIG_NAME,
        ProductionVariants=[
            {
             "VariantName": "v0",
             "ModelName": MODEL_NAME,
             "InitialInstanceCount": 1,
             "InstanceType": "ml.c7g.xlarge" 
            },
        ]
    )
    print ("ncreate_endpoint_config API response", create_endpoint_config_response)
    
    # create sagemaker endpoint
    create_endpoint_response = client.create_endpoint(
        EndpointName = ENDPOINT_NAME,
        EndpointConfigName = ENDPOINT_CONFIG_NAME,
    )
    print ("ncreate_endpoint API response", create_endpoint_response)   
    

    Du må vente et par minutter før distribusjonen finner sted.

  5. Bekreft endepunktstatusen med følgende kode:
    describe_response = client.describe_endpoint(EndpointName=ENDPOINT_NAME)
    print(describe_response["EndpointStatus"]

    Du kan også sjekke AWS-administrasjonskonsoll for å se når modellen din er distribuert.

  6. Sett opp kjøretidsmiljøet for å påkalle endepunktene:
    runtime = boto3.Session().client(service_name="runtime.sagemaker")

    Nå forbereder vi nyttelasten for å påkalle endepunktet. Vi bruker samme type bilder som brukes til opplæring av modellen. Disse ble lastet ned i tidligere trinn.

  7. Kast nyttelasten til tensorer og still inn riktig format som modellen forventer. For dette eksemplet ber vi bare om én prediksjon.
    input_image = x_test[0].reshape(1,32,32,3)

    Vi får modellutgangen som en matrise.

  8. Vi kan gjøre denne utgangen til sannsynligheter hvis vi bruker en softmax på den:
    CONTENT_TYPE = 'application/json'
    ACCEPT = 'application/json'
    PAYLOAD = json.dumps(input_image.tolist())
    
    response = runtime.invoke_endpoint(
        EndpointName=ENDPOINT_NAME, 
        ContentType=CONTENT_TYPE,
        Accept=ACCEPT,
        Body=PAYLOAD
    )
        
    print(response['Body'].read().decode())

Rydd opp i ressursene

Tjenestene som er involvert i denne løsningen medfører kostnader. Når du er ferdig med å bruke denne løsningen, rydde opp i følgende ressurser:

client.delete_endpoint(EndpointName=ENDPOINT_NAME)
client.delete_endpoint_config(EndpointConfigName=ENDPOINT_CONFIG_NAME)
client.delete_model(ModelName=MODEL_NAME)

Pris-ytelse sammenligning

Graviton-baserte forekomster tilbyr den laveste prisen og den beste prisytelsen sammenlignet med x86-baserte forekomster. I likhet med EC2-forekomster tilbyr SageMaker-slutningsendepunktene med ml.c6g-forekomster (Graviton 2) en 20 % lavere pris sammenlignet med ml.c5, og Graviton 3 ml.c7g-forekomstene er 15 % billigere enn ml.c6-forekomster. For mer informasjon, se Amazon SageMaker-priser.

konklusjonen

I dette innlegget viste vi frem den nylig lanserte SageMaker-evnen for å distribuere modeller i Graviton-drevne inferensforekomster. Vi ga deg veiledning om beste praksis og diskuterte kort pris-ytelsesfordelene ved den nye typen slutningsforekomster.

For å lære mer om Graviton, se AWS Graviton-prosessor. Du kan komme i gang med AWS Graviton-baserte EC2-forekomster på Amazon EC2-konsollen og ved å referere til AWS Graviton teknisk veiledning. Du kan distribuere et Sagemaker-modellendepunkt for slutning om Graviton med eksempelkoden i dette blogginnlegget.


Om forfatterne

Victor JaramilloVictor Jaramillo, PhD, er en senior maskinlæringsingeniør i AWS Professional Services. Før AWS var han universitetsprofessor og forsker innen prediktivt vedlikehold. På fritiden liker han å kjøre motorsykkel og gjør-det-selv-motorsykkelmekanikk.

Zmnako AwrahmanZmnako Awrahman, PhD, er praksisleder, ML SME og Machine Learning Technical Field Community (TFC) medlem hos Amazon Web Services. Han hjelper kundene å utnytte kraften i skyen til å trekke ut verdi fra dataene deres med dataanalyse og maskinlæring.

Sunita NadampalliSunita Nadampalli er Software Development Manager hos AWS. Hun leder Graviton-programvareytelsesoptimaliseringer for maskintilbøyelighet, HPC og multimediearbeidsbelastninger. Hun brenner for åpen kildekode-utvikling og å levere kostnadseffektive programvareløsninger med Arm SoCs.

Johna LiuJohna Liu er en programvareutviklingsingeniør i Amazon SageMaker-teamet. Hennes nåværende arbeid fokuserer på å hjelpe utviklere med å effektivt være vert for maskinlæringsmodeller og forbedre slutningsytelsen. Hun brenner for romlig dataanalyse og bruk av AI for å løse samfunnsproblemer.

Alan TanAlan Tan er en senior produktsjef hos SageMaker, og leder innsatsen for store modellslutninger. Han brenner for å bruke maskinlæring på analyseområdet. Utenom jobben liker han å være ute.

Tidstempel:

Mer fra AWS maskinlæring