Käivitage masinõppe järelduste töökoormusi AWS Gravitoni-põhistel eksemplaridel rakendusega Amazon SageMaker PlatoBlockchain Data Intelligence. Vertikaalne otsing. Ai.

Käivitage masinõppe järelduste töökoormusi AWS Gravitoni-põhistel eksemplaridel rakendusega Amazon SageMaker

Täna alustame Amazon SageMaker järeldada AWS Graviton et saaksite kasutada Gravitoni kiipidest tulenevaid hinna, jõudluse ja tõhususe eeliseid.

Gravitonipõhised eksemplarid on SageMakeris mudeli järelduste tegemiseks saadaval. See postitus aitab teil migreerida ja juurutada masinõppe (ML) järelduste töökoormust x86-lt Gravitoni-põhistele eksemplaridele SageMakeris. Pakume samm-sammult juhendit teie SageMakeri koolitatud mudeli juurutamiseks Gravitoni-põhistele eksemplaridele, käsitleme Gravitoniga töötamise parimaid tavasid, arutame hinna ja toimivuse eeliseid ja tutvustame, kuidas TensorFlow mudelit SageMaker Gravitoni eksemplaril juurutada.

Lühiülevaade Gravitonist

AWS Graviton on AWS-i loodud protsessorite perekond, mis pakub parimat hinna ja kvaliteedi suhet ning on energiasäästlikumad kui nende x86 analoogid. AWS Graviton 3 protsessorid on Gravitoni protsessorite perekonna uusimad ja optimeeritud ML-töökoormuste jaoks, sealhulgas bfloat16 tugi ja kahekordne SIMD (Single Instruction Multiple Data) ribalaius. Kui need kaks funktsiooni kombineerida, võib Graviton 3 pakkuda kuni kolm korda paremat jõudlust võrreldes Graviton 2 eksemplaridega. Graviton 3 kasutab sama jõudluse saavutamiseks kuni 60% vähem energiat Amazon Elastic Compute Cloud (Amazon EC2) juhtudel. See on suurepärane funktsioon, kui soovite vähendada oma süsiniku jalajälge ja saavutada oma jätkusuutlikkuse eesmärgid.

Lahenduse ülevaade

Mudelite juurutamiseks Gravitoni eksemplaridesse kasutage kas AWS-i süvaõppekonteinerid or kaasa oma konteinerid ühildub Arm v8.2 arhitektuuriga.

Teie mudelite üleviimine (või uus juurutamine) x86 toega eksemplaridelt Gravitoni eksemplaridesse on lihtne, kuna AWS pakub PyTorchi, TensorFlow, Scikit-learni ja XGBoostiga mudelite hostimiseks konteinereid ning mudelid on arhitektuuriagnostikud. Sellegipoolest, kui olete nõus oma teegid kaasa võtma, saate seda ka teha, lihtsalt veenduge, et teie konteiner on ehitatud keskkonnas, mis toetab Arm64 arhitektuuri. Lisateabe saamiseks vt Oma algoritmikonteineri ehitamine.

Mudeli juurutamiseks peate tegema kolm sammu.

  1. SageMakeri mudeli loomine: see sisaldab muude parameetrite hulgas teavet mudelifaili asukoha, juurutamiseks kasutatava konteineri ja järeldusskripti asukoha kohta. (Kui teil on olemasolev mudel juba x86-põhises järelduseksemplaris juurutatud, võite selle sammu vahele jätta.)
  2. Lõpp-punkti konfiguratsiooni loomine: see sisaldab teavet lõpp-punkti jaoks soovitud eksemplari tüübi kohta (nt ml.c7g.xlarge Graviton3 jaoks), 1. sammus loodud mudeli nime ja eksemplaride arvu kohta. lõpp-punkt.
  3. Käivitage lõpp-punkt 2. sammus loodud lõpp-punkti konfiguratsiooniga.

Eeldused

