Suorita koneoppimispäätelmien työkuormia AWS Graviton -pohjaisissa instansseissa Amazon SageMaker PlatoBlockchain Data Intelligencen avulla. Pystysuuntainen haku. Ai.

Suorita koneoppimispäätelmien työkuormia AWS Graviton -pohjaisissa tapauksissa Amazon SageMakerin avulla

Tänään lanseeraamme Amazon Sage Maker päätelmä päälle AWS Graviton jotta voit hyödyntää Graviton-sirujen hinta-, suorituskyky- ja tehokkuusetuja.

Graviton-pohjaisia ​​ilmentymiä on saatavana mallipäätelmiä varten SageMakerissa. Tämä viesti auttaa sinua siirtämään ja ottamaan käyttöön koneoppimisen (ML) päättelytyökuorman x86:sta Graviton-pohjaisiin ilmentymiin SageMakerissa. Tarjoamme vaiheittaisen oppaan SageMaker-koulutetun mallin käyttöönotosta Graviton-pohjaisissa tapauksissa, käsittelemme parhaita käytäntöjä työskennellessäsi Gravitonin kanssa, keskustelemme hinta-suorituskykyeduista ja esittelemme TensorFlow-mallin käyttöönottoa SageMaker Graviton -esiintymässä.

Lyhyt yleiskatsaus Gravitonista

AWS Graviton on AWS:n suunnittelema prosessoriperhe, joka tarjoaa parhaan hinta-suorituskyvyn ja ovat energiatehokkaampia kuin x86-vastineet. AWS Graviton 3 -prosessorit ovat Graviton-prosessoriperheen uusimpia ja optimoituja ML-työkuormille, mukaan lukien tuki bfloat16:lle ja kaksinkertainen SIMD (Single Instruction Multiple Data) -kaistanleveys. Kun nämä kaksi ominaisuutta yhdistetään, Graviton 3 voi tarjota jopa kolme kertaa paremman suorituskyvyn verrattuna Graviton 2 -esiintymiin. Graviton 3 käyttää myös jopa 60 % vähemmän energiaa samaan suorituskykyyn kuin vertailukelpoinen Amazonin elastinen laskentapilvi (Amazon EC2) -tapauksissa. Tämä on loistava ominaisuus, jos haluat pienentää hiilijalanjälkeäsi ja saavuttaa kestävän kehityksen tavoitteesi.

Ratkaisun yleiskatsaus

Jos haluat ottaa mallisi käyttöön Graviton-instanssiin, käytä joko AWS Deep Learning Containers or tuo omat astiat mukaan yhteensopiva Arm v8.2 -arkkitehtuurin kanssa.

Malliesi siirto (tai uusi käyttöönotto) x86-käyttöisistä ilmentymistä Graviton-instanssiin on yksinkertaista, koska AWS tarjoaa säiliöitä PyTorchin, TensorFlow-, Scikit-learn- ja XGBoost-malleille, ja mallit ovat arkkitehtuuriagnostikkoja. Siitä huolimatta, jos olet valmis tuomaan omia kirjastojasi, voit myös tehdä niin, varmista vain, että konttisi on rakennettu ympäristössä, joka tukee Arm64-arkkitehtuuria. Katso lisätietoja Oman algoritmikontin rakentaminen.

Sinun on suoritettava kolme vaihetta ottaaksesi mallisi käyttöön:

  1. Luo SageMaker-malli: Tämä sisältää muiden parametrien ohella tiedot mallitiedoston sijainnista, käyttöönotossa käytettävästä säilöstä ja päättelykomentosarjan sijainnista. (Jos sinulla on jo olemassa oleva malli, joka on jo otettu käyttöön x86-pohjaisessa päättelyesiintymässä, voit ohittaa tämän vaiheen.)
  2. Luo päätepistemääritys: Tämä sisältää tietoja päätepisteelle haluamasi ilmentymän tyypistä (esimerkiksi ml.c7g.xlarge Graviton3:lle), vaiheessa 1 luomasi mallin nimen ja esiintymien lukumäärästä päätepiste.
  3. Käynnistä päätepiste vaiheessa 2 luodulla päätepistemäärityksellä.

Edellytykset

