Optimoi Amazon SageMaker JumpStart -perusmallien käyttöönottokustannukset Amazon SageMakerin asynkronisilla päätepisteillä | Amazon Web Services

Optimoi Amazon SageMaker JumpStart -perusmallien käyttöönottokustannukset Amazon SageMakerin asynkronisilla päätepisteillä | Amazon Web Services

Generatiivisten tekoälysovellusten menestys useilla eri aloilla on herättänyt huomiota ja kiinnostusta yrityksissä ympäri maailmaa, jotka haluavat toistaa ja ylittää kilpailijoiden saavutukset tai ratkaista uusia ja jännittäviä käyttötapauksia. Nämä asiakkaat etsivät perusmalleja, kuten TII Falconia, Stable Diffusion XL:ää tai OpenAI:n GPT-3.5:tä, moottoreina, jotka tehostavat generatiivista tekoälyinnovaatiota.

Perusmallit ovat luokka generatiivisia tekoälymalleja, jotka pystyvät ymmärtämään ja luomaan ihmisen kaltaista sisältöä, kiitos valtavan määrän jäsentämätöntä dataa, johon ne on koulutettu. Nämä mallit ovat mullistaneet erilaisia ​​tietokonenäön (CV) ja luonnollisen kielen käsittelyn (NLP) tehtäviä, mukaan lukien kuvan luominen, kääntäminen ja kysymyksiin vastaaminen. Ne toimivat rakennuspalikoina monille tekoälysovelluksille, ja niistä on tullut keskeinen komponentti kehittyneiden älykkäiden järjestelmien kehittämisessä.

Perusmallien käyttöönotto voi kuitenkin tuoda mukanaan merkittäviä haasteita, erityisesti kustannus- ja resurssitarpeiden osalta. Nämä mallit tunnetaan koostaan, jotka vaihtelevat usein sadasta miljoonista miljardeihin parametreihin. Niiden suuri koko vaatii laajoja laskentaresursseja, mukaan lukien tehokkaat laitteistot ja huomattavan muistikapasiteetin. Itse asiassa perusmallien käyttöönotto vaatii yleensä vähintään yhden (usein useamman) GPU:n käsittelemään laskentakuormaa tehokkaasti. Esimerkiksi TII Falcon-40B Instruct -malli vaatii vähintään ml.g5.12xlarge-esiintymän ladatakseen muistiin onnistuneesti, mutta toimii parhaiten isommilla instansseilla. Tämän seurauksena näiden mallien käyttöönoton ja ylläpidon sijoitetun pääoman tuotto (ROI) voi olla liian alhainen osoittamaan liiketoiminnan arvoa, etenkin kehityssykleissä tai piikkisissä työkuormissa. Tämä johtuu GPU-käyttöisten esiintymien käyttökustannuksista pitkiä istuntoja varten, mahdollisesti 24/7.

Aiemmin tänä vuonna ilmoitimme Amazonin kallioperä, palvelimeton API, jolla pääset käsiksi Amazonin ja luovien tekoälykumppaneiden perustamalleihin. Vaikka se on tällä hetkellä yksityisessä esikatselussa, sen palvelimeton API mahdollistaa Amazonin, Anthropicin, Stability AI:n ja AI21:n perusmallien käyttämisen ilman, että sinun tarvitsee ottaa itse käyttöön päätepisteitä. Hugging Facen kaltaisten yhteisöjen avoimen lähdekoodin mallit ovat kuitenkin lisääntyneet paljon, eikä jokaista niistä ole tullut saataville Amazon Bedrockin kautta.