Enne alustamist kaaluge järgmisi eeltingimusi:

  1. Täitke punktis loetletud eeltingimused Eeldused.
  2. Teie mudel peaks olema PyTorchi, TensorFlow, XGBoost või Scikit-learn-põhine mudel. Järgmises tabelis on kokkuvõte selle kirjutamise seisuga praegu toetatud versioonidest. Viimaste värskenduste saamiseks vaadake SageMakeri raamistiku konteinerid (ainult SM-i tugi).
    . Python TensorFlow PyTorch Scikit-õppida XGBoost
    Toetatud versioonid 3.8 2.9.1 1.12.1 1.0-1 1.3-1 kuni 1.5-1
  3. Järeldusskript on salvestatud Amazoni lihtne salvestusteenus (Amazon S3).

Järgmistes jaotistes tutvustame teile juurutamisetappe.

Looge SageMakeri mudel

Kui teil on olemasolev mudel juba x86-põhises järelduseksemplaris juurutatud, võite selle sammu vahele jätta. Muul juhul järgige SageMakeri mudeli loomiseks järgmisi samme.

  1. Otsige üles mudel, mille salvestasite S3 ämbrisse. Kopeerige URI.
    Mudeli URI-d kasutate hiljem MODEL_S3_LOCATION.
  2. Tuvastage mudelikoolituse käigus kasutatud raamistiku versioon ja Pythoni versioon.
    Peate valima konteineri saadaolevate AWS-i süvaõppekonteinerite loendist vastavalt oma raamistikule ja Pythoni versioonile. Lisateabe saamiseks vaadake Tutvustame Amazon ECR-i jaoks mõeldud mitme arhitektuuriga konteineripilte.
  3. Leidke S3 ämbrist järeldus Pythoni skripti URI (tavaline failinimi on inference.py).
    Järeldusskripti URI on vajalik failis INFERENCE_SCRIPT_S3_LOCATION.
  4. Nende muutujate abil saate SageMaker API-le helistada järgmise käsuga:
    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= 
    )

Saate luua ka mitme arhitektuuriga pilte ja kasutada sama pilti, kuid erinevate siltidega. Saate näidata, millisel arhitektuuril teie eksemplar juurutatakse. Lisateabe saamiseks vaadake Tutvustame Amazon ECR-i jaoks mõeldud mitme arhitektuuriga konteineripilte.

Looge lõpp-punkti konfiguratsioon

Pärast mudeli loomist peate looma lõpp-punkti konfiguratsiooni, käivitades järgmise käsu (pange tähele, millist tüüpi eksemplari me kasutame):

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

Järgmine ekraanipilt näitab lõpp-punkti konfiguratsiooni üksikasju SageMakeri konsoolis.

Käivitage lõpp-punkt

Eelmises etapis loodud lõpp-punkti konfiguratsiooniga saate lõpp-punkti juurutada:

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

Oodake, kuni teie mudeli lõpp-punkt on juurutatud. Ennustusi saab taotleda samal viisil, nagu taotlete ennustusi x86-põhistes eksemplarides juurutatud lõpp-punktide jaoks.

Järgmine ekraanipilt näitab teie lõpp-punkti SageMakeri konsoolil.

SageMakeri lõpp-punkt konfiguratsioonist

Mida toetatakse

SageMaker pakub jõudlusele optimeeritud Gravitoni süvakonteinereid TensorFlow ja PyTorchi raamistike jaoks. Need konteinerid toetavad arvutinägemist, loomuliku keele töötlemist, soovitusi ja üldiseid sügavaid ja laiaulatuslikke mudelipõhiseid järelduste kasutusjuhtumeid. Lisaks süvaõppe konteineritele pakub SageMaker konteinereid ka klassikaliste ML-i raamistike jaoks, nagu XGBoost ja Scikit-learn. Konteinerid on c6g/m6g ja c7g eksemplaride vahel binaarselt ühilduvad, mistõttu on järeldusrakenduse üleviimine ühelt põlvkonnalt teisele sujuv.

C6g/m6g toetab fp16 (pooltäpne ujuki) ja ühilduvate mudelite jaoks tagab samaväärse või parema jõudluse võrreldes c5 eksemplaridega. C7g suurendab oluliselt ML jõudlust, kahekordistades SIMD laiust ja toetades bfloat-16 (bf16), mis on teie mudelite käitamiseks kõige kuluefektiivsem platvorm.