Ennen kuin aloitat, harkitse seuraavia edellytyksiä:

  1. Täytä kohdassa luetellut edellytykset Edellytykset.
  2. Mallisi tulee olla joko PyTorch-, TensorFlow-, XGBoost- tai Scikit-learn-pohjainen malli. Seuraavassa taulukossa on yhteenveto tällä hetkellä tuetuista versioista tätä kirjoitettaessa. Katso uusimmat päivitykset osoitteesta SageMaker Framework Containers (vain SM-tuki).
    . Python TensorFlow PyTorch Scikit opittava XGBoost
    Tuetut versiot 3.8 2.9.1 1.12.1 1.0-1 1.3-1 on 1.5-1
  3. Päätelmäskripti on tallennettu Amazonin yksinkertainen tallennuspalvelu (Amazon S3).

Seuraavissa osioissa opastamme sinut käyttöönottovaiheiden läpi.

Luo SageMaker-malli

Jos sinulla on jo olemassa oleva malli, joka on jo otettu käyttöön x86-pohjaisessa johtopäätöksessä, voit ohittaa tämän vaiheen. Muussa tapauksessa suorita seuraavat vaiheet luodaksesi SageMaker-mallin:

  1. Etsi malli, jonka olet tallentanut S3-ämpäriin. Kopioi URI.
    Käytät mallin URI-osoitetta myöhemmin MODEL_S3_LOCATION.
  2. Tunnista mallin koulutuksen aikana käytetty kehysversio ja Python-versio.
    Sinun on valittava säilö käytettävissä olevien AWS Deep Learning Container -säilöjen luettelosta viitekehyksesi ja Python-versiosi mukaan. Lisätietoja on kohdassa Esittelyssä moniarkkitehtuuriset konttikuvat Amazon ECR:lle.
  3. Etsi päätelmä Python-skriptin URI S3-säilöstä (yleinen tiedostonimi on inference.py).
    Päättelykomentosarjan URI tarvitaan tiedostossa INFERENCE_SCRIPT_S3_LOCATION.
  4. Näiden muuttujien avulla voit sitten kutsua SageMaker API:ta seuraavalla komennolla:
    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= 
    )

Voit myös luoda useita arkkitehtuurikuvia ja käyttää samaa kuvaa, mutta eri tunnisteilla. Voit määrittää, millä arkkitehtuurilla ilmentymäsi otetaan käyttöön. Lisätietoja on kohdassa Esittelyssä moniarkkitehtuuriset konttikuvat Amazon ECR:lle.

Luo päätepisteen konfiguraatio

Kun olet luonut mallin, sinun on luotava päätepistemääritys suorittamalla seuraava komento (huomaa käyttämämme esiintymän tyyppi):

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

Seuraava kuvakaappaus näyttää päätepisteen määritystiedot SageMaker-konsolissa.

Käynnistä päätepiste

Edellisessä vaiheessa luodulla päätepisteen konfiguraatiolla voit ottaa päätepisteen käyttöön:

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

Odota, kunnes mallin päätepiste on otettu käyttöön. Ennusteita voidaan pyytää samalla tavalla kuin ennusteita x86-pohjaisissa ilmentymissä käyttöönotetuille päätepisteille.

Seuraava kuvakaappaus näyttää päätepisteesi SageMaker-konsolissa.

SageMaker-päätepiste määrityksistä

Mitä tuetaan

SageMaker tarjoaa suorituskyvylle optimoituja Graviton-syviä säiliöitä TensorFlow- ja PyTorch-kehyksiin. Nämä säiliöt tukevat tietokonenäköä, luonnollisen kielen käsittelyä, suosituksia ja yleisiä syviä ja laajoja mallipohjaisia ​​johtopäätösten käyttötapauksia. Syvien oppimissäilöjen lisäksi SageMaker tarjoaa myös säiliöitä klassisille ML-kehyksille, kuten XGBoost ja Scikit-learn. Säiliöt ovat binääriyhteensopivia c6g/m6g- ja c7g-esiintymien välillä, joten päättelysovelluksen siirtäminen sukupolvelta toiselle on saumatonta.

C6g/m6g tukee fp16:ta (puolitarkkuuskelluke) ja tarjoaa yhteensopiville malleille vastaavan tai paremman suorituskyvyn verrattuna c5-instanssiin. C7g lisää huomattavasti ML-suorituskykyä kaksinkertaistamalla SIMD:n leveyden ja tukemalla bfloat-16:ta (bf16), joka on kustannustehokkain alusta mallien käyttämiseen.

Sekä c6g/m6g että c7g tarjoavat hyvän suorituskyvyn klassiselle ML:lle (esimerkiksi XGBoost) verrattuna muihin SageMakerin CPU-esiintymiin. Bfloat-16-tuki c7g:ssä mahdollistaa bf16- tai AMP (Automatic Mixed Precision) -koulutettujen mallien tehokkaan käyttöönoton. Gravitonin Arm Compute Library (ACL) -taustajärjestelmä tarjoaa bfloat-16-ytimiä, jotka voivat nopeuttaa jopa fp32-operaattoreita nopean matemaattisen tilan avulla ilman mallin kvantisointia.

