Kør maskinlæringsindledningsarbejdsbelastninger på AWS Graviton-baserede forekomster med Amazon SageMaker PlatoBlockchain Data Intelligence. Lodret søgning. Ai.

Kør maskinlæringsindledningsarbejdsbelastninger på AWS Graviton-baserede instanser med Amazon SageMaker

I dag lancerer vi Amazon SageMaker slutning om AWS Graviton for at give dig mulighed for at drage fordel af pris, ydeevne og effektivitetsfordele, der kommer fra Graviton-chips.

Graviton-baserede instanser er tilgængelige til modelslutning i SageMaker. Dette indlæg hjælper dig med at migrere og implementere en maskinlæring (ML) inferens arbejdsbelastning fra x86 til Graviton-baserede forekomster i SageMaker. Vi giver en trin-for-trin guide til at implementere din SageMaker-trænede model til Graviton-baserede instanser, dække bedste praksis, når du arbejder med Graviton, diskutere pris-ydelsesfordelene og demonstrere, hvordan du implementerer en TensorFlow-model på en SageMaker Graviton-instans.

Kort oversigt over Graviton

AWS Graviton er en familie af processorer designet af AWS, der giver den bedste pris-ydelse og er mere energieffektive end deres x86-modstykker. AWS Graviton 3-processorer er de seneste i Graviton-processorfamilien og er optimeret til ML-arbejdsbelastninger, herunder understøttelse af bfloat16 og dobbelt så stor båndbredde (SIMD) (Single Instruction Multiple Data). Når disse to funktioner kombineres, kan Graviton 3 levere op til tre gange bedre ydeevne i forhold til Graviton 2-forekomster. Graviton 3 bruger også op til 60 % mindre energi for den samme ydeevne som sammenlignelig Amazon Elastic Compute Cloud (Amazon EC2) forekomster. Dette er en fantastisk funktion, hvis du vil reducere dit COXNUMX-fodaftryk og nå dine bæredygtighedsmål.

Løsningsoversigt

For at implementere dine modeller til Graviton-instanser, bruger du enten AWS Deep Learning-containere or medbring selv containere kompatibel med Arm v8.2 arkitektur.

Migreringen (eller ny udrulning) af dine modeller fra x86-drevne instanser til Graviton-instanser er enkel, fordi AWS leverer containere til værtsmodeller med PyTorch, TensorFlow, Scikit-learn og XGBoost, og modellerne er arkitekturagnostiske. Ikke desto mindre, hvis du er villig til at medbringe dine egne biblioteker, kan du også gøre det, bare sørg for, at din container er bygget med et miljø, der understøtter Arm64-arkitektur. For mere information, se Byg din egen algoritmebeholder.

Du skal gennemføre tre trin for at implementere din model:

  1. Opret en SageMaker-model: Denne vil blandt andre parametre indeholde oplysninger om modelfilens placering, den container, der vil blive brugt til implementeringen, og placeringen af ​​inferensscriptet. (Hvis du allerede har en eksisterende model implementeret i en x86-baseret inferensinstans, kan du springe dette trin over.)
  2. Opret en endepunktskonfiguration: Denne vil indeholde information om den type instans du ønsker til endepunktet (f.eks. ml.c7g.xlarge for Graviton3), navnet på den model du oprettede i trin 1 og antallet af instanser pr. endepunkt.
  3. Start slutpunktet med den endepunktskonfiguration, der blev oprettet i trin 2.

Forudsætninger

Inden du starter, skal du overveje følgende forudsætninger:

  1. Fuldfør forudsætningerne som angivet i Forudsætninger.
  2. Din model skal enten være en PyTorch-, TensorFlow-, XGBoost- eller Scikit-learn-baseret model. Følgende tabel opsummerer de versioner, der i øjeblikket understøttes, da dette skrives. For de seneste opdateringer, se SageMaker Framework Containers (kun SM-understøttelse).
    . Python TensorFlow PyTorch Scikit-lære XGBoost
    Versioner understøttet 3.8 2.9.1 1.12.1 1.0-1 1.3-1 til 1.5-1
  3. Inferensscriptet er gemt i Amazon Simple Storage Service (Amazon S3).

I de følgende afsnit fører vi dig gennem implementeringstrinnene.

Opret en SageMaker-model

Hvis du allerede har en eksisterende model implementeret i en x86-baseret inferensinstans, kan du springe dette trin over. Ellers skal du udføre følgende trin for at oprette en SageMaker-model:

  1. Find den model, du opbevarede i en S3-spand. Kopier URI'en.
    Du bruger modellen URI senere i MODEL_S3_LOCATION.
  2. Identificer rammeversionen og Python-versionen, der blev brugt under modeltræning.
    Du skal vælge en container fra listen over tilgængelige AWS Deep Learning-containere i henhold til din framework og Python-version. For mere information, se Introduktion af multi-arkitektur containerbilleder til Amazon ECR.
  3. Find inferens Python-script-URI i S3-bøtten (det almindelige filnavn er inference.py).
    Inferens script-URI er nødvendig i INFERENCE_SCRIPT_S3_LOCATION.
  4. Med disse variabler kan du derefter kalde 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å oprette multiarkitekturbilleder og bruge det samme billede, men med forskellige tags. Du kan angive, hvilken arkitektur din instans vil blive implementeret på. For mere information, se Introduktion af multi-arkitektur containerbilleder til Amazon ECR.

