Questa guida mostra come gestire un modello linguistico di grandi dimensioni (LLM) di Gemma utilizzando le Tensor Processing Unit (TPU) su Vertex AI Prediction con Saxml. In questa guida, scaricherai le istruzioni per i parametri 2B e 7B ottimizzate per i modelli Gemma su Cloud Storage e ne eseguirai il deployment su Vertex AI Prediction che esegue Saxml sulle TPU.
Contesto
Fornisce a Gemma utilizzando TPU su Vertex AI Prediction con Saxml. Puoi sfruttare una soluzione AI gestita, che si occupa dell'infrastruttura di basso livello e offre un modo conveniente. In questa sezione vengono descritte le tecnologie principali utilizzate in questo tutorial.
Gemma
Gemma è un set di modelli di intelligenza artificiale (AI) a disponibilità aperta, leggeri e generativa, rilasciati con licenza aperta. Questi modelli di IA sono disponibili per l'esecuzione nelle tue applicazioni, nel tuo hardware, nei tuoi dispositivi mobili o nei tuoi servizi in hosting. Puoi utilizzare i modelli Gemma per la generazione di testo, ma puoi anche ottimizzarli per attività specializzate.
Per saperne di più, consulta la documentazione di Gemma.
Saxml
Saxml è un sistema sperimentale che gestisce i modelli Paxml, JAX e PyTorch per l'inferenza. In questo tutorial vedremo come gestire Gemma sulle TPU più convenienti per Saxml. La configurazione delle GPU è simile. Saxml offre script per creare container per Vertex AI Prediction che utilizzeremo in questo tutorial.
TPU
Le TPU sono ASIC (Application-Specific Integrated Circuit) appositamente sviluppati di Google per accelerare i framework di elaborazione dei dati come TensorFlow, PyTorch e JAX.
Questo tutorial serve i modelli Gemma 2B e Gemma 7B. Vertex AI Prediction ospita questi modelli sui seguenti pool di nodi TPU v5e a host singolo:
- Gemma 2B: ospitato in un pool di nodi TPU v5e con topologia
1x1
che rappresenta un chip TPU. Il tipo di macchina per i nodi èct5lp-hightpu-1t
. - Gemma 7B: ospitato in un pool di nodi TPU v5e con topologia
2x2
che rappresenta quattro chip TPU. Il tipo di macchina per i nodi èct5lp-hightpu-4t
.
Prima di iniziare
- 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.
-
Nella pagina del selettore di progetti della console Google Cloud, seleziona o crea un progetto Google Cloud.
-
Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.
-
Abilita le API Vertex AI API and Artifact Registry API.
-
Nella pagina del selettore di progetti della console Google Cloud, seleziona o crea un progetto Google Cloud.
-
Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.
-
Abilita le API Vertex AI API and Artifact Registry API.
-
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.
Questo tutorial presuppone che tu stia utilizzando Cloud Shell per interagire con Google Cloud. Se vuoi utilizzare una shell diversa da Cloud Shell, esegui la seguente configurazione aggiuntiva:
- Installa Google Cloud CLI.
-
Per initialize gcloud CLI, esegui questo comando:
gcloud init
- Segui la documentazione di Artifact Registry per installare Docker.
- Assicurati di disporre di quote sufficienti per 5 chip TPU v5e per Vertex AI Prediction.
- Crea un account Kaggle, se non ne hai già uno.
Accedi al modello
Per ottenere l'accesso ai modelli Gemma per il deployment in Vertex AI Prediction, devi accedere alla piattaforma Kaggle, firmare il contratto di consenso di licenza e ottenere un token API Kaggle. In questo tutorial utilizzerai un secret di Kubernetes per le credenziali di Kaggle.
Firma il contratto di consenso per la licenza
Devi firmare il contratto di consenso per utilizzare Gemma. Segui queste istruzioni:
- Accedi alla pagina relativa al consenso del modello su Kaggle.com.
- Se non l'hai ancora fatto, accedi a Kaggle.
- Fai clic su Richiedi accesso.
- Nella sezione Scegli account per il consenso, seleziona Verifica tramite account Kaggle per utilizzare il tuo account Kaggle per il consenso.
- Accetta i Termini e condizioni del modello.
Generare un token di accesso
Per accedere al modello tramite Kaggle, è necessario un token API Kaggle.
Se non ne hai già uno, segui questi passaggi per generare un nuovo token:
- Nel browser, vai alle impostazioni di Kaggle.
Nella sezione API, fai clic su Crea nuovo token.
È stato scaricato un file denominato
kaggle.json
.
Carica il token di accesso su Cloud Shell
In Cloud Shell, puoi caricare il token dell'API Kaggle nel tuo progetto Google Cloud:
- In Cloud Shell, fai clic su > Carica. Altro
- Seleziona File e fai clic su Scegli file.
- Apri il file
kaggle.json
. - Fai clic su Carica.
crea il bucket Cloud Storage
Crea il bucket Cloud Storage per archiviare i checkpoint del modello.
In Cloud Shell, esegui questo comando:
gcloud storage buckets create gs://CHECKPOINTS_BUCKET_NAME
Sostituisci CHECKPOINTS_BUCKET_NAME con il nome del bucket Cloud Storage in cui sono archiviati i checkpoint del modello.
Copia modello nel bucket Cloud Storage
In Cloud Shell, esegui questo comando:
pip install kaggle --break-system-packages
# For Gemma 2B
mkdir -p /data/gemma_2b-it
kaggle models instances versions download google/gemma/pax/2b-it/1 --untar -p /data/gemma_2b-it
gsutil -m cp -R /data/gemma_2b-it/* gs://CHECKPOINTS_BUCKET_NAME/gemma_2b-it/
# For Gemma 7B
mkdir -p /data/gemma_7b-it
kaggle models instances versions download google/gemma/pax/7b-it/1 --untar -p /data/gemma_7b-it
gsutil -m cp -R /data/gemma_7b-it/* gs://CHECKPOINTS_BUCKET_NAME/gemma_7b-it/
Crea un repository Artifact Registry
Crea un repository Artifact Registry per archiviare l'immagine container che creerai nella sezione successiva.
Abilita il servizio API Artifact Registry per il tuo progetto.
gcloud services enable artifactregistry.googleapis.com
Esegui il comando seguente nella shell per creare il repository Artifact Registry:
gcloud artifacts repositories create saxml \
--repository-format=docker \
--location=LOCATION \
--description="Saxml Docker repository"
Sostituisci LOCATION con la regione in cui Artifact Registry archivia l'immagine container. Successivamente, dovrai creare una risorsa del modello Vertex AI su un endpoint a livello di regione che corrisponda a questa regione, quindi scegli una regione in cui Vertex AI abbia un endpoint a livello di regione, ad esempio us-west1
per le TPU.
Esegui il push dell'immagine container in Artifact Registry
Il container Saxml predefinito è disponibile all'indirizzo us-docker.pkg.dev/vertex-ai/prediction/sax-tpu:latest
.
Copialo in Artifact Registry.
Configura Docker per accedere ad Artifact Registry. Quindi, esegui il push dell'immagine container
nel repository Artifact Registry.
Per concedere alla tua installazione Docker locale l'autorizzazione a eseguire il push ad Artifact Registry nella regione che hai scelto, esegui questo comando nella shell:
gcloud auth configure-docker LOCATION-docker.pkg.dev
- Sostituisci LOCATION con la regione in cui hai creato il repository.
Per copiare l'immagine container che hai solo in Artifact Registry, esegui questo comando nella tua shell:
docker tag us-docker.pkg.dev/vertex-ai/prediction/sax-tpu:latest LOCATION-docker.pkg.dev/PROJECT_ID/saxml/saxml-tpu:latest
Per eseguire il push dell'immagine container che hai solo in Artifact Registry, esegui questo comando nella tua shell:
docker push LOCATION-docker.pkg.dev/PROJECT_ID/saxml/saxml-tpu:latest
Sostituisci quanto segue, come hai fatto nella sezione precedente:
- LOCATION: la regione del tuo repository Artifact Registry.
- PROJECT_ID: l'ID del tuo progetto Google Cloud
Deployment del modello
Caricamento di un modello
Per caricare una risorsa Model
che utilizza il tuo container Saxml, esegui questo comando gcloud ai models upload
:
Gemma 2Bit
gcloud ai models upload \
--region=LOCATION \
--display-name=DEPLOYED_MODEL_NAME \
--container-image-uri=LOCATION-docker.pkg.dev/PROJECT_ID/saxml/saxml-tpu:latest \
--artifact-uri='gs://CHECKPOINTS_BUCKET_NAME/gemma_2b-it/' \
--container-args='--model_path=saxml.server.pax.lm.params.gemma.Gemma2BFP16' \
--container-args='--platform_chip=tpuv5e' \
--container-args='--platform_topology=2x2' \
--container-args='--ckpt_path_suffix=checkpoint_00000000' \
--container-ports=8502
Gemma 7B-it
gcloud ai models upload \
--region=LOCATION \
--display-name=DEPLOYED_MODEL_NAME \
--container-image-uri=LOCATION-docker.pkg.dev/PROJECT_ID/saxml/saxml-tpu:latest \
--artifact-uri='gs://CHECKPOINTS_BUCKET_NAME/gemma_7b-it/' \
--container-args='--model_path=saxml.server.pax.lm.params.gemma.Gemma7BFP16' \
--container-args='--platform_chip=tpuv5e' \
--container-args='--platform_topology=2x2' \
--container-args='--ckpt_path_suffix=checkpoint_00000000' \
--container-ports=8502
Sostituisci quanto segue:
- PROJECT_ID: l'ID del tuo progetto Google Cloud
- LOCATION_ID: la regione in cui utilizzi Vertex AI. Tieni presente che le TPU sono disponibili solo in us-west1.
-
DEPLOYED_MODEL_NAME: un nome per
DeployedModel
. Puoi utilizzare anche il nome visualizzato diModel
perDeployedModel
.
Creazione di un endpoint
Devi eseguire il deployment del modello su un endpoint prima che possa essere utilizzato per fornire previsioni online. Se esegui il deployment di un modello in un endpoint esistente,
puoi saltare questo passaggio. Nell'esempio seguente viene utilizzato il comando gcloud ai endpoints create
:
gcloud ai endpoints create \
--region=LOCATION \
--display-name=ENDPOINT_NAME
Sostituisci quanto segue:
- LOCATION_ID: la regione in cui utilizzi Vertex AI.
- ENDPOINT_NAME: il nome visualizzato dell'endpoint.
Lo strumento Google Cloud CLI potrebbe richiedere alcuni secondi per creare l'endpoint.
esegui il deployment del modello nell'endpoint
Quando l'endpoint è pronto, esegui il deployment del modello sull'endpoint.
ENDPOINT_ID=$(gcloud ai endpoints list \
--region=LOCATION \
--filter=display_name=ENDPOINT_NAME \
--format="value(name)")
MODEL_ID=$(gcloud ai models list \
--region=LOCATION \
--filter=display_name=DEPLOYED_MODEL_NAME \
--format="value(name)")
gcloud ai endpoints deploy-model $ENDPOINT_ID \
--region=LOCATION \
--model=$MODEL_ID \
--display-name=DEPLOYED_MODEL_NAME \
--machine-type=ct5lp-hightpu-4t \
--traffic-split=0=100
Sostituisci quanto segue:
- LOCATION_ID: la regione in cui utilizzi Vertex AI.
- ENDPOINT_NAME: il nome visualizzato dell'endpoint.
-
DEPLOYED_MODEL_NAME: un nome per
DeployedModel
. Puoi utilizzare anche il nome visualizzato diModel
perDeployedModel
.
Puoi eseguire il deployment di Gemma 2B
su una macchina ct5lp-hightpu-1t più piccola. In tal caso, devi specificare --platform_topology=1x1
durante il caricamento del modello.
Lo strumento Google Cloud CLI potrebbe richiedere alcuni minuti per eseguire il deployment del modello nell'endpoint. Una volta che il deployment del modello è stato eseguito correttamente, questo comando stampa il seguente output:
Deployed a model to the endpoint xxxxx. Id of the deployed model: xxxxx.
Generare previsioni online dal modello di cui è stato eseguito il deployment
Per richiamare il modello tramite l'endpoint di previsione Vertex AI, formatta la richiesta di previsione utilizzando un oggetto JSON standard di Inference Request .
Nell'esempio seguente viene utilizzato il comando gcloud ai endpoints predict
:
ENDPOINT_ID=$(gcloud ai endpoints list \
--region=LOCATION \
--filter=display_name=ENDPOINT_NAME \
--format="value(name)")
gcloud ai endpoints predict $ENDPOINT_ID \
--region=LOCATION \
--http-headers=Content-Type=application/json \
--json-request instances.json
Sostituisci quanto segue:
- LOCATION_ID: la regione in cui utilizzi Vertex AI.
- ENDPOINT_NAME: il nome visualizzato dell'endpoint.
- instances.json ha il seguente formato:
{"instances": [{"text_batch": "<your prompt>"},{...}]}
esegui la pulizia
Per evitare di incorrere in ulteriori addebiti di Vertex AI e di addebiti di Artifact Registry, elimina le risorse Google Cloud che hai creato durante questo tutorial:
Per annullare il deployment del modello dall'endpoint ed eliminare l'endpoint, esegui questo comando nella shell:
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
Sostituisci LOCATION con la regione in cui hai creato il modello nella sezione precedente.
Per eliminare il modello, esegui questo comando nella shell:
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
Sostituisci LOCATION con la regione in cui hai creato il modello nella sezione precedente.
Per eliminare il repository Artifact Registry e l'immagine container al suo interno, esegui questo comando nella tua shell:
gcloud artifacts repositories delete saxml \ --location=LOCATION \ --quiet
Sostituisci LOCATION con la regione in cui hai creato il repository Artifact Registry in una sezione precedente.
Limitazioni
- Su Vertex AI Prediction le Cloud TPU sono supportate solo in
us-west1
. Per ulteriori informazioni, consulta le località.
Passaggi successivi
- Scopri come eseguire il deployment di altri modelli Saxml, come Llama2 e GPT-J.