Tässä postauksessa keskitymme näihin tilanteisiin ja ratkaisemme korkeiden kustannusten riskin ottamalla käyttöön suuria perusmalleja Amazon Sage Maker asynkroniset päätepisteet alkaen Amazon SageMaker JumpStart. Tämä voi auttaa leikkaamaan arkkitehtuurin kustannuksia, jolloin päätepiste voi toimia vain, kun pyynnöt ovat jonossa ja vain lyhyen elinkaaren ajan, kun taas skaalautuu nollaan, kun pyyntöjä ei odota huoltoa. Tämä kuulostaa hyvältä moniin käyttötapauksiin; kuitenkin päätepiste, joka on skaalattu nollaan, ottaa käyttöön kylmäkäynnistysajan ennen kuin se pystyy toimittamaan päätelmiä.

Ratkaisun yleiskatsaus

Seuraava kaavio kuvaa ratkaisuarkkitehtuuriamme.

Optimoi Amazon SageMaker JumpStart -perusmallien käyttöönottokustannukset Amazon SageMakerin asynkronisilla päätepisteillä | Amazon Web Services PlatoBlockchain Data Intelligence. Pystysuuntainen haku. Ai.

Käyttämämme arkkitehtuuri on hyvin yksinkertaista:

  • Käyttöliittymä on muistikirja, joka voidaan korvata Streamlit- tai vastaavalla tekniikalla rakennetulla verkkokäyttöliittymällä. Meidän tapauksessamme muistikirja on Amazon SageMaker Studio muistikirja, joka toimii ml.m5.large-esiintymässä PyTorch 2.0 Python 3.10 -suorittimen ytimellä.
  • Muistikirja kysyy päätepisteestä kolmella tavalla: SageMaker Python SDK, AWS SDK Pythonille (Boto3) ja LangChain.
  • Päätepiste toimii asynkronisesti SageMakerissa, ja päätepisteessä otamme käyttöön Falcon-40B Instruct -mallin. Se on tällä hetkellä uusinta ohjemallien suhteen ja saatavilla SageMaker JumpStartissa. Yhden API-kutsun avulla voimme ottaa mallin käyttöön päätepisteessä.

Mikä on SageMakerin asynkroninen päättely

SageMakerin asynkroninen päättely on yksi neljästä SageMakerin käyttöönottovaihtoehdosta yhdessä reaaliaikaisten päätepisteiden, eräpäätelmän ja palvelimettoman päättelyn kanssa. Lisätietoja eri käyttöönottovaihtoehdoista on kohdassa Ota mallit käyttöön päättelyä varten.

SageMakerin asynkroninen päättely jonottaa saapuvat pyynnöt ja käsittelee ne asynkronisesti, mikä tekee tästä vaihtoehdosta ihanteellisen pyynnöille, joissa on suuri hyötykuorma, jopa 1 Gt, pitkät käsittelyajat ja lähes reaaliaikaiset latenssivaatimukset. Suurin etu, jonka se tarjoaa käsiteltäessä suuria perustusmalleja, erityisesti POC:n (proof of concept) tai kehitystyön aikana, on kyky määrittää asynkroninen päättely skaalautumaan nollan ilmentymämäärään, kun pyyntöjä ei ole. prosessia, mikä säästää kustannuksia. Lisätietoja SageMakerin asynkronisesta päättelystä on kohdassa Asynkroninen päättely. Seuraava kaavio havainnollistaa tätä arkkitehtuuria.

Optimoi Amazon SageMaker JumpStart -perusmallien käyttöönottokustannukset Amazon SageMakerin asynkronisilla päätepisteillä | Amazon Web Services PlatoBlockchain Data Intelligence. Pystysuuntainen haku. Ai.

Jos haluat ottaa käyttöön asynkronisen päättelypäätepisteen, sinun on luotava AsyncInferenceConfig esine. Jos luot AsyncInferenceConfig sen argumentteja määrittelemättä oletusarvo S3OutputPath on s3://sagemaker-{REGION}-{ACCOUNTID}/async-endpoint-outputs/{UNIQUE-JOB-NAME} ja S3FailurePath on s3://sagemaker-{REGION}-{ACCOUNTID}/async-endpoint-failures/{UNIQUE-JOB-NAME}.

