Amazon SageMakeri asünkroonsete lõpp-punktidega Amazon SageMaker JumpStart vundamendimudelite juurutuskulude optimeerimine | Amazoni veebiteenused

Amazon SageMakeri asünkroonsete lõpp-punktidega Amazon SageMaker JumpStart vundamendimudelite juurutuskulude optimeerimine | Amazoni veebiteenused

Generatiivsete AI-rakenduste edu paljudes tööstusharudes on pälvinud nende ettevõtete tähelepanu ja huvi kogu maailmas, kes soovivad taastoota ja ületada konkurentide saavutusi või lahendada uusi ja põnevaid kasutusjuhtumeid. Need kliendid otsivad alusmudeleid, nagu TII Falcon, Stable Diffusion XL või OpenAI GPT-3.5, kui generatiivse AI innovatsiooni mootoreid.

Vundamendimudelid on generatiivsete AI-mudelite klass, mis on tänu suurele hulgale struktureerimata andmetele, mille kohta neid on koolitatud, mõistma ja genereerima inimlikku sisu. Need mudelid on muutnud revolutsiooni erinevates arvutinägemise (CV) ja loomuliku keele töötlemise (NLP) ülesannetes, sealhulgas piltide genereerimine, tõlkimine ja küsimustele vastamine. Need on paljude tehisintellekti rakenduste ehitusplokkideks ja neist on saanud täiustatud intelligentsete süsteemide väljatöötamise oluline komponent.

Vundamendimudelite kasutuselevõtt võib aga tuua kaasa olulisi väljakutseid, eriti kulude ja ressursinõuete osas. Need mudelid on tuntud oma suuruse poolest, ulatudes sageli sadadest miljonitest kuni miljarditeni. Nende suur suurus nõuab ulatuslikke arvutusressursse, sealhulgas võimsat riistvara ja märkimisväärset mälumahtu. Tegelikult on alusmudelite juurutamiseks tavaliselt vaja vähemalt ühte (sageli rohkem) GPU-d, et arvutuskoormusega tõhusalt toime tulla. Näiteks mudel TII Falcon-40B Instruct nõuab vähemalt ml.g5.12xlarge eksemplari edukaks mällu laadimiseks, kuid toimib kõige paremini suuremate eksemplaridega. Seetõttu võib nende mudelite juurutamise ja hooldamise investeeringutasuvus (ROI) olla ärilise väärtuse tõestamiseks liiga madal, eriti arendustsüklite või suure töökoormuse korral. Selle põhjuseks on jooksvad kulud, mis tulenevad GPU-toega eksemplaride olemasolust pikkade seansside jaoks, potentsiaalselt ööpäevaringselt.

Selle aasta alguses teatasime Amazonase aluspõhi, serverita API, et pääseda juurde Amazoni ja meie generatiivsete AI partnerite alusmudelitele. Kuigi see on praegu privaatses eelvaates, võimaldab selle serverita API teil kasutada Amazoni, Anthropicu, Stability AI ja AI21 alusmudeleid, ilma et peaksite ise lõpp-punkte juurutama. Siiski on avatud lähtekoodiga mudelid sellistest kogukondadest nagu Hugging Face palju kasvanud ja mitte igaüks neist pole Amazon Bedrocki kaudu kättesaadavaks tehtud.

Selles postituses käsitleme neid olukordi ja lahendame suurte kuludega riskimise probleemi, juurutades selleks suuri vundamendimudeleid Amazon SageMaker asünkroonsed lõpp-punktid Alates Amazon SageMaker JumpStart. See võib aidata vähendada arhitektuuri kulusid, võimaldades lõpp-punktil töötada ainult siis, kui päringud on järjekorras ja lühikest kasutusaega, samal ajal vähendades nullini, kui ükski taotlus ei oota teenindamist. See kõlab suurepäraselt paljude kasutusjuhtude jaoks; nullini vähendatud lõpp-punkt toob aga enne järelduste esitamist kasutusele külmkäivitusaja.

Lahenduse ülevaade

