Distribuisci Falcon-40B con DLC di inferenza di modelli di grandi dimensioni su Amazon SageMaker | Servizi Web Amazon

Distribuisci Falcon-40B con DLC di inferenza di modelli di grandi dimensioni su Amazon SageMaker | Servizi Web Amazon

La scorsa settimana, Istituto per l'innovazione tecnologica (TII) lanciato TII Falcon LLM, un modello LLM (fondational large Language Model) open source. Addestrato su 1 trilione di token con Amazon Sage Maker, Falcon vanta prestazioni di prim'ordine (n. 1 sulla classifica Classifica "Faccia che abbraccia". al momento della stesura di questo articolo) pur essendo relativamente leggero e meno costoso da ospitare rispetto ad altri LLM come llama-65B. In questo post, dimostriamo come distribuire Falcon per applicazioni come la comprensione del linguaggio e l'assistenza alla scrittura automatizzata utilizzando contenitori di deep learning con inferenza di modelli di grandi dimensioni su SageMaker.

Il Falcon è atterrato su SageMaker

TII è l'organizzazione di ricerca applicata all'interno di Abu Dhabi Consiglio per la ricerca tecnologica avanzata; il suo team di scienziati, ricercatori e ingegneri si dedica alla scoperta di tecnologie trasformative e allo sviluppo di scoperte scientifiche che renderanno la nostra società a prova di futuro. All'inizio di quest'anno, TII ha deciso di formare un LLM open source all'avanguardia e ha utilizzato l'infrastruttura, gli strumenti e le competenze di SageMaker per portare a termine il lavoro (per saperne di più su come questo modello è stato addestrato su SageMaker , fare riferimento a Il Technology Innovation Institute addestra il modello di fondazione all'avanguardia Falcon LLM 40B su Amazon SageMaker). Il risultato di questo sforzo è TII Falcon LLM.

Addestrato su 1 trilione di token, Falcon vanta prestazioni di prim'ordine contro i Cablaggio di valutazione del modello linguistico Eleuther AI ed è attualmente il numero 1 nella classifica Classifica "Faccia che abbraccia". per precisione. Il modello è disponibile in due diverse dimensioni, Falcon-40B e Falcon-7B, e può essere utilizzato per prestazioni all'avanguardia in applicazioni quali comprensione del linguaggio, esperienze di conversazione e assistenza automatizzata nella scrittura. Questo post ti aiuterà a iniziare a distribuire Falcon su SageMaker per un'inferenza ad alta precisione in questi tipi di domini.

I DLC di inferenza di modelli di grandi dimensioni SageMaker semplificano l'hosting LLM

Ospitare LLM come Falcon-40B e Falcon-7B può essere impegnativo. I modelli più grandi sono spesso più accurati perché includono miliardi di parametri, ma le loro dimensioni possono anche comportare una latenza di inferenza più lenta o un throughput peggiore. L'hosting di un LLM può richiedere più memoria GPU e kernel ottimizzati per ottenere prestazioni accettabili. Per complicare ulteriormente le cose, sebbene i modelli più piccoli come Falcon-7B possano generalmente adattarsi a una singola GPU come un'istanza NVIDIA A10G che alimenta i tipi di istanze AWS G5, i modelli più grandi come Falcon-40B non possono farlo. Quando ciò accade, è necessario utilizzare strategie come il parallelismo tensore per suddividere il modello più grande in più parti e sfruttare la memoria di più GPU. Le soluzioni di hosting legacy utilizzate per i modelli più piccoli in genere non offrono questo tipo di funzionalità, il che aumenta la difficoltà.

I contenitori di deep learning (DLC) SageMaker Large Model Inference (LMI) possono essere d'aiuto. I DLC LMI sono una soluzione end-to-end completa per l'hosting di LLM come Falcon-40B. Nella parte front-end, includono un server modello ad alte prestazioni (DJL Serving) progettato per l'inferenza di modelli di grandi dimensioni con funzionalità come lo streaming di token e la replica automatica del modello all'interno di un'istanza per aumentare il throughput. Sul backend, i DLC LMI includono anche diversi motori paralleli di modelli ad alte prestazioni, come DeepSpeed ​​e FasterTransformer, che possono partizionare e gestire i parametri del modello su più GPU. Questi motori includono anche kernel ottimizzati per i modelli di trasformatori più diffusi, che possono accelerare l'inferenza fino a tre volte più velocemente. Con i DLC LMI, devi semplicemente creare un file di configurazione per iniziare con l'hosting LLM su SageMaker. Per ulteriori informazioni sui DLC SageMaker LMI, fare riferimento a Parallelismo dei modelli e grande inferenza dei modelli e il nostro elenco delle immagini disponibili. Puoi anche consultare il nostro post precedente sull'hosting Bloom-175B su SageMaker utilizzando i DLC LMI.

Panoramica della soluzione

Questo post illustra come ospitare Falcon-40B utilizzando DeepSpeed ​​su SageMaker utilizzando i DLC LMI. Falcon-40B richiede l'utilizzo di più GPU A10, mentre Falcon-7B richiede solo una singola GPU. Abbiamo anche preparato esempi a cui puoi fare riferimento per ospitare Falcon-40B e Falcon-7B utilizzando sia DeepSpeed ​​che Accelerate. Puoi trovare i nostri esempi di codice su GitHub.

Questo esempio può essere eseguito in istanze notebook SageMaker o Amazon Sage Maker Studio i Quaderni. Per ospitare Falcon-40B utilizzando LMI e DeepSpeed, dobbiamo utilizzare un'istanza ml.g5.24xlarge. Queste istanze forniscono 4 GPU NVIDIA A10G, ciascuna delle quali supporta 96 GiB di memoria GPU. Inoltre, l'host fornisce 96 vCPU e 384 GiB di memoria host. Il contenitore LMI aiuterà ad affrontare gran parte del lavoro pesante indifferenziato associato all'hosting di LLM, incluso il download del modello e il partizionamento dell'artefatto del modello in modo che i parametri che lo compongono possano essere distribuiti su più GPU.

Le quote per le istanze di machine learning (ML) di SageMaker possono variare da un account all'altro. Se ricevi un errore che indica che hai superato la quota per le istanze g5.24xlarge mentre segui questo post, puoi aumentare il limite tramite Console delle quote di servizio.

Guida dettagliata del taccuino

Per iniziare, iniziamo installando e importando le dipendenze necessarie per il nostro esempio. Utilizziamo l'SDK Boto3 e l'SDK SageMaker. Nota che usiamo Servizio di archiviazione semplice Amazon (Amazon S3) per archiviare gli artefatti del modello di cui abbiamo bisogno per l'utilizzo di SageMaker e LMI, quindi impostiamo di conseguenza una variabile di prefisso S3. Vedere il seguente codice:

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

Creiamo quindi una cartella locale per il nostro spazio di lavoro per archiviare gli artefatti del nostro modello:

!mkdir -p code_falcon40b_deepspeed

Per prima cosa creiamo un serving.properties file di configurazione nella directory locale che abbiamo creato. Questo serving.properties Il file indica al contenitore LMI e alla libreria front-end DJL Serving quale modello di parallelizzazione e motore di ottimizzazione dell'inferenza vogliamo utilizzare. Puoi trovare le opzioni di configurazione sia per DeepSpeed ​​che per Hugging Face Accelerate in Configurazioni e impostazioni. Qui, nota che impostiamo il file option.model_id parametro per definire da quale modello Hugging Face estrarre. SageMaker semplifica il lavoro con i modelli Hugging Face e questa riga è tutto ciò di cui hai bisogno. Inoltre, impostiamo option.tensor_parallel_degree su un valore pari a 4 perché abbiamo quattro GPU sulla nostra istanza ml.g5.24xlarge. Questo parametro definisce quante partizioni del modello creare e distribuire. Tieni presente che se avessimo utilizzato un'istanza più grande con otto GPU, come ml.g5.48xlarge, e avessimo comunque impostato un valore pari a 4, LMI creerebbe automaticamente due repliche del modello (due repliche distribuite su quattro GPU ciascuna). Vedere il seguente codice:

%%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}}