Mikä on SageMaker JumpStart

Mallimme tulee SageMaker JumpStartista, SageMakerin ominaisuudesta, joka nopeuttaa koneoppimisen (ML) matkaa tarjoamalla valmiiksi koulutettuja malleja, ratkaisumalleja ja esimerkkimuistikirjoja. Se tarjoaa pääsyn laajaan valikoimaan esikoulutettuja malleja eri ongelmatyypeille, jolloin voit aloittaa ML-tehtäväsi vankalla pohjalla. SageMaker JumpStart tarjoaa myös ratkaisumalleja yleisiin käyttötapauksiin ja esimerkkimuistikirjoja oppimiseen. SageMaker JumpStartin avulla voit vähentää ML-projektien aloittamiseen kuluvaa aikaa ja vaivaa yhdellä napsautuksella tapahtuvan ratkaisun lanseerauksilla ja kattavilla resursseilla käytännön ML-kokemukseen.

Seuraavassa kuvakaappauksessa on esimerkki vain joistakin SageMaker JumpStart -käyttöliittymässä saatavilla olevista malleista.

Optimoi Amazon SageMaker JumpStart -perusmallien käyttöönottokustannukset Amazon SageMakerin asynkronisilla päätepisteillä | Amazon Web Services PlatoBlockchain Data Intelligence. Pystysuuntainen haku. Ai.

Ota käyttöön malli

Ensimmäinen askel on ottaa malli käyttöön SageMakerissa. Voimme tehdä tämän käyttämällä SageMaker JumpStartin käyttöliittymää tai SageMaker Python SDK:ta, joka tarjoaa API:n, jonka avulla voimme ottaa mallin käyttöön asynkroniseen päätepisteeseen:

%%time
from sagemaker.jumpstart.model import JumpStartModel, AsyncInferenceConfig
from sagemaker.serializers import JSONSerializer
from sagemaker.deserializers import JSONDeserializer model_id, model_version = "huggingface-llm-falcon-40b-instruct-bf16", "*"
my_model = JumpStartModel(model_id=model_id)
predictor = my_model.deploy( initial_instance_count=0, instance_type="ml.g5.12xlarge", async_inference_config=AsyncInferenceConfig()
)

Tämä puhelu voi kestää noin 10 minuuttia. Tänä aikana päätepiste pyöritetään, säilö yhdessä mallin artefaktien kanssa ladataan päätepisteeseen, mallin kokoonpano ladataan SageMaker JumpStartista, sitten asynkroninen päätepiste paljastetaan DNS-päätepisteen kautta. Varmistaaksemme, että päätepisteemme voi skaalautua nollaan, meidän on määritettävä automaattinen skaalaus asynkroniselle päätepisteelle käyttämällä Application Auto Scaling -toimintoa. Sinun on ensin rekisteröitävä päätepisteversiosi Application Auto Scaling -sovelluksella, määritettävä skaalauskäytäntö ja sitten sovellettava skaalauskäytäntöä. Tässä kokoonpanossa käytämme mukautettua mittaria käyttämällä CustomizedMetricSpecification, Kutsutaan ApproximateBacklogSizePerInstance, kuten seuraavassa koodissa näkyy. Yksityiskohtainen luettelo amazonin pilvikello mittareita, jotka ovat käytettävissä asynkronisen päättelyn päätepisteesi kanssa, katso Valvonta CloudWatchin avulla.