Järgmine diagramm illustreerib meie lahenduse arhitektuuri.

Optimize deployment cost of Amazon SageMaker JumpStart foundation models with Amazon SageMaker asynchronous endpoints | Amazon Web Services PlatoBlockchain Data Intelligence. Vertical Search. Ai.

Meie juurutatud arhitektuur on väga lihtne:

  • Kasutajaliides on sülearvuti, mille saab asendada Streamliti või sarnase tehnoloogiaga üles ehitatud veebikasutajaliidesega. Meie puhul on märkmik an Amazon SageMaker Studio sülearvuti, mis töötab ml.m5.large eksemplaris PyTorch 2.0 Python 3.10 protsessori tuumaga.
  • Märkmik küsib lõpp-punkti kolmel viisil: SageMaker Python SDK, AWS SDK Pythoni jaoks (Boto3) ja LangChain.
  • Lõpp-punkt töötab SageMakeris asünkroonselt ja lõpp-punktis juurutame mudeli Falcon-40B Instruct. Praegu on see juhiste mudelite osas nüüdisaegne ja saadaval SageMaker JumpStartis. Üks API-kutse võimaldab meil mudelit lõpp-punktis juurutada.

Mis on SageMakeri asünkroonne järeldus

SageMakeri asünkroonne järeldus on üks neljast SageMakeri juurutusvalikust koos reaalajas lõpp-punktide, partii järelduste ja serverita järeldustega. Erinevate juurutusvalikute kohta lisateabe saamiseks vaadake Juurutage järelduste tegemiseks mudeleid.

SageMakeri asünkroonsed järeldused seab sissetulevad päringud järjekorda ja töötleb neid asünkroonselt, muutes selle valiku ideaalseks suurte, kuni 1 GB kasuliku koormuse, pikkade töötlemisaegade ja peaaegu reaalajas latentsusnõuetega päringute jaoks. Peamine eelis, mida see pakub suurte vundamendimudelitega tegelemisel, eriti kontseptsiooni tõestamise (POC) või arenduse ajal, on aga võimalus konfigureerida asünkroonset järeldust, et skaleerida eksemplaride arvu nullini, kui pole päringuid protsessi, säästes sellega kulusid. Lisateavet SageMakeri asünkroonse järelduse kohta leiate aadressilt Asünkroonne järeldus. Järgmine diagramm illustreerib seda arhitektuuri.

Optimize deployment cost of Amazon SageMaker JumpStart foundation models with Amazon SageMaker asynchronous endpoints | Amazon Web Services PlatoBlockchain Data Intelligence. Vertical Search. Ai.

Asünkroonse järelduse lõpp-punkti juurutamiseks peate looma AsyncInferenceConfig objektiks. Kui loote AsyncInferenceConfig argumente täpsustamata, vaikimisi 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}.

Mis on SageMaker JumpStart

Meie mudel pärineb SageMaker JumpStartist, mis on SageMakeri funktsioon, mis kiirendab masinõppe (ML) teekonda, pakkudes eelkoolitatud mudeleid, lahendusmalle ja näidismärkmikke. See pakub juurdepääsu laiale valikule eelkoolitatud mudelitele erinevate probleemitüüpide jaoks, võimaldades teil alustada oma ML-i ülesandeid tugeva alusega. SageMaker JumpStart pakub ka lahendusmalle tavaliste kasutusjuhtude jaoks ja näidismärkmikke õppimiseks. SageMaker JumpStart võimaldab teil vähendada oma ML-projektide käivitamiseks kuluvat aega ja vaeva ühe klõpsuga lahenduste käivitamise ja ulatuslike ressurssidega praktiliste ML-kogemuste saamiseks.

Järgmisel ekraanipildil on näide vaid mõnest SageMaker JumpStart kasutajaliideses saadaolevast mudelist.

Optimize deployment cost of Amazon SageMaker JumpStart foundation models with Amazon SageMaker asynchronous endpoints | Amazon Web Services PlatoBlockchain Data Intelligence. Vertical Search. Ai.

Mudeli juurutamine

