Kør flere generative AI-modeller på GPU ved hjælp af Amazon SageMaker multi-model slutpunkter med TorchServe og spar op til 75 % i slutningsomkostninger | Amazon Web Services

Kildeknude: 2866306

Multi-model endpoints (MME'er) er et stærkt træk ved Amazon SageMaker designet til at forenkle implementeringen og driften af ​​maskinlæringsmodeller (ML). Med MME'er kan du hoste flere modeller på en enkelt serveringscontainer og hoste alle modellerne bag et enkelt slutpunkt. SageMaker-platformen styrer automatisk lastning og losning af modeller og skalerer ressourcer baseret på trafikmønstre, hvilket reducerer den operationelle byrde ved at administrere en stor mængde modeller. Denne funktion er især gavnlig for deep learning og generative AI-modeller, der kræver accelereret beregning. Omkostningsbesparelserne opnået gennem ressourcedeling og forenklet modelstyring gør SageMaker MME'er til et glimrende valg for dig til at hoste modeller i stor skala på AWS.

For nylig har generative AI-applikationer fanget udbredt opmærksomhed og fantasi. Kunder ønsker at implementere generative AI-modeller på GPU'er, men er samtidig bevidste om omkostningerne. SageMaker MME'er understøtter GPU-instanser og er en fantastisk mulighed for disse typer applikationer. I dag er vi glade for at kunne annoncere TorchServe-support til SageMaker MME'er. Denne nye modelserverunderstøttelse giver dig fordelen ved alle fordelene ved MME'er, mens du stadig bruger serveringsstakken, som TorchServe-kunder er mest bekendt med. I dette indlæg demonstrerer vi, hvordan man hoster generative AI-modeller, såsom Stable Diffusion og Segment Anything Model, på SageMaker MME'er ved hjælp af TorchServe og bygger en sprogstyret redigeringsløsning, der kan hjælpe kunstnere og indholdsskabere med at udvikle og iterere deres kunstværker hurtigere.

Løsningsoversigt

Sprogstyret redigering er en almindelig generativ AI-brug på tværs af brancher. Det kan hjælpe kunstnere og indholdsskabere med at arbejde mere effektivt for at imødekomme efterspørgsel efter indhold ved at automatisere gentagne opgaver, optimere kampagner og give slutkunden en hyperpersonlig oplevelse. Virksomheder kan drage fordel af øget indholdsoutput, omkostningsbesparelser, forbedret personalisering og forbedret kundeoplevelse. I dette indlæg demonstrerer vi, hvordan du kan bygge sprogassisterede redigeringsfunktioner ved hjælp af MME TorchServe, der giver dig mulighed for at slette ethvert uønsket objekt fra et billede og ændre eller erstatte ethvert objekt i et billede ved at levere en tekstinstruktion.

Brugeroplevelsesflowet for hver use case er som følger:

  • For at fjerne et uønsket objekt skal du vælge objektet fra billedet for at fremhæve det. Denne handling sender pixelkoordinaterne og det originale billede til en generativ AI-model, som genererer en segmenteringsmaske for objektet. Når du har bekræftet det korrekte objektvalg, kan du sende original- og maskebillederne til en anden model til fjernelse. Den detaljerede illustration af dette brugerflow er vist nedenfor.
ML-14465-hunde-klik

Trin 1: Vælg et objekt ("hund") fra billedet

Trin 2: Bekræft, at det korrekte objekt er fremhævet

Trin 3: Slet objektet fra billedet

  • For at ændre eller erstatte et objekt skal du vælge og markere det ønskede objekt ved at følge samme proces som beskrevet ovenfor. Når du har bekræftet det korrekte objektvalg, kan du ændre objektet ved at levere det originale billede, masken og en tekstprompt. Modellen vil derefter ændre det fremhævede objekt baseret på de medfølgende instruktioner. En detaljeret illustration af dette andet brugerflow er som følger.

Trin 1: Vælg et objekt ("vase") fra billedet

Trin 2: Bekræft, at det korrekte objekt er fremhævet

Trin 3: Giv en tekstprompt ("futuristisk vase") for at ændre objektet

Til at drive denne løsning bruger vi tre generative AI-modeller: Segment Anything Model (SAM), Large Mask Inpainting Model (LaMa) og Stable Diffusion Inpaint (SD). Her er, hvordan disse modeller er blevet brugt i workflowet for brugeroplevelse:

For at fjerne et uønsket objekt For at ændre eller erstatte et objekt
  1. Segment Anything Model (SAM) bruges til at generere en segmentmaske for objektet af interesse. SAM er udviklet af Meta Research og er en open source-model, der kan segmentere ethvert objekt i et billede. Denne model er blevet trænet på et massivt datasæt kendt som SA-1B, som omfatter over 11 millioner billeder og 1.1 milliarder segmenteringsmasker. For mere information om SAM, se deres hjemmeside , forskningsartikel.
  2. LaMa bruges til at fjerne eventuelle uønskede objekter fra et billede. LaMa er en Generative Adversarial Network (GAN) model, der er specialiseret i at udfylde manglende dele af billeder ved hjælp af uregelmæssige masker. Modelarkitekturen inkorporerer billeddækkende global kontekst og en enkelttrinsarkitektur, der bruger Fourier-foldninger, hvilket gør det muligt at opnå avancerede resultater med en hurtigere hastighed. For flere detaljer om LaMa, besøg deres hjemmeside , forskningsartikel.
  3. SD 2 inpaint model fra Stability AI bruges til at ændre eller erstatte objekter i et billede. Denne model giver os mulighed for at redigere objektet i maskeområdet ved at give en tekstprompt. Inpaint-modellen er baseret på tekst-til-billede SD-modellen, som kan skabe billeder i høj kvalitet med en simpel tekstprompt. Det giver yderligere argumenter såsom originale og maskebilleder, hvilket giver mulighed for hurtig ændring og gendannelse af eksisterende indhold. For at lære mere om stabile diffusionsmodeller på AWS, se Skab billeder i høj kvalitet med stabile diffusionsmodeller, og implementer dem omkostningseffektivt med Amazon SageMaker.

Alle tre modeller er hostet på SageMaker MME'er, hvilket reducerer den operationelle byrde fra at administrere flere endpoints. Derudover eliminerer brugen af ​​MME bekymringer om, at visse modeller bliver underudnyttet, fordi ressourcerne deles. Du kan se fordelene ved forbedret instansmætning, som i sidste ende fører til omkostningsbesparelser. Det følgende arkitekturdiagram illustrerer, hvordan alle tre modeller betjenes ved hjælp af SageMaker MME'er med TorchServe.

Vi har udgivet koden til at implementere denne løsningsarkitektur i vores GitHub repository. For at følge med i resten af ​​indlægget, brug notesbogsfilen. Det anbefales at køre dette eksempel på en SageMaker notebook-instans ved hjælp af conda_python3 (Python 3.10.10) kerne.

Forlæng TorchServe-beholderen

Det første trin er at forberede modellens hostingcontainer. SageMaker leverer en administreret PyTorch Deep Learning Container (DLC), som du kan hente ved hjælp af følgende kodestykke:

# Use SageMaker PyTorch DLC as base image
baseimage = sagemaker.image_uris.retrieve( framework="pytorch", region=region, py_version="py310", image_scope="inference", version="2.0.0", instance_type="ml.g5.2xlarge",
)
print(baseimage)

Fordi modellerne kræver ressourcer og yderligere pakker, der ikke er på basis PyTorch DLC, skal du bygge et Docker-image. Dette billede uploades derefter til Amazon Elastic Container Registry (Amazon ECR), så vi kan få adgang direkte fra SageMaker. De brugerdefinerede installerede biblioteker er angivet i Docker-filen:

ARG BASE_IMAGE FROM $BASE_IMAGE #Install any additional libraries
RUN pip install segment-anything-py==1.0
RUN pip install opencv-python-headless==4.7.0.68
RUN pip install matplotlib==3.6.3
RUN pip install diffusers
RUN pip install tqdm
RUN pip install easydict
RUN pip install scikit-image
RUN pip install xformers
RUN pip install tensorflow
RUN pip install joblib
RUN pip install matplotlib
RUN pip install albumentations==0.5.2
RUN pip install hydra-core==1.1.0
RUN pip install pytorch-lightning
RUN pip install tabulate
RUN pip install kornia==0.5.0
RUN pip install webdataset
RUN pip install omegaconf==2.1.2
RUN pip install transformers==4.28.1
RUN pip install accelerate
RUN pip install ftfy

Kør shell-kommandofilen for at bygge det brugerdefinerede billede lokalt og skub det til Amazon ECR:

%%capture build_output reponame = "torchserve-mme-demo"
versiontag = "genai-0.1" # Build our own docker image
!cd workspace/docker && ./build_and_push.sh {reponame} {versiontag} {baseimage} {region} {account}

Forbered modellens artefakter

Den største forskel for de nye MME'er med TorchServe-understøttelse er, hvordan du forbereder dine modelartefakter. Kode-repoen giver en skeletmappe for hver model (modelmappe) til at rumme de nødvendige filer til TorchServe. Vi følger den samme fire-trins proces for at forberede hver model .tar fil. Følgende kode er et eksempel på skeletmappen til SD-modellen:

workspace
|--sd |-- custom_handler.py |-- model-config.yaml

Det første trin er at downloade de forudtrænede modelkontrolpunkter i modelmappen:

import diffusers
import torch
import transformers pipeline = diffusers.StableDiffusionInpaintPipeline.from_pretrained( "stabilityai/stable-diffusion-2-inpainting", torch_dtype=torch.float16
) sd_dir = "workspace/sd/model"
pipeline.save_pretrained(sd_dir)

Det næste trin er at definere en custom_handler.py fil. Dette er nødvendigt for at definere modellens adfærd, når den modtager en anmodning, såsom indlæsning af modellen, forbehandling af input og efterbehandling af output. Det handle metoden er hovedindgangspunktet for anmodninger, og den accepterer et anmodningsobjekt og returnerer et svarobjekt. Den indlæser de forudtrænede modelkontrolpunkter og anvender preprocess , postprocess metoder til input og output data. Følgende kodestykke illustrerer en simpel struktur af custom_handler.py fil. For flere detaljer henvises til TorchServe handler API.

def initialize(self, ctx: Context): def preprocess(self, data): def inference(self, data): def handle(self, data, context): requests = self.preprocess(data) responses = self.inference(requests) return responses

Den sidste nødvendige fil til TorchServe er model-config.yaml. Filen definerer konfigurationen af ​​modelserveren, såsom antal arbejdere og batchstørrelse. Konfigurationen er på et niveau pr. model, og et eksempel på en konfigurationsfil er vist i følgende kode. For en komplet liste over parametre henvises til GitHub repo.

minWorkers: 1
maxWorkers: 1
batchSize: 1
maxBatchDelay: 200
responseTimeout: 300

Det sidste trin er at pakke alle modelartefakter i en enkelt .tar.gz-fil ved hjælp af torch-model-archiver modul:

!torch-model-archiver --model-name sd --version 1.0 --handler workspace/sd/custom_handler.py --extra-files workspace/sd/model --config-file workspace/sam/model-config.yaml --archive-format no-archive!cd sd && tar cvzf sd.tar.gz .

Opret multi-model slutpunktet

Trinene til at oprette en SageMaker MME er de samme som før. I dette særlige eksempel opretter du et slutpunkt ved hjælp af SageMaker SDK. Start med at definere en Amazon Simple Storage Service (Amazon S3) placering og hostingcontaineren. Denne S3-placering er, hvor SageMaker dynamisk indlæser modellerne baseret på invokationsmønstre. Hostingcontaineren er den brugerdefinerede container, du byggede og skubbede til Amazon ECR i det tidligere trin. Se følgende kode:

# This is where our MME will read models from on S3.
multi_model_s3uri = output_path

Så vil du definere en MulitDataModel der fanger alle attributter som modelplacering, hostingbeholder og tilladelsesadgang:

print(multi_model_s3uri)
model = Model( model_data=f"{multi_model_s3uri}/sam.tar.gz", image_uri=container, role=role, sagemaker_session=smsess, env={"TF_ENABLE_ONEDNN_OPTS": "0"},
) mme = MultiDataModel( name="torchserve-mme-genai-" + datetime.now().strftime("%Y-%m-%d-%H-%M-%S"), model_data_prefix=multi_model_s3uri, model=model, sagemaker_session=smsess,
)
print(mme)

deploy() funktion opretter en slutpunktskonfiguration og hoster slutpunktet:

mme.deploy( initial_instance_count=1, instance_type="ml.g5.2xlarge", serializer=sagemaker.serializers.JSONSerializer(), deserializer=sagemaker.deserializers.JSONDeserializer(),
)

I eksemplet, vi gav, viser vi også, hvordan du kan liste modeller og dynamisk tilføje nye modeller ved hjælp af SDK. Det add_model() funktion kopierer din lokale model .tar filer til MME S3-placeringen:

# Only sam.tar.gz visible!
list(mme.list_models()) models = ["sd/sd.tar.gz", "lama/lama.tar.gz"]
for model in models: mme.add_model(model_data_source=model)

Påkald modellerne

Nu hvor vi har alle tre modeller hostet på en MME, kan vi påberåbe hver model i rækkefølge for at bygge vores sprogassisterede redigeringsfunktioner. For at kalde hver model skal du angive en target_model parameter i predictor.predict() fungere. Modelnavnet er blot navnet på modellen .tar fil, vi har uploadet. Følgende er et eksempel på et kodestykke til SAM-modellen, der tager en pixelkoordinat, en punktetiket og dilateret kernestørrelse ind og genererer en segmenteringsmaske af objektet på pixelplaceringen:

img_file = "workspace/test_data/sample1.png"
img_bytes = None with Image.open(img_file) as f: img_bytes = encode_image(f) gen_args = json.dumps(dict(point_coords=[750, 500], point_labels=1, dilate_kernel_size=15)) payload = json.dumps({"image": img_bytes, "gen_args": gen_args}).encode("utf-8") response = predictor.predict(data=payload, target_model="/sam.tar.gz")
encoded_masks_string = json.loads(response.decode("utf-8"))["generated_image"]
base64_bytes_masks = base64.b64decode(encoded_masks_string) with Image.open(io.BytesIO(base64_bytes_masks)) as f: generated_image_rgb = f.convert("RGB") generated_image_rgb.show()

For at fjerne et uønsket objekt fra et billede, tag segmenteringsmasken, der er genereret fra SAM, og indfør den i LaMa-modellen med det originale billede. De følgende billeder viser et eksempel.

Prøve billede

Segmenteringsmaske fra SAM

Slet hunden ved hjælp af LaMa

For at ændre eller erstatte ethvert objekt i et billede med en tekstprompt, tag segmenteringsmasken fra SAM og indfør den i SD-modellen med det originale billede og tekstprompt, som vist i følgende eksempel.

Prøve billede

Segmenteringsmaske fra SAM

Udskift ved brug af SD-model med tekstprompt

"en hamster på en bænk"

Omkostningsbesparelser

Fordelene ved SageMaker MME'er øges baseret på omfanget af modelkonsolidering. Følgende tabel viser GPU-hukommelsesbrugen for de tre modeller i dette indlæg. De er indsat på én g5.2xlarge instans ved at bruge én SageMaker MME.

Model GPU-hukommelse (MiB)
Segmentér hvad som helst model 3,362
Stabil diffusion i maling 3,910
Lama 852

Du kan se omkostningsbesparelser, når du hoster de tre modeller med ét slutpunkt, og for brugssager med hundredvis eller tusindvis af modeller er besparelserne meget større.

Overvej for eksempel 100 stabile diffusionsmodeller. Hver af modellerne kunne for sig selv betjenes af en ml.g5.2xlarge endepunkt (4 GiB hukommelse), koster 1.52 USD pr. instanstime i den østlige region i USA (N. Virginia). At levere alle 100 modeller ved hjælp af deres eget endepunkt ville koste $218,880 om måneden. Med en SageMaker MME, et enkelt slutpunkt ved hjælp af ml.g5.2xlarge instanser kan være vært for fire modeller samtidigt. Dette reducerer produktionsomkostningerne med 75 % til kun $54,720 pr. måned. Følgende tabel opsummerer forskellene mellem enkelt-model- og multi-model-endepunkter for dette eksempel. Givet en slutpunktskonfiguration med tilstrækkelig hukommelse til dine målmodeller, vil steady state invocation latens, efter at alle modeller er blevet indlæst, svare til den for et enkelt-model slutpunkt.

. Enkeltmodel slutpunkt Multi-model slutpunkt
Samlet slutpunktspris pr. måned $218,880 $54,720
Endpoint-forekomsttype ml.g5.2xlarge ml.g5.2xlarge
CPU-hukommelseskapacitet (GiB) 32 32
GPU-hukommelseskapacitet (GiB) 24 24
Slutpunktspris pr. time $1.52 $1.52
Antal forekomster pr. slutpunkt 2 2
Endpoints nødvendige for 100 modeller 100 25

Ryd op

Når du er færdig, skal du følge instruktionerne i oprydningssektionen af ​​notesbogen for at slette de ressourcer, der er tilvejebragt i dette indlæg for at undgå unødvendige gebyrer. Henvise til Amazon SageMaker-priser for detaljer om omkostningerne ved slutningstilfældene.

Konklusion

Dette indlæg demonstrerer de sprogassisterede redigeringsmuligheder, der er muliggjort gennem brugen af ​​generative AI-modeller hostet på SageMaker MME'er med TorchServe. Eksemplet, vi delte, illustrerer, hvordan vi kan bruge ressourcedeling og forenklet modelstyring med SageMaker MME'er, mens vi stadig bruger TorchServe som vores modelserveringstak. Vi brugte tre grundlæggende modeller for dyb læring: SAM, SD 2 Inpainting og LaMa. Disse modeller gør det muligt for os at opbygge kraftfulde funktioner, såsom at slette ethvert uønsket objekt fra et billede og ændre eller erstatte ethvert objekt i et billede ved at levere en tekstinstruktion. Disse funktioner kan hjælpe kunstnere og indholdsskabere med at arbejde mere effektivt og opfylde deres indholdskrav ved at automatisere gentagne opgaver, optimere kampagner og give en hyperpersonlig oplevelse. Vi inviterer dig til at udforske eksemplet i dette indlæg og opbygge din egen UI-oplevelse ved at bruge TorchServe på en SageMaker MME.

For at komme i gang, se Understøttede algoritmer, rammer og instanser til multi-model slutpunkter ved hjælp af GPU-understøttede instanser.


Om forfatterne

James Wu er Senior AI/ML Specialist Solution Architect hos AWS. hjælpe kunder med at designe og bygge AI/ML-løsninger. James' arbejde dækker en bred vifte af ML use cases med en primær interesse i computervision, deep learning og skalering af ML på tværs af virksomheden. Inden han kom til AWS, var James arkitekt, udvikler og teknologileder i over 10 år, herunder 6 år inden for ingeniørvidenskab og 4 år i marketing- og reklamebranchen.

Li NingLi Ning er senior softwareingeniør hos AWS med speciale i at bygge store AI-løsninger. Som tech lead for TorchServe, et projekt udviklet i fællesskab af AWS og Meta, ligger hendes passion i at udnytte PyTorch og AWS SageMaker til at hjælpe kunder med at omfavne AI til det bedste. Ud over sine professionelle bestræbelser nyder Li at svømme, rejse, følge de seneste fremskridt inden for teknologi og tilbringe kvalitetstid med sin familie.

Ankith GunapalAnkith Gunapal er AI Partner Engineer hos Meta (PyTorch). Han brænder for modeloptimering og modelservering, med erfaring lige fra RTL-verifikation, indlejret software, computervision til PyTorch. Han har en Master i Data Science og en Master i Telekommunikation. Uden for arbejdet er Ankith også producer af elektronisk dansemusik.

Saurabh Trikande er Senior Product Manager for Amazon SageMaker Inference. Han brænder for at arbejde med kunder og er motiveret af målet om at demokratisere machine learning. Han fokuserer på kerneudfordringer relateret til implementering af komplekse ML-applikationer, multi-tenant ML-modeller, omkostningsoptimeringer og at gøre implementering af deep learning-modeller mere tilgængelig. I sin fritid nyder Saurabh at vandre, lære om innovative teknologier, følge TechCrunch og tilbringe tid med sin familie.

Subhash TalluriSubhash Talluri er en Lead AI/ML-løsningsarkitekt for Telecom Industrys forretningsenhed hos Amazon Web Services. Han har ledet udviklingen af ​​innovative AI/ML-løsninger til Telecom-kunder og partnere verden over. Han bringer tværfaglig ekspertise inden for teknik og datalogi til at hjælpe med at bygge skalerbare, sikre og kompatible AI/ML-løsninger via cloud-optimerede arkitekturer på AWS.

Tidsstempel:

Mere fra AWS maskinindlæring