Nii c6g/m6g kui ka c7g pakuvad klassikalise ML-i jaoks (näiteks XGBoost) head jõudlust võrreldes teiste SageMakeri CPU eksemplaridega. Bfloat-16 tugi c7g-l võimaldab tõhusalt juurutada bf16 koolitatud või AMP (Automatic Mixed Precision) koolitusega mudeleid. Gravitoni Arm Compute Library (ACL) taustaprogramm pakub bfloat-16 tuumasid, mis võivad kiirendada isegi fp32 operaatoreid kiire matemaatikarežiimi kaudu ilma mudeli kvantimiseta.

Soovitatavad parimad tavad

Gravitoni eksemplaridel on iga vCPU füüsiline tuum. Ühiste protsessoriressursside pärast pole vaidlust (erinevalt SMT-st) ja töökoormuse jõudluse skaleerimine on iga vCPU lisamise korral lineaarne. Seetõttu on soovitatav kasutada partii järeldust alati, kui kasutusjuhtum seda võimaldab. See võimaldab vCPU-sid tõhusalt kasutada, töödeldes paralleelselt iga füüsilise tuuma partii. Kui partii järeldamine pole võimalik, on vajalik antud kasuliku koormuse jaoks optimaalne eksemplari suurus, et OS-i lõime ajastamise üldkulud ei kaaluks üles täiendavate vCPU-dega kaasnevat arvutusvõimsust.

TensorFlow on vaikimisi Eigeni tuumadega ja kõige optimeeritud järelduste taustaprogrammi saamiseks on soovitatav lülituda OneDNN-ile koos ACL-iga. Konteinerteenuse käivitamisel saab lubada OneDNN-i taustaprogrammi ja kiire matemaatikarežiimi bfloat-16:

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

Eelnev teeninduskäsk majutab standardset resnet50 mudelit kahe olulise konfiguratsiooniga:

-e TF_ENABLE_ONEDNN_OPTS=1
-e DNNL_DEFAULT_FPMATH_MODE=BF16

Need saab edastada järelduskonteinerisse järgmisel viisil:

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

Kasutuselevõtu näide

Selles postituses näitame teile, kuidas juurutada SageMakeris koolitatud TensorFlow mudelit Gravitoni toega SageMakeri järelduseksemplarile.

Koodinäidise saate käivitada kas SageMakeri märkmiku eksemplaris või Amazon SageMaker Studio sülearvuti või Jupyteri sülearvuti kohalikus režiimis. Kui kasutate Jupyteri sülearvutit kohalikus režiimis, peate hankima SageMakeri täitmisrolli.

Järgmine näide käsitleb CIFAR-10 andmekogumit. Saate järgida märkmiku näidet SageMakeri näidetest GitHub repo selles postituses kasutatud mudeli reprodutseerimiseks. Kasutame koolitatud mudelit ja cifar10_keras_main.py Pythoni skript järelduste tegemiseks.

Mudelit hoitakse S3 ämbris: s3://aws-ml-blog/artifacts/run-ml-inference-on-graviton-based-instances-with-amazon-sagemaker/model.tar.gz

. cifar10_keras_main.py skript, mida saab järelduste tegemiseks kasutada, on salvestatud aadressil:s3://aws-ml-blog/artifacts/run-ml-inference-on-graviton-based-instances-with-amazon-sagemaker/script/cifar10_keras_main.py

Me kasutame us-east-1 Piirige ja juurutage mudel ml.c7g.xlarge Gravitoni-põhises eksemplaris. Selle põhjal on meie AWS-i süvaõppe konteineri URI 763104351884.dkr.ecr.us-east-1.amazonaws.com/tensorflow-inference-graviton:2.9.1-cpu-py38-ubuntu20.04-sagemaker

  1. Seadistage järgmise koodiga:
    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. Laadige alla andmestik lõpp-punkti testimiseks:
    from keras.datasets import cifar10
    (x_train, y_train), (x_test, y_test) = cifar10.load_data()

  3. Looge mudel ja lõpp-punkti konfiguratsioon ning juurutage lõpp-punkt:
    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. Soovi korral saate lisada oma järeldusskripti Environment in create_model kui te ei lisanud seda algselt oma SageMakeri mudelile treeningu ajal artefaktina:
    "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)   
    

    Peate paar minutit ootama, kuni juurutamine toimub.

  5. Kontrollige lõpp-punkti olekut järgmise koodiga:
    describe_response = client.describe_endpoint(EndpointName=ENDPOINT_NAME)
    print(describe_response["EndpointStatus"]

    Võite ka kontrollida AWS-i juhtimiskonsool et näha, millal teie mudel kasutusele võetakse.

  6. Seadistage käituskeskkond lõpp-punktide kutsumiseks:
    runtime = boto3.Session().client(service_name="runtime.sagemaker")

    Nüüd valmistame kasuliku koormuse lõpp-punkti käivitamiseks. Kasutame sama tüüpi pilte, mida modelli koolitamisel. Need laaditi alla eelmiste sammude käigus.

  7. Kandke kasulik koormus tensoritesse ja määrake õige vorming, mida mudel ootab. Selle näite puhul taotleme ainult ühte ennustust.
    input_image = x_test[0].reshape(1,32,32,3)

    Mudeli väljundi saame massiivina.

  8. Saame selle väljundi muuta tõenäosusteks, kui rakendame sellele softmaxi:
    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())