import boto3 client = boto3.client("application-autoscaling")
resource_id = "endpoint/" + my_model.endpoint_name + "/variant/" + "AllTraffic" # Configure Autoscaling on asynchronous endpoint down to zero instances
response = client.register_scalable_target( ServiceNamespace="sagemaker", ResourceId=resource_id, ScalableDimension="sagemaker:variant:DesiredInstanceCount", MinCapacity=0, # Miminum number of instances we want to scale down to - scale down to 0 to stop incurring in costs MaxCapacity=1, # Maximum number of instances we want to scale up to - scale up to 1 max is good enough for dev
) response = client.put_scaling_policy( PolicyName="Invocations-ScalingPolicy", ServiceNamespace="sagemaker", # The namespace of the AWS service that provides the resource. ResourceId=resource_id, # Endpoint name ScalableDimension="sagemaker:variant:DesiredInstanceCount", # SageMaker supports only Instance Count PolicyType="TargetTrackingScaling", # 'StepScaling'|'TargetTrackingScaling' TargetTrackingScalingPolicyConfiguration={ "TargetValue": 5.0, # The target value for the metric. - here the metric is - SageMakerVariantInvocationsPerInstance "CustomizedMetricSpecification": { "MetricName": "ApproximateBacklogSizePerInstance", "Namespace": "AWS/SageMaker", "Dimensions": [{"Name": "EndpointName", "Value": my_model.endpoint_name}], "Statistic": "Average", }, "ScaleInCooldown": 600, # The amount of time, in seconds, after a scale in activity completes before another scale in activity can start. "ScaleOutCooldown": 300, # ScaleOutCooldown - The amount of time, in seconds, after a scale out activity completes before another scale out activity can start. # 'DisableScaleIn': True|False - indicates whether scale in by the target tracking policy is disabled. # If the value is true, scale in is disabled and the target tracking policy won't remove capacity from the scalable resource. },
)

Voit varmistaa, että tämä käytäntö on asetettu onnistuneesti siirtymällä SageMaker-konsoliin ja valitsemalla Endpoints varten Päättely navigointiruudussa ja etsimässä juuri käyttöönottamamme päätepistettä.

Optimoi Amazon SageMaker JumpStart -perusmallien käyttöönottokustannukset Amazon SageMakerin asynkronisilla päätepisteillä | Amazon Web Services PlatoBlockchain Data Intelligence. Pystysuuntainen haku. Ai.

Kutsu asynkroninen päätepiste

Päätepisteen kutsumiseksi sinun on asetettava pyyntöhyötykuorma Amazonin yksinkertainen tallennuspalvelu (Amazon S3) ja tarjoa osoittimen tähän hyötykuormaan osana InvokeEndpointAsync pyyntö. Kutsuttaessa SageMaker asettaa käsittelypyynnön jonoon ja palauttaa tunnisteen ja tulosteen vastauksena. Käsittelyn jälkeen SageMaker sijoittaa tuloksen Amazon S3 -sijaintiin. Voit halutessasi vastaanottaa onnistumis- tai virheilmoituksia Amazonin yksinkertainen ilmoituspalvelu (Amazon SNS).

SageMaker Python SDK

Kun käyttöönotto on valmis, se palauttaa an AsyncPredictor esine. Asynkronisen päättelyn suorittamiseksi sinun on ladattava tiedot Amazon S3:een ja käytettävä predict_async() menetelmällä S3 URI:n syötteenä. Se palauttaa an AsyncInferenceResponse objekti, ja voit tarkistaa tuloksen käyttämällä get_response() menetelmällä.

Vaihtoehtoisesti, jos haluat tarkistaa tuloksen säännöllisesti ja palauttaa sen luomisen jälkeen, käytä predict() menetelmä. Käytämme tätä toista menetelmää seuraavassa koodissa:

import time # Invoking the asynchronous endpoint with the SageMaker Python SDK
def query_endpoint(payload): """Query endpoint and print the response""" response = predictor.predict_async( data=payload, input_path="s3://{}/{}".format(bucket, prefix), ) while True: try: response = response.get_result() break except: print("Inference is not ready ...") time.sleep(5) print(f"33[1m Input:33[0m {payload['inputs']}") print(f"33[1m Output:33[0m {response[0]['generated_text']}") query_endpoint(payload)

Boto3