Opret en slutpunktskonfiguration

Når du har oprettet modellen, skal du oprette en slutpunktskonfiguration ved at køre følgende kommando (bemærk den type forekomst, vi bruger):

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

Følgende skærmbillede viser slutpunktskonfigurationsdetaljerne på SageMaker-konsollen.

Start slutpunktet

Med slutpunktskonfigurationen oprettet i det forrige trin, kan du implementere slutpunktet:

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

Vent, indtil dit modelslutpunkt er implementeret. Forudsigelser kan anmodes om på samme måde, som du anmoder om forudsigelser for dine slutpunkter implementeret i x86-baserede forekomster.

Følgende skærmbillede viser dit slutpunkt på SageMaker-konsollen.

SageMaker Endpoint fra konfiguration

Hvad der understøttes

SageMaker leverer præstationsoptimerede Graviton dybe containere til TensorFlow og PyTorch frameworks. Disse containere understøtter computersyn, naturlig sprogbehandling, anbefalinger og generiske dybe og brede modelbaserede slutninger. Udover deep learning-containere leverer SageMaker også containere til klassiske ML-frameworks såsom XGBoost og Scikit-learn. Beholderne er binære kompatible på tværs af c6g/m6g og c7g instanser, derfor er migrering af inferensapplikationen fra en generation til en anden problemfri.

C6g/m6g understøtter fp16 (halvpræcisions-float) og giver for kompatible modeller tilsvarende eller bedre ydeevne sammenlignet med c5-forekomster. C7g øger ML-ydeevnen væsentligt ved at fordoble SIMD-bredden og understøtte bfloat-16 (bf16), som er den mest omkostningseffektive platform til at køre dine modeller.

Både c6g/m6g og c7g giver god ydeevne til klassisk ML (for eksempel XGBoost) sammenlignet med andre CPU-instanser i SageMaker. Bfloat-16-understøttelse på c7g muliggør effektiv implementering af bf16-trænede eller AMP (Automatic Mixed Precision)-trænede modeller. Arm Compute Library (ACL)-backend på Graviton giver bfloat-16-kerner, der kan accelerere selv fp32-operatørerne via hurtig matematiktilstand uden modelkvantisering.

Anbefalet bedste praksis

På Graviton-instanser er hver vCPU en fysisk kerne. Der er ingen strid om de fælles CPU-ressourcer (i modsætning til SMT), og skaleringen af ​​arbejdsbelastningens ydeevne er lineær med hver vCPU-tilføjelse. Derfor anbefales det at bruge batch-inferens, når brugssagen tillader det. Dette vil muliggøre effektiv brug af vCPU'erne ved parallel behandling af batchen på hver fysisk kerne. Hvis batch-inferensen ikke er mulig, kræves den optimale instansstørrelse for en given nyttelast for at sikre, at OS-trådplanlægningsoverhead ikke opvejer den computerkraft, der følger med de ekstra vCPU'er.

TensorFlow kommer som standard med Eigen-kerner, og det anbefales at skifte til OneDNN med ACL for at få den mest optimerede inferens-backend. OneDNN-backend og bfloat-16 hurtig matematiktilstand kan aktiveres, mens containertjenesten startes:

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 serveringskommando er vært for en standard resnet50-model med to vigtige konfigurationer:

-e TF_ENABLE_ONEDNN_OPTS=1
-e DNNL_DEFAULT_FPMATH_MODE=BF16

Disse kan overføres til inferensbeholderen på følgende måde:

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'
)

Eksempel på implementering

I dette indlæg viser vi dig, hvordan du implementerer en TensorFlow-model, trænet i SageMaker, på en Graviton-drevet SageMaker-inferensinstans.

Du kan køre kodeeksemplet enten i en SageMaker notebook-instans, en Amazon SageMaker Studio notesbog eller en Jupyter notesbog i lokal tilstand. Du skal hente SageMaker-udførelsesrollen, hvis du bruger en Jupyter-notebook i lokal tilstand.

Følgende eksempel betragter CIFAR-10-datasættet. Du kan følge notebook-eksemplet fra SageMaker-eksemplerne GitHub repo for at gengive den model, der er brugt i dette indlæg. Vi bruger den trænede model og den cifar10_keras_main.py Python-script til inferens.

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