Puhastage ressursse

Selle lahendusega seotud teenused põhjustavad kulusid. Kui olete selle lahenduse kasutamise lõpetanud, puhastage järgmised ressursid.

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

Hinna ja kvaliteedi võrdlus

Gravitonipõhised eksemplarid pakuvad x86-põhiste eksemplaridega võrreldes madalaimat hinda ja parimat hinna ja kvaliteedi suhet. Sarnaselt EC2 eksemplaridele pakuvad SageMakeri järelduse lõpp-punktid ml.c6g eksemplaridega (Graviton 2) võrreldes ml.c20-ga 5% madalamat hinda ja Graviton 3 ml.c7g eksemplarid on 15% odavamad kui ml.c6 eksemplarid. Lisateabe saamiseks vaadake Amazon SageMakeri hinnakujundus.

Järeldus

Selles postituses tutvustasime äsja käivitatud SageMakeri võimalust mudelite juurutamiseks Gravitoni toega järeldusjuhtumites. Andsime teile juhiseid parimate tavade kohta ja arutasime lühidalt uut tüüpi järeldusjuhtumite hinna ja toimivuse eeliseid.

Gravitoni kohta lisateabe saamiseks vaadake AWS Graviton protsessor. Saate alustada AWS Gravitonipõhiste EC2 eksemplaridega Amazon EC2 konsoolil ja viidates AWS Gravitoni tehniline juhend. Selles ajaveebi postituses oleva näidiskoodi abil saate Gravitoni kohta järelduste tegemiseks juurutada Sagemakeri mudeli lõpp-punkti.


Autoritest

Viktor JaramilloVictor Jaramillo, PhD on AWS Professional Services masinõppe vaneminsener. Enne AWS-i oli ta ülikooli professor ja ennustava hoolduse teadur. Vabal ajal naudib ta mootorrattaga sõitmist ja mootorratta mehaanika isetegemist.

Zmnako AwrahmanZmnako Awrahman, PhD on praktikajuht, ML SME ja masinõppe tehnilise valdkonna kogukonna (TFC) liige Amazon Web Servicesis. Ta aitab klientidel andmeanalüütika ja masinõppe abil oma andmetest väärtust ammutada.

Sunita NadampalliSunita Nadampalli on AWS-i tarkvaraarenduse juht. Ta juhib Gravitoni tarkvara jõudluse optimeerimist masinate kaldumise, HPC ja multimeedia töökoormuse jaoks. Ta on kirglik avatud lähtekoodiga arendustegevuse ja Arm SoC-dega kuluefektiivsete tarkvaralahenduste pakkumise vastu.

Johna LiuJohna Liu on Amazon SageMakeri meeskonna tarkvaraarenduse insener. Tema praegune töö keskendub sellele, et aidata arendajatel masinõppemudeleid tõhusalt hostida ja järelduste toimivust parandada. Ta on kirglik ruumiandmete analüüsi ja AI kasutamise vastu ühiskondlike probleemide lahendamiseks.

Alan TanAlan Tan on SageMakeri vanem tootejuht, kes juhib jõupingutusi suurte mudelite järelduste tegemisel. Ta on kirglik masinõppe rakendamisest analüütika valdkonnas. Väljaspool tööd naudib ta õues olemist.

Ajatempel:

Veel alates AWS-i masinõpe