Tutkitaan nyt invoke_endpoint_async menetelmä Boto3:sta sagemaker-runtime asiakas. Sen avulla kehittäjät voivat asynkronisesti kutsua SageMaker-päätepisteen, mikä tarjoaa tunnuksen edistymisen seurantaan ja vastauksen hakemiseen myöhemmin. Boto3 ei tarjoa tapaa odottaa asynkronisen päättelyn valmistumista kuten SageMaker Python SDK:n get_result() operaatio. Siksi hyödynnämme sitä tosiasiaa, että Boto3 tallentaa Amazon S3:n johtopäätöstulosteen response["OutputLocation"]. Voimme käyttää seuraavaa toimintoa odottamaan johtopäätöstiedoston kirjoittamista Amazon S3:een:

import json
import time
import boto3
from botocore.exceptions import ClientError s3_client = boto3.client("s3") # Wait until the prediction is generated
def wait_inference_file(bucket, prefix): while True: try: response = s3_client.get_object(Bucket=bucket, Key=prefix) break except ClientError as ex: if ex.response['Error']['Code'] == 'NoSuchKey': print("Waiting for file to be generated...") time.sleep(5) next else: raise except Exception as e: print(e.__dict__) raise return response

Tällä funktiolla voimme nyt tehdä kyselyn päätepisteestä:

# Invoking the asynchronous endpoint with the Boto3 SDK
import boto3 sagemaker_client = boto3.client("sagemaker-runtime") # Query the endpoint function
def query_endpoint_boto3(payload): """Query endpoint and print the response""" response = sagemaker_client.invoke_endpoint_async( EndpointName=my_model.endpoint_name, InputLocation="s3://{}/{}".format(bucket, prefix), ContentType="application/json", Accept="application/json" ) output_url = response["OutputLocation"] output_prefix = "/".join(output_url.split("/")[3:]) # Read the bytes of the file from S3 in output_url with Boto3 output = wait_inference_file(bucket, output_prefix) output = json.loads(output['Body'].read())[0]['generated_text'] # Emit output print(f"33[1m Input:33[0m {payload['inputs']}") print(f"33[1m Output:33[0m {output}") query_endpoint_boto3(payload)

LangChain

LangChain on avoimen lähdekoodin kehys, jonka Harrison Chase julkaisi lokakuussa 2022. Se yksinkertaistaa suuria kielimalleja (LLM) käyttävien sovellusten kehittämistä tarjoamalla integraatioita eri järjestelmien ja tietolähteiden kanssa. LangChain mahdollistaa dokumenttien analysoinnin, yhteenvedon, chatbotin luomisen, koodianalyysin ja paljon muuta. Se on saavuttanut suosiota satojen kehittäjien panoksilla ja merkittävällä pääomasijoitusyritysten rahoituksella. LangChain mahdollistaa LLM:ien yhdistämisen ulkoisiin lähteisiin, mikä mahdollistaa dynaamisten, tietoihin reagoivien sovellusten luomisen. Se tarjoaa kirjastoja, API:ita ja dokumentaatiota kehitysprosessin virtaviivaistamiseksi.

LangChain tarjoaa kirjastoja ja esimerkkejä SageMaker-päätepisteiden käyttämisestä kehyksessään, mikä helpottaa SageMakerin isännöimien ML-mallien käyttöä ketjun "aivoina". Lisätietoja LangChainin ja SageMakerin integroinnista on kohdassa SageMaker-päätepiste LangChainin dokumentaatiossa.

Yksi LangChainin nykyisen toteutuksen rajoituksista on, että se ei tue asynkronisia päätepisteitä natiivisti. Käyttääksemme asynkronista päätepistettä LangChainille, meidän on määritettävä uusi luokka, SagemakerAsyncEndpoint, joka laajentaa SagemakerEndpoint luokka jo saatavilla LangChainissa. Lisäksi annamme seuraavat tiedot:

  • S3-ämpäri ja etuliite, johon asynkroninen päättely tallentaa tulot (ja lähdöt)
  • Enimmäismäärä sekunteja odottaa ennen aikakatkaisua
  • An updated _call() funktion päätepisteen kyselyyn invoke_endpoint_async() sijasta invoke_endpoint()
  • Tapa herättää asynkroninen päätepiste, jos se on kylmäkäynnistyksessä (pienennetty nollaan)