cifar10_keras_main.py script, som kan bruges til slutningen, er gemt på:s3://aws-ml-blog/artifacts/run-ml-inference-on-graviton-based-instances-with-amazon-sagemaker/script/cifar10_keras_main.py

Vi bruger us-east-1 Regioner og implementer modellen på en ml.c7g.xlarge Graviton-baseret instans. Baseret på dette er URI'en for vores AWS Deep Learning Container 763104351884.dkr.ecr.us-east-1.amazonaws.com/tensorflow-inference-graviton:2.9.1-cpu-py38-ubuntu20.04-sagemaker

  1. Opsæt 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. Download datasættet til slutpunktstest:
    from keras.datasets import cifar10
    (x_train, y_train), (x_test, y_test) = cifar10.load_data()

  3. Opret modellen og slutpunktskonfigurationen, og implementer slutpunktet:
    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. Du kan eventuelt tilføje dit inferensscript til Environment in create_model hvis du ikke oprindeligt tilføjede det som en artefakt til din SageMaker-model under træning:
    "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 skal vente et par minutter, før implementeringen finder sted.

  5. Bekræft slutpunktets status med følgende kode:
    describe_response = client.describe_endpoint(EndpointName=ENDPOINT_NAME)
    print(describe_response["EndpointStatus"]

    Du kan også tjekke AWS Management Console for at se, hvornår din model er implementeret.

  6. Konfigurer runtime-miljøet for at kalde slutpunkterne:
    runtime = boto3.Session().client(service_name="runtime.sagemaker")

    Nu forbereder vi nyttelasten til at kalde slutpunktet. Vi bruger samme type billeder, som bruges til træning af modellen. Disse blev downloadet i tidligere trin.

  7. Kast nyttelasten til tensorer og indstil det korrekte format, som modellen forventer. For dette eksempel anmoder vi kun om én forudsigelse.
    input_image = x_test[0].reshape(1,32,32,3)

    Vi får modeloutputtet som et array.

  8. Vi kan omdanne dette output til sandsynligheder, hvis vi anvender en softmax til det:
    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())

Ryd op i ressourcer

De ydelser, der er involveret i denne løsning, har omkostninger. Når du er færdig med at bruge denne løsning, skal du rydde op i følgende ressourcer:

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

Pris-ydelse-sammenligning

Graviton-baserede instanser tilbyder den laveste pris og den bedste pris-ydelse sammenlignet med x86-baserede instanser. I lighed med EC2-forekomster tilbyder SageMaker-slutpunkterne med ml.c6g-instanser (Graviton 2) en 20 % lavere pris sammenlignet med ml.c5, og Graviton 3 ml.c7g-instanserne er 15 % billigere end ml.c6-instanser. For mere information, se Amazon SageMaker-priser.

Konklusion

I dette indlæg fremviste vi den nyligt lancerede SageMaker-evne til at implementere modeller i Graviton-drevne inferensinstanser. Vi gav dig vejledning om bedste praksis og diskuterede kort pris-ydelsesfordelene ved den nye type slutningsforekomster.

For at lære mere om Graviton, se AWS Graviton processor. Du kan komme i gang med AWS Graviton-baserede EC2-instanser på Amazon EC2-konsollen og ved at henvise til AWS Graviton teknisk vejledning. Du kan implementere et Sagemaker-modelslutpunkt til slutning om Graviton med prøvekoden i dette blogindlæg.


Om forfatterne

Victor JaramilloVictor Jaramillo, PhD, er en Senior Machine Learning Engineer i AWS Professional Services. Før AWS var han universitetsprofessor og forsker i prædiktiv vedligeholdelse. I sin fritid nyder han at køre på sin motorcykel og gør-det-selv-motorcykelmekanik.

Zmnako AwrahmanZmnako Awrahman, PhD, er Practice Manager, ML SME og Machine Learning Technical Field Community (TFC) medlem hos Amazon Web Services. Han hjælper kunder med at udnytte skyens kraft til at udtrække værdi fra deres data med dataanalyse og maskinlæring.

Sunita NadampalliSunita Nadampalli er Software Development Manager hos AWS. Hun leder Graviton-softwareydelsesoptimeringer til maskintilbøjelighed, HPC og multimediearbejdsbelastninger. Hun brænder for open source-udvikling og levering af omkostningseffektive softwareløsninger med Arm SoC'er.

Johna LiuJohna Liu er softwareudviklingsingeniør i Amazon SageMaker-teamet. Hendes nuværende arbejde fokuserer på at hjælpe udviklere med effektivt at være vært for maskinlæringsmodeller og forbedre inferens ydeevne. Hun brænder for rumlig dataanalyse og brug af AI til at løse samfundsproblemer.

Alan TanAlan Tan er en Senior Product Manager hos SageMaker, der leder indsatsen inden for store modelslutninger. Han brænder for at anvende maskinlæring til analyseområdet. Uden for arbejdet nyder han udendørslivet.

Tidsstempel:

Mere fra AWS maskinindlæring