Llama 3 è un modello linguistico di grandi dimensioni (LLM) open source di Meta. Questa guida mostra come pubblicare un LLM Llama 3 utilizzando Tensor Processing Unit (TPU) multi-host su Vertex AI Prediction con Saxml.
In questa guida, scaricherai i pesi e il tokenizzatore del modello Llama 3 70B e ne eseguirai il deployment su Vertex AI Prediction che esegue Saxml sulle TPU.
Prima di iniziare
Ti consigliamo di utilizzare una VM M1 ottimizzato per la memoria per scaricare il modello e convertirlo in Saxml. Questo perché il processo di conversione del modello richiede molta memoria e potrebbe non riuscire se scegli un tipo di macchina con memoria insufficiente.
- Accedi al tuo account Google Cloud. Se non conosci Google Cloud, crea un account per valutare le prestazioni dei nostri prodotti in scenari reali. I nuovi clienti ricevono anche 300 $di crediti gratuiti per l'esecuzione, il test e il deployment dei carichi di lavoro.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.
-
Abilita le API Vertex AI and Artifact Registry.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.
-
Abilita le API Vertex AI and Artifact Registry.
-
Nella console Google Cloud, attiva Cloud Shell.
Nella parte inferiore della console Google Cloud viene avviata una sessione di Cloud Shell che mostra un prompt della riga di comando. Cloud Shell è un ambiente shell con Google Cloud CLI già installato e con valori già impostati per il progetto attuale. L'inizializzazione della sessione può richiedere alcuni secondi.
- Segui la documentazione di Artifact Registry per installare Docker.
- Assicurati di avere quote sufficienti per 16 chip TPU v5e per Vertex AI Prediction.
Questo tutorial presuppone che utilizzi Cloud Shell per interagire con Google Cloud. Se vuoi utilizzare una shell diversa da Cloud Shell, esegui questa configurazione aggiuntiva:
- Installa Google Cloud CLI.
-
Per initialize gcloud CLI, esegui questo comando:
gcloud init
Se utilizzi una shell diversa da Cloud Shell per il deployment del modello, assicurati che la versione di Google Cloud CLI sia successiva alla data 475.0.0
. Puoi aggiornare Google Cloud CLI eseguendo il comando gcloudComponents update.
Se esegui il deployment del modello utilizzando l'SDK Vertex AI, assicurati di avere la versione 1.50.0
o successiva.
Accedere al modello e scaricare i pesi del modello
I seguenti passaggi si riferiscono a un'istanza di Vertex AI Workbench che ha una VM M1 ottimizzato per la memoria. Per informazioni sulla modifica del tipo di macchina di un'istanza di Vertex AI Workbench, consulta Modificare il tipo di macchina di un'istanza di Vertex AI Workbench.
Seleziona Llama 3, compila il modulo di consenso e accetta i Termini e condizioni.
Cerca nella posta in arrivo un'email contenente un URL firmato.
Scarica lo script
download.sh
da GitHub eseguendo questo comando:wget https://raw.githubusercontent.com/meta-llama/llama3/main/download.sh chmod +x download.sh
Per scaricare i pesi del modello, esegui lo script
download.sh
che hai scaricato da GitHub.Quando richiesto, inserisci l'URL firmato dall'email ricevuta nella sezione precedente.
Quando viene richiesto il download dei modelli, inserisci
70B
.
Converti i pesi del modello in formato Saxml
Esegui questo comando per scaricare Saxml:
git clone https://github.com/google/saxml.git
Esegui questi comandi per configurare un ambiente virtuale Python:
python -m venv . source bin/activate
Esegui questi comandi per installare le dipendenze:
pip install --upgrade pip pip install paxml pip install praxis pip install torch
Per convertire i pesi del modello nel formato Saxml, esegui questo comando:
python3 saxml/saxml/tools/convert_llama_ckpt.py \ --base PATH_TO_META_LLAMA3 \ --pax PATH_TO_PAX_LLAMA3 \ --model-size llama3_70b
Sostituisci quanto segue:
PATH_TO_META_LLAMA3
: il percorso della directory contenente i pesi del modello scaricatiPATH_TO_PAX_LLAMA3
: il percorso della directory in cui archiviare i pesi del modello convertiti
I modelli convertiti verranno inseriti nella cartella
$PATH_TO_PAX_LLAMA3/checkpoint_00000000
.Copia il file tokenizzatore dalla directory originale in una sottocartella denominata
vocabs
come segue:cp $PATH_TO_META_LLAMA3/tokenizer.model $PATH_TO_PAX_LLAMA3/vocabs/tokenizer.model
Aggiungi un file
commit_success.txt
vuoto nella cartella$PATH_TO_PAX_LLAMA3
e nelle sottocartellemetadata
estate
al suo interno, come segue:touch $PATH_TO_PAX_LLAMA3/checkpoint_00000000/commit_success.txt touch $PATH_TO_PAX_LLAMA3/checkpoint_00000000/metadata/commit_success.txt touch $PATH_TO_PAX_LLAMA3/checkpoint_00000000/state/commit_success.txt
La cartella
$PATH_TO_PAX_LLAMA3
ora contiene i seguenti file e cartelle:$PATH_TO_PAX_LLAMA3/checkpoint_00000000/commit_success.txt $PATH_TO_PAX_LLAMA3/checkpoint_00000000/metadata/ $PATH_TO_PAX_LLAMA3/checkpoint_00000000/metadata/commit_success.txt $PATH_TO_PAX_LLAMA3/checkpoint_00000000/state/ $PATH_TO_PAX_LLAMA3/checkpoint_00000000/state/commit_success.txt $PATH_TO_PAX_LLAMA3/vocabs/tokenizer.model
crea un bucket Cloud Storage
Crea un bucket Cloud Storage per archiviare i pesi del modello convertito.
In Cloud Shell, esegui questi comandi, sostituendo PROJECT_ID con il tuo ID progetto:
projectid=PROJECT_ID gcloud config set project ${projectid}
Per creare il bucket, esegui questo comando:
gcloud storage buckets create gs://WEIGHTS_BUCKET_NAME
Sostituisci WEIGHTS_BUCKET_NAME con il nome che vuoi utilizzare per il bucket.
Copia i pesi del modello nel bucket Cloud Storage
Per copiare i pesi del modello nel bucket, esegui questo comando:
gsutil -m cp -R PATH_TO_PAX_LLAMA3/* gs://WEIGHTS_BUCKET_NAME/llama3/pax_70b/
Carica il modello
Un container Saxml predefinito è disponibile all'indirizzo us-docker.pkg.dev/vertex-ai/prediction/sax-tpu:latest
.
Per caricare una risorsa Model
in Vertex AI Prediction utilizzando il container
Saxml predefinito, esegui il
comando gcloud ai models upload
come segue:
gcloud ai models upload \
--region=LOCATION \
--display-name=MODEL_DISPLAY_NAME \
--container-image-uri=us-docker.pkg.dev/vertex-ai/prediction/sax-tpu:latest \
--artifact-uri='gs://WEIGHTS_BUCKET_NAME/llama3/pax_70b' \
--container-args='--model_path=saxml.server.pax.lm.params.lm_cloud.LLaMA3_70BFP16x16' \
--container-args='--platform_chip=tpuv5e' \
--container-args='--platform_topology=4x4' \
--container-args='--ckpt_path_suffix=checkpoint_00000000' \
--container-deployment-timeout-seconds=2700 \
--container-ports=8502 \
--project=PROJECT_ID
Effettua le seguenti sostituzioni:
LOCATION
: la regione in cui stai utilizzando Vertex AI. Tieni presente che le TPU sono disponibili solo inus-west1
.MODEL_DISPLAY_NAME
: il nome visualizzato per il modelloPROJECT_ID
: l'ID del tuo progetto Google Cloud
Crea un endpoint di previsione online
Per creare l'endpoint, esegui questo comando:
gcloud ai endpoints create \
--region=LOCATION \
--display-name=ENDPOINT_DISPLAY_NAME \
--project=PROJECT_ID
Sostituisci ENDPOINT_DISPLAY_NAME
con il nome visualizzato che vuoi usare per il tuo endpoint.
esegui il deployment del modello nell'endpoint
Quando l'endpoint è pronto, esegui il deployment del modello nell'endpoint.
In questo tutorial eseguirai il deployment di un modello Llama 3 70B con sharding per 16 chip Cloud TPU v5e utilizzando la topologia 4x4. Tuttavia, puoi specificare una qualsiasi delle seguenti topologie Cloud TPU multi-host supportate:
Tipo di macchina | Topologia | Numero di chip TPU | Numero di host |
---|---|---|---|
ct5lp-hightpu-4t |
4x4 | 16 | 2 |
ct5lp-hightpu-4t |
4x8 | 32 | 4 |
ct5lp-hightpu-4t |
8x8 | 64 | 8 |
ct5lp-hightpu-4t |
8x16 | 128 | 16 |
ct5lp-hightpu-4t |
16x16 | 256 | 32 |
Se esegui il deployment di un modello Llama diverso definito nel repository GitHub Saxml, assicurati che sia partizionato in modo da corrispondere al numero di dispositivi scelti come target e che Cloud TPU disponga di memoria sufficiente per caricare il modello.
Per informazioni sul deployment di un modello su Cloud TPU a host singolo, consulta Eseguire il deployment di un modello.
Per ulteriori informazioni sui tipi di Cloud TPU v5e, consulta TPU v5e.
Recupera l'ID endpoint per l'endpoint di previsione online:
ENDPOINT_ID=$(gcloud ai endpoints list \ --region=LOCATION \ --filter=display_name=ENDPOINT_NAME \ --format="value(name)")
Ottieni l'ID modello per il tuo modello:
MODEL_ID=$(gcloud ai models list \ --region=LOCATION \ --filter=display_name=DEPLOYED_MODEL_NAME \ --format="value(name)")
Esegui il deployment del modello nell'endpoint:
gcloud ai endpoints deploy-model $ENDPOINT_ID \ --region=LOCATION \ --model=$MODEL_ID \ --display-name=DEPLOYED_MODEL_NAME \ --machine-type=ct5lp-hightpu-4t \ --tpu-topology=4x4 \ --traffic-split=0=100
Sostituisci DEPLOYED_MODEL_NAME con il nome del deployment. Può essere uguale al nome visualizzato del modello (MODEL_DISPLAY_NAME).
L'operazione di deployment potrebbe scadere.
Il comando
deploy-model
restituisce un ID operazione che può essere utilizzato per verificare il completamento dell'operazione. Puoi eseguire il polling per verificare lo stato dell'operazione finché la risposta non include"done": true
. Utilizza il seguente comando per eseguire il polling dello stato:gcloud ai operations describe \ --region=LOCATION \ OPERATION_ID
Sostituisci OPERATION_ID con l'ID operazione restituito dal comando precedente.
Ottieni previsioni online dal modello di cui è stato eseguito il deployment
Per ottenere previsioni online dall'endpoint di Vertex AI Prediction, esegui il comando gcloud ai endpoints predict
.
Esegui questo comando per creare un file
request.json
contenente una richiesta di previsione di esempio:cat << EOF > request.json {"instances": [{"text_batch": "the distance between Earth and Moon is "}]} EOF
Per inviare la richiesta di previsione online all'endpoint, esegui questo comando:
gcloud ai endpoints predict $ENDPOINT_ID \ --project=PROJECT_ID \ --region=LOCATION \ --json-request=request.json
Esegui la pulizia
Per evitare ulteriori addebiti per Vertex AI, elimina le risorse Google Cloud che hai creato durante questo tutorial:
Per annullare il deployment del modello dall'endpoint ed eliminarlo, esegui questi comandi:
ENDPOINT_ID=$(gcloud ai endpoints list \ --region=LOCATION \ --filter=display_name=ENDPOINT_NAME \ --format="value(name)") DEPLOYED_MODEL_ID=$(gcloud ai endpoints describe $ENDPOINT_ID \ --region=LOCATION \ --format="value(deployedModels.id)") gcloud ai endpoints undeploy-model $ENDPOINT_ID \ --region=LOCATION \ --deployed-model-id=$DEPLOYED_MODEL_ID gcloud ai endpoints delete $ENDPOINT_ID \ --region=LOCATION \ --quiet
Per eliminare il modello, esegui questi comandi:
MODEL_ID=$(gcloud ai models list \ --region=LOCATION \ --filter=display_name=DEPLOYED_MODEL_NAME \ --format="value(name)") gcloud ai models delete $MODEL_ID \ --region=LOCATION \ --quiet