Suositellut parhaat käytännöt

Graviton-esiintymissä jokainen vCPU on fyysinen ydin. Yleisistä prosessoriresursseista ei kiistetä (toisin kuin SMT), ja työkuorman suorituskyvyn skaalaus on lineaarinen jokaisen vCPU-lisäyksen yhteydessä. Siksi on suositeltavaa käyttää eräpäätelmää aina, kun käyttötapaus sen sallii. Tämä mahdollistaa vCPU:iden tehokkaan käytön käsittelemällä rinnakkain erän jokaisessa fyysisessä ytimessä. Jos eräpäätelmä ei ole mahdollista, tietyn hyötykuorman optimaalinen ilmentymän koko vaaditaan sen varmistamiseksi, että käyttöjärjestelmän säikeen ajoituksen yleiskustannukset eivät ylitä lisävCPU:iden mukana tulevaa laskentatehoa.

TensorFlow tulee oletuksena Eigen-ytimien mukana, ja on suositeltavaa vaihtaa OneDNN:ään ACL:n kanssa saadaksesi optimoidun päättelytaustajärjestelmän. OneDNN-taustaosa ja bfloat-16 nopea matematiikkatila voidaan ottaa käyttöön konttipalvelua käynnistettäessä:

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

Edellinen käyttökomento isännöi tavallista resnet50-mallia kahdella tärkeällä kokoonpanolla:

-e TF_ENABLE_ONEDNN_OPTS=1
-e DNNL_DEFAULT_FPMATH_MODE=BF16

Ne voidaan välittää päättelysäilöön seuraavalla tavalla:

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

Esimerkki käyttöönotosta

Tässä viestissä näytämme sinulle, kuinka SageMakerissa koulutettu TensorFlow-malli otetaan käyttöön Graviton-käyttöisellä SageMaker-päätelmä-instanssilla.

Voit suorittaa koodinäytteen joko SageMaker-muistikirjan ilmentymässä, an Amazon SageMaker Studio muistikirja tai Jupyter-muistikirja paikallistilassa. Sinun on palautettava SageMaker-suoritusrooli, jos käytät Jupyter-muistikirjaa paikallisessa tilassa.

Seuraava esimerkki käsittelee CIFAR-10-tietojoukkoa. Voit seurata muistikirjan esimerkkiä SageMaker-esimerkeistä GitHub repo toistaa tässä viestissä käytetty malli. Käytämme koulutettua mallia ja cifar10_keras_main.py Python-skripti johtopäätösten tekemiseen.

Malli on tallennettu S3-ämpäriin: s3://aws-ml-blog/artifacts/run-ml-inference-on-graviton-based-instances-with-amazon-sagemaker/model.tar.gz

- cifar10_keras_main.py skripti, jota voidaan käyttää johtopäätökseen, on tallennettu osoitteeseen:s3://aws-ml-blog/artifacts/run-ml-inference-on-graviton-based-instances-with-amazon-sagemaker/script/cifar10_keras_main.py

Käytämme us-east-1 Alue ja ota malli käyttöön ml.c7g.xlarge Graviton-pohjaisessa ilmentymässä. Tämän perusteella AWS Deep Learning Container -säilön URI on 763104351884.dkr.ecr.us-east-1.amazonaws.com/tensorflow-inference-graviton:2.9.1-cpu-py38-ubuntu20.04-sagemaker

  1. Määritä seuraavalla koodilla:
    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. Lataa tietojoukko päätepistetestausta varten:
    from keras.datasets import cifar10
    (x_train, y_train), (x_test, y_test) = cifar10.load_data()

  3. Luo malli ja päätepisteen konfiguraatio ja ota päätepiste käyttöön:
    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. Vaihtoehtoisesti voit lisätä päättelyskriptisi Environment in create_model jos et alun perin lisännyt sitä artefaktina SageMaker-malliisi harjoituksen aikana:
    "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)   
    

    Sinun on odotettava muutama minuutti, jotta käyttöönotto tapahtuu.

  5. Tarkista päätepisteen tila seuraavalla koodilla:
    describe_response = client.describe_endpoint(EndpointName=ENDPOINT_NAME)
    print(describe_response["EndpointStatus"]

    Voit myös tarkistaa AWS-hallintakonsoli nähdäksesi, milloin mallisi on otettu käyttöön.

  6. Määritä ajonaikainen ympäristö kutsumaan päätepisteet:
    runtime = boto3.Session().client(service_name="runtime.sagemaker")

    Nyt valmistelemme hyötykuorman kutsumaan päätepistettä. Käytämme mallin koulutuksessa samantyyppisiä kuvia. Nämä ladattiin edellisissä vaiheissa.

  7. Heitä hyötykuorma tensoreihin ja aseta oikea muoto, jota malli odottaa. Tässä esimerkissä pyydämme vain yhtä ennustetta.
    input_image = x_test[0].reshape(1,32,32,3)

    Saamme mallin ulostulon taulukkona.

  8. Voimme muuttaa tämän lähdön todennäköisyyksiksi, jos käytämme siihen softmaxia:
    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())