Puoi anche scambiare tiiuae/falcon-40b con tiiuae/falcon-40b-instruct se si adatta meglio alle tue esigenze.

Includiamo anche a requirements.txt file che puoi specificare per installare i pacchetti richiesti:

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

L'ultima cosa di cui abbiamo bisogno è il model.py file che verrà utilizzato con il tuo modello:

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

Questo è tutto! A questo punto, abbiamo creato tutti gli artefatti di cui avrai bisogno per schierare Falcon-40B con DeepSpeed! Imballiamo la directory in un file *.tar.gz e lo carichiamo su Amazon S3. Tieni presente che il modello reale non è stato scaricato o inserito in questo file. Il contenitore LMI scaricherà il modello per te direttamente da Hugging Face. Hai anche la possibilità di scegliere come target un bucket S3 se desideri la tua copia del modello in una posizione che sarà più performante da scaricare. LMI include anche l'ottimizzazione per il download da Amazon S3 con prestazioni elevate. Vedere il seguente codice:

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}")

A questo punto non ci resta che definire il contenitore che vogliamo utilizzare e creare un oggetto modello:

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"]

Quindi creiamo una configurazione dell'endpoint e creiamo l'endpoint:


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

Elementi di configurazione da tenere a mente per un hosting di successo

Una considerazione importante per l'hosting di modelli di grandi dimensioni è garantire che vi sia tempo adeguato per il download del modello da Hugging Face. Nei nostri test, il Falcon-40B ha impiegato circa 90 minuti per scaricarsi sull'istanza. Una serie chiave di configurazioni per consentire ciò è ContainerStartupHealthCheckTimeoutInSeconds ed ModelDataDownloadTimeoutInSeconds. Assicurati che la configurazione dell'endpoint SageMaker abbia un valore pari a 3600 per ciascuno di questi. Inoltre, è molto più semplice scaricare da Amazon S3 invece che dal modello zoo originale utilizzando i contenitori LMI appositamente progettati per LLMS che utilizzano l'utilità S5cmd, che riduce il tempo di download del modello a circa 10 minuti.

