Distribuera Falcon-40B med stora modellinferens-DLC:er på Amazon SageMaker | Amazon webbtjänster

Distribuera Falcon-40B med stora modellinferens-DLC:er på Amazon SageMaker | Amazon webbtjänster

Förra veckan, Technology Innovation Institute (TII) lanserades TII Falcon LLM, en öppen källkodsmodell för stora språk (LLM). Tränade på 1 biljon polletter med Amazon SageMaker, Falcon ståtar med förstklassig prestanda (#1 på Kramar Face leaderboard i skrivande stund) samtidigt som den är relativt lätt och billigare att vara värd för än andra LLM:er som llama-65B. I det här inlägget visar vi hur man distribuerar Falcon för applikationer som språkförståelse och automatiserad skrivhjälp med hjälp av stora modellinferensbehållare för djupinlärning på SageMaker.

Falken har landat på SageMaker

TII är den tillämpade forskningsorganisationen inom Abu Dhabis Forskningsrådet för avancerad teknik; dess team av forskare, forskare och ingenjörer är dedikerade till upptäckten av transformativ teknologi och utveckling av vetenskapliga genombrott som kommer att framtidssäkra vårt samhälle. Tidigare i år satte TII sig för att utbilda en toppmodern LLM med öppen källkod och använde SageMakers infrastruktur, verktyg och expertis för att få jobbet gjort (för att lära dig mer om hur denna modell tränades på SageMaker , hänvisa till Technology Innovation Institute tränar den toppmoderna Falcon LLM 40B-grundmodellen på Amazon SageMaker). Resultatet av denna ansträngning är TII Falcon LLM.

Falcon är tränad på 1 biljon tokens och stoltserar med förstklassig prestanda mot Eleuther AI Språkmodell Utvärdering Sele och är för närvarande #1 på Kramar Face leaderboard för noggrannhet. Modellen finns i två olika storlekar – Falcon-40B och Falcon-7B – och kan användas för toppmodern prestanda i applikationer som språkförståelse, samtalsupplevelser och automatiserad skrivhjälp. Det här inlägget hjälper dig att komma igång med att distribuera Falcon på SageMaker för högnoggrannhet i dessa typer av domäner.

SageMaker stora modellinferens-DLC:er förenklar LLM-värd

Att vara värd för LLM:er som Falcon-40B och Falcon-7B kan vara utmanande. Större modeller är ofta mer exakta eftersom de inkluderar miljarder parametrar, men deras storlek kan också resultera i långsammare slutledningslatens eller sämre genomströmning. Att vara värd för en LLM kan kräva mer GPU-minne och optimerade kärnor för att uppnå acceptabel prestanda. För att ytterligare komplicera saker, även om mindre modeller som Falcon-7B i allmänhet kan passa på en enda GPU som en NVIDIA A10G-instans som driver AWS G5-instanstyper, kan större modeller som Falcon-40B inte det. När detta händer måste strategier som tensorparallellism användas för att skära den större modellen i flera delar och dra fördel av minnet hos flera GPU:er. Äldre värdlösningar som används för mindre modeller erbjuder vanligtvis inte den här typen av funktionalitet, vilket ökar svårigheten.

SageMaker stora modellinferens (LMI) djupinlärningsbehållare (DLC) kan hjälpa. LMI DLC:er är en komplett end-to-end-lösning för att vara värd för LLM:er som Falcon-40B. I gränssnittet inkluderar de en högpresterande modellserver (DJL Serving) designad för stora modellinferenser med funktioner som tokenstreaming och automatisk modellreplikering inom en instans för att öka genomströmningen. På baksidan inkluderar LMI DLC:er också flera högpresterande modellparallella motorer, såsom DeepSpeed ​​och FasterTransformer, som kan skära och hantera modellparametrar över flera GPU:er. Dessa motorer inkluderar också optimerade kärnor för populära transformatormodeller, som kan accelerera slutledningar med upp till tre gånger snabbare. Med LMI DLC:er behöver du helt enkelt skapa en konfigurationsfil för att komma igång med LLM-hosting på SageMaker. För att lära dig mer om SageMaker LMI DLC:er, se Modellparallellism och stor modellinferens och vårt lista över tillgängliga bilder. Du kan också kolla in vårt tidigare inlägg om hosting Bloom-175B på SageMaker använder LMI DLCs.

Lösningsöversikt

Det här inlägget går igenom hur du är värd för Falcon-40B med DeepSpeed ​​på SageMaker med LMI DLC:er. Falcon-40B kräver att vi använder flera A10 GPU, medan Falcon-7B bara kräver en enda GPU. Vi har också förberett exempel som du kan referera till som värd för Falcon-40B och Falcon-7B med både DeepSpeed ​​och Accelerate. Du kan hitta våra kodexempel på GitHub.

Det här exemplet kan köras i SageMaker anteckningsbok-instanser eller Amazon SageMaker Studio anteckningsböcker. För att vara värd för Falcon-40B med LMI och DeepSpeed ​​måste vi använda en ml.g5.24xlarge-instans. Dessa instanser ger 4x NVIDIA A10G GPU, som var och en stöder 96 GiB GPU-minne. Dessutom tillhandahåller värden 96 vCPU:er och 384 GiB värdminne. LMI-behållaren kommer att hjälpa till att hantera mycket av de odifferentierade tunga lyften som är förknippade med att vara värd för LLM, inklusive nedladdning av modellen och partitionering av modellartefakten så att dess parametrar kan spridas över flera GPU:er.

Kvoter för SageMaker machine learning (ML)-instanser kan variera mellan konton. Om du får ett felmeddelande som indikerar att du har överskridit din kvot för g5.24xlarge-instanser när du följer det här inlägget, kan du öka gränsen genom Service Quotas-konsol.

Anteckningsbok genomgång

Till att börja med börjar vi med att installera och importera nödvändiga beroenden för vårt exempel. Vi använder Boto3 SDK såväl som SageMaker SDK. Observera att vi använder Amazon enkel lagringstjänst (Amazon S3) för att lagra modellartefakterna som vi behöver för SageMaker och LMI att använda, så vi ställer in en S3-prefixvariabel därefter. Se följande kod:

import sagemaker
import jinja2
from sagemaker import image_uris
import boto3
import os
import time
import json
from pathlib import Path
from sagemaker.utils import name_from_base role = sagemaker.get_execution_role() # execution role for the endpoint
sess = sagemaker.session.Session() # sagemaker session for interacting with different AWS APIs
bucket = sess.default_bucket() # bucket to house artifacts
model_bucket = sess.default_bucket() # bucket to house artifacts
s3_code_prefix_deepspeed = "hf-large-model-djl-/code_falcon40b/deepspeed" # folder within bucket where code artifact will go
region = sess._region_name
account_id = sess.account_id()
s3_client = boto3.client("s3")
sm_client = boto3.client("sagemaker")
smr_client = boto3.client("sagemaker-runtime")
jinja_env = jinja2.Environment()

Vi skapar sedan en lokal mapp för vår arbetsyta för att lagra våra modellartefakter:

!mkdir -p code_falcon40b_deepspeed

Vi skapar först en serving.properties konfigurationsfilen i den lokala katalogen vi skapade. Detta serving.properties fil indikerar för LMI-behållaren och front-end DJL Serving-biblioteket vilken modell för parallellisering och slutledningsoptimering vi vill använda. Du kan hitta konfigurationsalternativen för både DeepSpeed ​​och Hugging Face Accelerate i Konfigurationer och inställningar. Observera här att vi ställer in option.model_id parameter för att definiera vilken Hugging Face-modell som ska dras från. SageMaker gör det enkelt att arbeta med Hugging Face-modeller, och den här raden är allt du behöver. Dessutom ställer vi option.tensor_parallel_degree till ett värde av 4 eftersom vi har fyra GPU:er på vår ml.g5.24xlarge-instans. Den här parametern definierar hur många partitioner av modellen som ska skapas och distribueras. Observera att om vi hade använt en större instans med åtta GPU:er, som ml.g5.48xlarge, och fortfarande satt ett värde på 4, så skulle LMI automatiskt skapa två kopior av modellen (två kopior fördelade på fyra GPU:er vardera). Se följande kod:

%%writefile ./code_falcon40b_deepspeed/serving.properties
engine=Python
#to deploy falcon-40b-instruct set the model_id value to 'tiiuae/falcon-40b-instruct'
option.model_id=tiiuae/falcon-40b
option.tensor_parallel_degree=4
#option.s3url = {{s3url}}

Du kan också byta ut tiiuae/falcon-40b med tiiuae/falcon-40b-instruct om det passar dina behov bättre.

Vi inkluderar även en requirements.txt fil som du kan ange för att installera paket som du behöver:

%%writefile ./code_falcon40b_deepspeed/requirements.txt
einops
torch==2.0.1

Det sista vi behöver är model.py fil som kommer att användas med din modell:

%%writefile ./code_falcon40b_deepspeed/model.py
from djl_python import Input, Output
import os
import torch
from transformers import pipeline, AutoModelForCausalLM, AutoTokenizer
from typing import Any, Dict, Tuple
import warnings predictor = None def get_model(properties): model_name = properties["model_id"] local_rank = int(os.getenv("LOCAL_RANK", "0")) model = AutoModelForCausalLM.from_pretrained( model_name, low_cpu_mem_usage=True, trust_remote_code=True, torch_dtype=torch.bfloat16, device_map="auto", ) tokenizer = AutoTokenizer.from_pretrained(model_name) generator = pipeline( task="text-generation", model=model, tokenizer=tokenizer, device_map="auto" ) return generator def handle(inputs: Input) -> None: global predictor if not predictor: predictor = get_model(inputs.get_properties()) if inputs.is_empty(): # Model server makes an empty call to warmup the model on startup return None data = inputs.get_as_json() text = data["text"] text_length = data["text_length"] outputs = predictor(text, do_sample=True, min_length=text_length, max_length=text_length) result = {"outputs": outputs} return Output().add_as_json(result)

Det är allt! Vid det här laget har vi skapat alla artefakter du behöver distribuera Falcon-40B med DeepSpeed! Vi paketerar katalogen till en *.tar.gz-fil och laddar upp den till Amazon S3. Observera att den faktiska modellen inte har laddats ner eller paketerats i den här filen. LMI-behållaren laddar ner modellen åt dig direkt från Hugging Face. Du har också möjlighet att rikta in dig på en S3-hink om du vill ha din egen kopia av modellen på en plats som är mer presterande att ladda ner. LMI innehåller även optimering för nedladdning från Amazon S3 med hög prestanda. Se följande kod:

s3_code_artifact_deepspeed= sess.upload_data("model.tar.gz", bucket, s3_code_prefix_deepspeed)
print(f"S3 Code or Model tar for deepspeed uploaded to --- > {s3_code_artifact_deepspeed}")

Allt som återstår att göra vid denna tidpunkt är att definiera behållaren vi vill använda och skapa ett modellobjekt:

inference_image_uri = ( f"763104351884.dkr.ecr.{region}.amazonaws.com/djl-inference:0.22.1-deepspeed0.8.3-cu118"
)
model_name_acc = name_from_base(f"falcon40b-model-ds")
create_model_response = sm_client.create_model( ModelName=model_name_acc, ExecutionRoleArn=role, PrimaryContainer={"Image": inference_image_uri, "ModelDataUrl": s3_code_artifact_deepspeed},
)
model_arn = create_model_response["ModelArn"]

Sedan skapar vi en slutpunktskonfiguration och skapar slutpunkten:


endpoint_config_name = f"{model_name}-config"
endpoint_name = f"{model_name}-endpoint"
endpoint_config_response = sm_client.create_endpoint_config( EndpointConfigName=endpoint_config_name, ProductionVariants=[ { "VariantName": "variant1", "ModelName": model_name, "InstanceType": "ml.g5.24xlarge", "InitialInstanceCount": 1, "ModelDataDownloadTimeoutInSeconds": 3600, "ContainerStartupHealthCheckTimeoutInSeconds": 3600, # "VolumeSizeInGB": 512 }, ],
)
endpoint_config_response create_endpoint_response = sm_client.create_endpoint( EndpointName=f"{endpoint_name}", EndpointConfigName=endpoint_config_name
)
print(f"Created Endpoint: {create_endpoint_response['EndpointArn']}")

Konfigurationsobjekt att tänka på för framgångsrik värd

En viktig faktor för värdskap för stora modeller är att se till att det finns tillräckligt med tid för modellnedladdning från Hugging Face. I våra tester tog Falcon-40B cirka 90 minuter att ladda ner till instansen. En nyckeluppsättning konfigurationer för att möjliggöra detta är ContainerStartupHealthCheckTimeout InSeconds och ModelDataDownloadTimeoutInSeconds. Se till att SageMaker-slutpunktskonfigurationen har ett värde på 3600 för var och en av dessa. Dessutom är det mycket lättare att ladda ner från Amazon S3 istället för den ursprungliga modellen zoo med LMI-behållare som är speciellt designade för LLMS som använder verktyget S5cmd, vilket minskar nedladdningstiden för modellen till cirka 10 minuter.

Du kan övervaka statusen för slutpunkten genom att ringa DescribeEndpoint, som berättar när allt är klart. Din slutpunkt är nu redo att svara på slutledningsförfrågningar! Eftersom LMI hanterar modellpartitioneringen och orkestreringen åt dig, kommer varje begäran att behandlas med alla 4 GPU:er som finns tillgängliga på vår ml.g5.12xlarge-instans. Detta tillåter oss att vara värd för LLM:er och öka prestandan om du skalar GPU-acceleratorer horisontellt. Se följande kod:

response_model = smr_client.invoke_endpoint( EndpointName=endpoint_name, Body=json.dumps({"text": "What is the purpose of life?", "text_length": 150}), ContentType="application/json",
) response_model["Body"].read().decode("utf8")

Om du är klar och vill ta bort ändpunktskonfigurationen, ändpunkten och modellobjektet kan du köra följande kommandon:

sm_client.delete_endpoint(EndpointName=endpoint_name)
sm_client.delete_endpoint_config(EndpointConfigName=endpoint_config_name)
sm_client.delete_model(ModelName=model_name)

Den här koden som vi refererade till i det här inlägget kan hittas i sin helhet anteckningsbok på GitHub.

Slutsats

SageMaker Hosting och LMI DLC gör det enkelt för dig att vara värd för LLM:er som Falcon-40B. Den tar på sig de odifferentierade tunga lyften när det gäller att orkestrera vad som krävs för att vara värd för modeller över flera GPU:er och ger konfigurerbara alternativ för att passa dina behov. Dessutom blir det väldigt enkelt att använda Hugging Face-modeller, med inbyggt stöd för dessa modeller.

I det här inlägget visade vi hur du kan använda SageMaker för att vara värd för Falcon-40B-modellen med DeepSpeed. Dessutom gav vi exempel i GitHub att vara värd för Falcon-40B med Accelerate, och de mindre Falcon-7B-modellerna. Vi uppmuntrar dig att prova SageMaker med LMI och komma igång med det bäst presterande allmänt tillgängliga LLM hittills!


Om författarna

Distribuera Falcon-40B med stora modellinferens-DLC:er på Amazon SageMaker | Amazon Web Services PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.James Park är en lösningsarkitekt på Amazon Web Services. Han arbetar med Amazon.com för att designa, bygga och distribuera tekniklösningar på AWS och har ett särskilt intresse för AI och maskininlärning. På fritiden tycker han om att söka nya kulturer, nya upplevelser och att hålla sig uppdaterad med de senaste tekniktrenderna. Du kan hitta honom på LinkedIn.

Distribuera Falcon-40B med stora modellinferens-DLC:er på Amazon SageMaker | Amazon Web Services PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.Abhi Shivaditya är en Senior Solutions Architect på AWS, som arbetar med strategiska globala företagsorganisationer för att underlätta införandet av AWS-tjänster inom områden som artificiell intelligens, distribuerad datoranvändning, nätverk och lagring. Hans expertis ligger inom djupinlärning inom områdena Natural Language Processing (NLP) och Computer Vision. Abhi hjälper kunder att implementera högpresterande maskininlärningsmodeller effektivt inom AWS-ekosystemet.

Distribuera Falcon-40B med stora modellinferens-DLC:er på Amazon SageMaker | Amazon Web Services PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.Robert Van Dusen är senior produktchef hos Amazon SageMaker. Han leder optimering av djupinlärningsmodeller för applikationer som stor modellinferens.

Distribuera Falcon-40B med stora modellinferens-DLC:er på Amazon SageMaker | Amazon Web Services PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.Evandro Franco är en AI/ML Specialist Solutions Architect som arbetar med Amazon Web Services. Han hjälper AWS-kunder att övervinna affärsutmaningar relaterade till AI/ML ovanpå AWS. Han har mer än 15 år arbetat med teknik, från mjukvaruutveckling, infrastruktur, serverlös, till maskininlärning.

Distribuera Falcon-40B med stora modellinferens-DLC:er på Amazon SageMaker | Amazon Web Services PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.Qing Lan är en mjukvaruutvecklingsingenjör i AWS. Han har arbetat med flera utmanande produkter i Amazon, inklusive högpresterande ML-slutledningslösningar och högpresterande loggsystem. Qings team lanserade framgångsrikt den första miljardparametermodellen i Amazon Advertising med mycket låg latens som krävs. Qing har djupgående kunskaper om infrastrukturoptimering och Deep Learning-acceleration.

Distribuera Falcon-40B med stora modellinferens-DLC:er på Amazon SageMaker | Amazon Web Services PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.Frank Liu är mjukvaruingenjör för AWS Deep Learning. Han fokuserar på att bygga innovativa djupinlärningsverktyg för mjukvaruutvecklare och forskare. På fritiden tycker han om att vandra med vänner och familj.

Tidsstämpel:

Mer från AWS maskininlärning