Tarkastellaksesi juuri luotua SagemakerAsyncEndpoint, voit tarkistaa sagemaker_async_endpoint.py tiedosto saatavilla GitHubissa.

from typing import Dict
from langchain import PromptTemplate
from langchain.llms.sagemaker_endpoint import LLMContentHandler
from langchain.chains import LLMChain
from sagemaker_async_endpoint import SagemakerAsyncEndpoint class ContentHandler(LLMContentHandler): content_type:str = "application/json" accepts:str = "application/json" len_prompt:int = 0 def transform_input(self, prompt: str, model_kwargs: Dict) -> bytes: self.len_prompt = len(prompt) input_str = json.dumps({"inputs": prompt, "parameters": {"max_new_tokens": 100, "do_sample": False, "repetition_penalty": 1.1}}) return input_str.encode('utf-8') def transform_output(self, output: bytes) -> str: response_json = output.read() res = json.loads(response_json) ans = res[0]['generated_text'] return ans chain = LLMChain( llm=SagemakerAsyncEndpoint( input_bucket=bucket, input_prefix=prefix, endpoint_name=my_model.endpoint_name, region_name=sagemaker.Session().boto_region_name, content_handler=ContentHandler(), ), prompt=PromptTemplate( input_variables=["query"], template="{query}", ),
) print(chain.run(payload['inputs']))

Puhdistaa

Kun olet lopettanut päätepisteen päätelmien luomisen testaamisen, muista poistaa päätepiste välttääksesi ylimääräisiä kuluja:

predictor.delete_endpoint()

Yhteenveto

Kun otetaan käyttöön suuria perusmalleja, kuten TII Falcon, kustannusten optimointi on ratkaisevan tärkeää. Nämä mallit vaativat tehokkaan laitteiston ja huomattavan muistikapasiteetin, mikä johtaa korkeisiin infrastruktuurikustannuksiin. SageMakerin asynkroninen päättely, käyttöönottovaihtoehto, joka käsittelee pyynnöt asynkronisesti, vähentää kustannuksia skaalaamalla ilmentymien määrän nollaan, kun odottavia pyyntöjä ei ole. Tässä viestissä osoitimme, kuinka suuria SageMaker JumpStart -perusmalleja otetaan käyttöön SageMakerin asynkronisiin päätepisteisiin. Esitimme koodiesimerkkejä käyttämällä SageMaker Python SDK:ta, Boto3:a ja LangChainia havainnollistamaan erilaisia ​​menetelmiä asynkronisten päätepisteiden kutsumiseen ja tulosten hakemiseen. Nämä tekniikat antavat kehittäjille ja tutkijoille mahdollisuuden optimoida kustannuksia samalla, kun he käyttävät kehittyneiden kielen ymmärtämisjärjestelmien perusmallien ominaisuuksia.

Saat lisätietoja asynkronisesta päättelystä ja SageMaker JumpStartista tutustumalla seuraaviin viesteihin:


Kirjailijasta

Kuva DavidestaDavide Gallitelli on AI/ML:n erikoisratkaisuarkkitehti EMEA-alueella. Hänen kotipaikkansa on Bryssel ja työskentelee tiiviisti asiakkaiden kanssa kaikkialla Benelux-maissa. Hän on ollut kehittäjä pienestä pitäen, aloitti koodaamisen 7-vuotiaana. Hän aloitti tekoälyn/ML:n opiskelun yliopistossa ja on siitä lähtien rakastunut siihen.

Aikaleima:

Lisää aiheesta AWS-koneoppiminen