È possibile monitorare lo stato dell'endpoint chiamando DescribeEndpoint, che ti avviserà quando tutto sarà completo. Il tuo endpoint è ora pronto per rispondere alle richieste di inferenza! Poiché LMI gestisce il partizionamento e l'orchestrazione del modello per te, ogni richiesta verrà elaborata utilizzando tutte e 4 le GPU disponibili sulla nostra istanza ml.g5.12xlarge. Questo ci consente di ospitare LLM e aumentare le prestazioni se si scalano orizzontalmente gli acceleratori GPU. Vedere il seguente codice:

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

Se hai finito e desideri eliminare la configurazione dell'endpoint, l'endpoint e l'oggetto del modello, puoi eseguire i seguenti comandi:

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

Questo codice a cui abbiamo fatto riferimento in questo post può essere trovato nel file complete taccuino su GitHub.

Conclusione

SageMaker Hosting e il DLC LMI semplificano l'hosting di LLM come Falcon-40B. Si fa carico del lavoro pesante indifferenziato nell'orchestrare ciò che è necessario per ospitare modelli su più GPU e fornisce opzioni configurabili per soddisfare le vostre esigenze. Inoltre, l'utilizzo dei modelli Hugging Face diventa molto semplice, grazie al supporto integrato per questi modelli.

In questo post, abbiamo mostrato come utilizzare SageMaker per ospitare il modello Falcon-40B utilizzando DeepSpeed. Inoltre, abbiamo fornito esempi in GitHub per ospitare Falcon-40B utilizzando Accelerate e i modelli Falcon-7B più piccoli. Ti invitiamo a provare SageMaker con LMI e a mettere in pratica il LLM pubblicamente disponibile con le migliori prestazioni fino ad oggi!


Circa gli autori

Distribuisci Falcon-40B con DLC di inferenza di modelli di grandi dimensioni su Amazon SageMaker | Amazon Web Services PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.James Park è un architetto di soluzioni presso Amazon Web Services. Collabora con Amazon.com per progettare, creare e distribuire soluzioni tecnologiche su AWS e ha un interesse particolare per l'intelligenza artificiale e il machine learning. Nel tempo libero ama scoprire nuove culture, nuove esperienze e tenersi aggiornato sulle ultime tendenze tecnologiche. Lo puoi trovare su LinkedIn.

Distribuisci Falcon-40B con DLC di inferenza di modelli di grandi dimensioni su Amazon SageMaker | Amazon Web Services PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.Abhi Shivaditya è Senior Solutions Architect presso AWS e collabora con organizzazioni aziendali globali strategiche per facilitare l'adozione dei servizi AWS in aree quali l'intelligenza artificiale, il calcolo distribuito, il networking e lo storage. La sua esperienza risiede nel Deep Learning nei domini del Natural Language Processing (NLP) e della Computer Vision. Abhi assiste i clienti nella distribuzione efficiente di modelli di machine learning ad alte prestazioni all'interno dell'ecosistema AWS.

Distribuisci Falcon-40B con DLC di inferenza di modelli di grandi dimensioni su Amazon SageMaker | Amazon Web Services PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.Roberto Van Dusen è Senior Product Manager di Amazon SageMaker. Dirige l'ottimizzazione del modello di deep learning per applicazioni come l'inferenza di modelli di grandi dimensioni.

Distribuisci Falcon-40B con DLC di inferenza di modelli di grandi dimensioni su Amazon SageMaker | Amazon Web Services PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.Evandro Franco è un AI/ML Specialist Solutions Architect che lavora su Amazon Web Services. Aiuta i clienti AWS a superare le sfide aziendali relative a AI/ML su AWS. Ha più di 15 anni di lavoro con la tecnologia, dallo sviluppo software, infrastruttura, serverless, all'apprendimento automatico.

Distribuisci Falcon-40B con DLC di inferenza di modelli di grandi dimensioni su Amazon SageMaker | Amazon Web Services PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.Qing Lan è un ingegnere di sviluppo software in AWS. Ha lavorato su diversi prodotti impegnativi in ​​Amazon, tra cui soluzioni di inferenza ML ad alte prestazioni e sistema di registrazione ad alte prestazioni. Il team di Qing ha lanciato con successo il primo modello di miliardi di parametri in Amazon Advertising con una latenza molto bassa richiesta. Qing ha una conoscenza approfondita dell'ottimizzazione dell'infrastruttura e dell'accelerazione del Deep Learning.

Distribuisci Falcon-40B con DLC di inferenza di modelli di grandi dimensioni su Amazon SageMaker | Amazon Web Services PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.Franco Liu è un ingegnere software per AWS Deep Learning. Si concentra sulla creazione di strumenti innovativi di deep learning per ingegneri e scienziati del software. Nel tempo libero ama fare escursioni con amici e famiglia.

Timestamp:

Di più da Apprendimento automatico di AWS