Meie esimene samm on mudeli juurutamine SageMakeris. Selleks saame kasutada kasutajaliidest SageMaker JumpStart või SageMaker Python SDK, mis pakub API-d, mida saame kasutada mudeli asünkroonsesse lõpp-punkti juurutamiseks:

%%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()
)

Selle kõne lõpetamiseks võib kuluda umbes 10 minutit. Selle aja jooksul keeratakse lõpp-punkt üles, konteiner koos mudeliartefaktidega laaditakse lõpp-punkti alla, mudeli konfiguratsioon laaditakse SageMakeri JumpStartist, seejärel avalikustatakse asünkroonne lõpp-punkt DNS-i lõpp-punkti kaudu. Veendumaks, et meie lõpp-punkti saab skaleerida nullini, peame rakenduse automaatse skaleerimise abil konfigureerima asünkroonses lõpp-punktis automaatse skaleerimise. Peate esmalt registreerima oma lõpp-punkti variandi rakenduse automaatse skaleerimisega, määratlema skaleerimispoliitika ja seejärel rakendama skaleerimispoliitika. Selles konfiguratsioonis kasutame kohandatud mõõdikut kasutades CustomizedMetricSpecificationEhk ApproximateBacklogSizePerInstance, nagu on näidatud järgmises koodis. Üksikasjaliku loendi jaoks Amazon CloudWatch teie asünkroonse järelduse lõpp-punktiga saadaolevaid mõõdikuid, vaadake Jälgimine CloudWatchiga.

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. },
)

Saate kontrollida, kas see reegel on edukalt seadistatud, navigeerides SageMakeri konsooli ja valides Lõpp-punktid all Järeldus navigeerimispaanil ja otsides äsja juurutatud lõpp-punkti.

Optimize deployment cost of Amazon SageMaker JumpStart foundation models with Amazon SageMaker asynchronous endpoints | Amazon Web Services PlatoBlockchain Data Intelligence. Vertical Search. Ai.

Kutsuge asünkroonne lõpp-punkt

Lõpp-punkti käivitamiseks peate sisestama päringu kasuliku koormuse Amazoni lihtne salvestusteenus (Amazon S3) ja osutage sellele kasulikule koormusele osana InvokeEndpointAsync nõuda. Väljakutsumise korral seab SageMaker taotluse töötlemiseks järjekorda ning tagastab vastusena identifikaatori ja väljundi asukoha. Töötlemisel asetab SageMaker tulemuse Amazon S3 asukohta. Saate valikuliselt valida, kas saada edu- või veateatisi Amazoni lihtne teavitusteenus (Amazon SNS).

SageMaker Python SDK

Pärast juurutamise lõpetamist tagastab see an AsyncPredictor objektiks. Asünkroonse järelduse tegemiseks peate andmed Amazon S3 üles laadima ja kasutama predict_async() meetod, mille sisendiks on S3 URI. See tagastab an AsyncInferenceResponse objekti ja saate tulemust kontrollida kasutades get_response() meetod.

Teise võimalusena, kui soovite tulemust perioodiliselt kontrollida ja genereerimisel tagastada, kasutage predict() meetod. Kasutame seda teist meetodit järgmises koodis:

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

Uurime nüüd invoke_endpoint_async meetod Boto3'st sagemaker-runtime klient. See võimaldab arendajatel asünkroonselt kutsuda SageMakeri lõpp-punkti, pakkudes märgi edenemise jälgimiseks ja vastuse hilisemaks otsimiseks. Boto3 ei paku võimalust oodata asünkroonse järelduse lõpuleviimist nagu SageMaker Pythoni SDK get_result() operatsiooni. Seetõttu kasutame ära asjaolu, et Boto3 salvestab Amazon S3 järeldusväljundi response["OutputLocation"]. Järeldusfaili Amazon S3-sse kirjutamise ootamiseks saame kasutada järgmist funktsiooni:

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

Selle funktsiooni abil saame nüüd lõpp-punkti päringu teha:

# 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 avatud lähtekoodiga raamistik, mille 2022. aasta oktoobris käivitas Harrison Chase. See lihtsustab suurte keelemudelite (LLM) kasutavate rakenduste arendamist, pakkudes integratsioone erinevate süsteemide ja andmeallikatega. LangChain võimaldab dokumentide analüüsi, kokkuvõtete tegemist, vestlusrobotite loomist, koodianalüüsi ja palju muud. See on populaarsust kogunud sadade arendajate panuse ja riskifirmade märkimisväärse rahastamisega. LangChain võimaldab ühendada LLM-e väliste allikatega, võimaldades luua dünaamilisi andmetundlikke rakendusi. See pakub arendusprotsessi sujuvamaks muutmiseks teeke, API-sid ja dokumentatsiooni.

LangChain pakub raamatukogusid ja näiteid SageMakeri lõpp-punktide kasutamiseks oma raamistikuga, muutes SageMakeris hostitud ML-mudelite kasutamise ahela "ajuna" lihtsamaks. Lisateavet selle kohta, kuidas LangChain SageMakeriga integreerub, vaadake jaotisest SageMakeri lõpp-punkt LangChaini dokumentatsioonis.

LangChaini praeguse juurutamise üks piiranguid on see, et see ei toeta natiivselt asünkroonseid lõpp-punkte. LangChaini asünkroonse lõpp-punkti kasutamiseks peame määratlema uue klassi, SagemakerAsyncEndpoint, mis pikendab SagemakerEndpoint klass juba saadaval LangChainis. Lisaks pakume järgmist teavet:

  • S3 ämber ja eesliide, kuhu asünkroonne järeldus salvestab sisendid (ja väljundid)
  • Maksimaalne arv sekundeid oodata enne ajalõppu
  • An updated _call() funktsioon lõpp-punkti päringu tegemiseks invoke_endpoint_async() asemel invoke_endpoint()
  • Viis asünkroonse lõpp-punkti äratamiseks, kui see on külmkäivitusel (mahandatud nullini)

Vastloodud ülevaatamiseks SagemakerAsyncEndpoint, saate vaadata sagemaker_async_endpoint.py fail saadaval GitHubil.

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

Koristage

Kui olete lõpp-punktist järelduste genereerimise testimise lõpetanud, ärge unustage lõpp-punkti kustutada, et vältida lisatasusid.

predictor.delete_endpoint()

Järeldus

Suurte vundamendimudelite (nt TII Falcon) juurutamisel on kulude optimeerimine ülioluline. Need mudelid nõuavad võimsat riistvara ja suurt mälumahtu, mis põhjustab suuri infrastruktuurikulusid. SageMakeri asünkroonne järeldus, juurutusvalik, mis töötleb taotlusi asünkroonselt, vähendab kulusid, skaleerides eksemplaride arvu nullini, kui ootel taotlusi pole. Selles postituses demonstreerisime, kuidas juurutada suuri SageMakeri JumpStart vundamendimudeleid SageMakeri asünkroonsetesse lõpp-punktidesse. Esitasime koodinäiteid, kasutades SageMaker Python SDK, Boto3 ja LangChaini, et illustreerida erinevaid meetodeid asünkroonsete lõpp-punktide kutsumiseks ja tulemuste toomiseks. Need tehnikad võimaldavad arendajatel ja teadlastel kulusid optimeerida, kasutades samal ajal täiustatud keelemõistmissüsteemide alusmudelite võimalusi.

Asünkroonse järelduse ja SageMaker JumpStarti kohta lisateabe saamiseks vaadake järgmisi postitusi:


Andmeid autor

Pilt Davide'istDavide Gallitelli on tehisintellekti/ML-i spetsialiseerunud lahenduste arhitekt EMEA piirkonnas. Ta asub Brüsselis ja teeb tihedat koostööd klientidega üle kogu Beneluxi. Ta on olnud arendaja juba väga noorest peale, alustades kodeerimisega 7-aastaselt. Ta alustas AI/ML-i õppimist ülikoolis ja on sellest ajast peale sellesse armunud.

Ajatempel:

Veel alates AWS-i masinõpe