Gestisci modelli aperti Llama 3 utilizzando Cloud TPU multi-host su Vertex AI Prediction con Saxml

Llama 3 è un'istanza di grandi dimensioni open source modello linguistico (LLM) di Meta. Questa guida mostra come pubblicare un LLM Llama 3 utilizzando più host Tensor Processing Unit (TPU) attive Vertex AI Prediction con Saxml.

Questa guida consente di scaricare i pesi e il tokenizzatore del modello Llama 3 70B eseguirne 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 modello di conversione richiede molta memoria e potrebbe non riuscire se scegli un di tipo di macchina virtuale con memoria insufficiente.

  1. 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.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.

  4. Abilita le API Vertex AI and Artifact Registry.

    Abilita le API

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  6. Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.

  7. Abilita le API Vertex AI and Artifact Registry.

    Abilita le API

  8. Nella console Google Cloud, attiva Cloud Shell.

    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.

  9. Segui la documentazione di Artifact Registry per installare e Docker.
  10. 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 una shell diversa da Cloud Shell eseguire la seguente configurazione aggiuntiva:

  1. Installa Google Cloud CLI.
  2. Per initialize gcloud CLI, esegui questo comando:

    gcloud init

Se usi una shell diversa da Cloud Shell per il modello, del deployment, assicurati che la versione di Google Cloud CLI sia dopo il giorno 475.0.0. Puoi aggiornare Google Cloud CLI eseguendo Aggiornamento dei componenti gcloud .

Se esegui il deployment del modello utilizzando l'SDK Vertex AI, assicurati che: disponi della versione 1.50.0 o successiva.

Accedere al modello e scaricare i pesi del modello

I seguenti passaggi sono per un'istanza di Vertex AI Workbench che include un VM M1 ottimizzato per la memoria. Per informazioni su come modificare il tipo di macchina di un Vertex AI Workbench consulta l'istanza Modificare il tipo di macchina di un'istanza di Vertex AI Workbench.

  1. Vai alla sezione Pagina di consenso del modello Lama.

  2. Seleziona Llama 3, compila il modulo di consenso e accetta i termini e conditions.

  3. Cerca nella posta in arrivo un'email contenente un URL firmato.

  4. Scarica il Script download.sh da GitHub eseguendo questo comando:

    wget https://raw.githubusercontent.com/meta-llama/llama3/main/download.sh
    chmod +x download.sh
    
  5. Per scaricare i pesi del modello, esegui lo script download.sh, scaricato da GitHub.

  6. Quando richiesto, inserisci l'URL firmato presente nell'email che hai ricevuto nel sezione precedente.

  7. Quando viene richiesto il download dei modelli, inserisci 70B.

Converti i pesi del modello in formato Saxml

  1. Esegui questo comando per scaricare Saxml:

    git clone https://github.com/google/saxml.git
    
  2. Esegui questi comandi per configurare un ambiente virtuale Python:

    python -m venv .
    source bin/activate
    
  3. Esegui questi comandi per installare le dipendenze:

    pip install --upgrade pip
    
    pip install paxml
    
    pip install praxis
    
    pip install torch
    
  4. 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 scaricati
    • PATH_TO_PAX_LLAMA3: il percorso della directory in cui archivia i pesi del modello convertito

    I modelli convertiti verranno inseriti $PATH_TO_PAX_LLAMA3/checkpoint_00000000 cartella.

  5. 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
    
  6. Aggiungi un file commit_success.txt vuoto nella cartella $PATH_TO_PAX_LLAMA3 e le sottocartelle metadata e state 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 le seguenti cartelle e file:

    $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.

  1. In Cloud Shell, esegui questo comando sostituendo PROJECT_ID con il tuo ID progetto:

    projectid=PROJECT_ID
    gcloud config set project ${projectid}
    
  2. Per creare il bucket, esegui questo comando:

    gcloud storage buckets create gs://WEIGHTS_BUCKET_NAME
    

    Sostituisci WEIGHTS_BUCKET_NAME con il nome che preferisci da 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 modello Saxml, esegui 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 in us-west1.
  • MODEL_DISPLAY_NAME: il nome visualizzato per il modello
  • PROJECT_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 impostare l'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 che utilizzano la topologia 4x4. Tuttavia, puoi specificare uno qualsiasi dei 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 nella Repository GitHub di Saxml, e assicurati che sia partizionato in modo da corrispondere al numero di dispositivi e che Cloud TPU abbia memoria sufficiente per caricare il modello.

Per informazioni sul deployment di un modello su Cloud TPU a host singolo, consulta Esegui il deployment di un modello.

Per ulteriori informazioni sui tipi di Cloud TPU v5e, consulta TPU v5e.

  1. 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)")
    
  2. 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)")
    
  3. 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 al termine dell'operazione. Puoi eseguire un polling per verificare lo stato dell'operazione finché la risposta non include "done": true. Utilizza il seguente comando per interroga lo stato:

    gcloud ai operations describe \
    --region=LOCATION \
    OPERATION_ID
    

    Sostituisci OPERATION_ID con l'ID operazione che è stato restituito dal comando precedente.

Ottieni previsioni online dal modello di cui è stato eseguito il deployment

Per ottenere previsioni online dall'endpoint Vertex AI Prediction, esegui gcloud ai endpoints predict un comando kubectl.

  1. Esegui questo comando per creare un file request.json contenente un richiesta di previsione di esempio:

    cat << EOF > request.json
    {"instances": [{"text_batch": "the distance between Earth and Moon is "}]}
    EOF
    
  2. 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 incorrere in Vertex AI addebiti, elimina le risorse Google Cloud che hai creato durante questo tutorial:

  1. 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
    
  2. 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