Siivoa resurssit

Tähän ratkaisuun liittyvät palvelut aiheuttavat kuluja. Kun olet valmis käyttämään tätä ratkaisua, puhdista seuraavat resurssit:

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

Hinta-suorituskyky vertailu

Graviton-pohjaiset ilmentymät tarjoavat alhaisimman hinnan ja parhaan hinta-suorituskyvyn verrattuna x86-pohjaisiin ilmentymiin. Samoin kuin EC2-esiintymät, SageMaker-päätelmäpäätepisteet ml.c6g-esiintymillä (Graviton 2) tarjoavat 20 % alhaisemman hinnan verrattuna ml.c5-esiintymiin, ja Graviton 3 ml.c7g-esiintymät ovat 15 % halvempia kuin ml.c6-esiintymät. Lisätietoja on kohdassa Amazon SageMaker -hinnoittelu.

Yhteenveto

Tässä viestissä esittelimme äskettäin lanseeratun SageMaker-kyvyn ottaa käyttöön malleja Graviton-pohjaisissa johtopäätöstapauksissa. Annoimme sinulle ohjeita parhaista käytännöistä ja keskustelimme lyhyesti uudentyyppisten päättelytapahtumien hinta-tehokkuuseduista.

Lisätietoja Gravitonista on osoitteessa AWS Graviton -prosessori. Voit aloittaa AWS Graviton -pohjaisten EC2-instanssien käytön Amazon EC2 -konsolissa ja viittaamalla AWS Graviton tekninen opas. Voit ottaa käyttöön Sagemaker-mallin päätepisteen Gravitoniin päättelemiseksi tämän blogikirjoituksen esimerkkikoodilla.


Tietoja kirjoittajista

Victor JaramilloVictor Jaramillo, tohtori on vanhempi koneoppimisinsinööri AWS-asiantuntijapalveluissa. Ennen AWS:ää hän oli yliopistoprofessori ja ennustavan ylläpidon tutkija. Vapaa-ajallaan hän ajaa mielellään moottoripyörällään ja tee-se-itse moottoripyörämekaniikka.

Zmnako AwrahmanZmnako Awrahman, tohtori on Practice Manager, ML SME ja Machine Learning Technical Field Community (TFC) -jäsen Amazon Web Servicesissä. Hän auttaa asiakkaita hyödyntämään pilven mahdollisuuksia poimimaan arvoa tiedoistaan ​​data-analytiikan ja koneoppimisen avulla.

Sunita NadampalliSunita Nadampalli on AWS:n ohjelmistokehityspäällikkö. Hän johtaa Graviton-ohjelmiston suorituskyvyn optimointia koneen taipumiseen, HPC:hen ja multimedian työkuormiin. Hän on intohimoinen avoimen lähdekoodin kehittämiseen ja kustannustehokkaiden ohjelmistoratkaisujen toimittamiseen Arm SoC:illa.

Johna LiuJohna Liu on ohjelmistokehitysinsinööri Amazon SageMaker -tiimissä. Hänen nykyinen työnsä keskittyy auttamaan kehittäjiä isännöimään tehokkaasti koneoppimismalleja ja parantamaan päättelyn suorituskykyä. Hän on intohimoinen paikkatietojen analysointiin ja tekoälyn käyttämiseen yhteiskunnallisten ongelmien ratkaisemisessa.

Alan TanAlan Tan on SageMakerin vanhempi tuotepäällikkö, joka johtaa suuria mallipäätelmiä. Hän on intohimoinen koneoppimisen soveltamisesta analytiikan alalla. Työn ulkopuolella hän viihtyy ulkona.

Aikaleima:

Lisää aiheesta AWS-koneoppiminen