Questa guida mostra come pubblicare un modello linguistico di grandi dimensioni (LLM) Gemma open models utilizzando le Tensor Processing Unit (TPU) su Gemini Enterprise Agent Platform con Saxml. In questa guida, scarichi i modelli Gemma ottimizzati per le istruzioni con parametri 2B e 7B in Cloud Storage ed esegui il deployment su Gemini Enterprise Agent Platform, che esegue Saxml sulle TPU.
Sfondo
Servendo Gemma utilizzando le TPU su Gemini Enterprise Agent Platform con Saxml. Puoi usufruire di una soluzione di AI gestita che si occupa dell'infrastruttura di basso livello e offre un modo conveniente per l'hosting di LLM. Questa sezione descrive le tecnologie chiave utilizzate in questo tutorial.
Gemma
Gemma è un insieme di modelli di intelligenza artificiale (AI) generativa, leggeri e disponibili pubblicamente, rilasciati con una licenza aperta. Questi modelli di AI sono disponibili per l'esecuzione in applicazioni, hardware, dispositivi mobili o servizi ospitati. 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. Ai fini di questo tutorial, spiegheremo come pubblicare Gemma su TPU più convenienti per Saxml. La configurazione delle GPU è simile. Saxml offre script per creare container per Gemini Enterprise Agent Platform che utilizzeremo in questo tutorial.
TPU
Le TPU sono circuiti integrati specifici per le applicazioni (ASIC) sviluppati da Google e utilizzati per accelerare i framework di elaborazione dei dati come TensorFlow, PyTorch e JAX.
Questo tutorial mostra i modelli Gemma 2B e Gemma 7B. Gemini Enterprise Agent Platform ospita questi modelli nei seguenti pool di nodi TPU v5e a host singolo:
- Gemma 2B: ospitato in un pool di nodi TPU v5e con topologia
1x1che 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
2x2che rappresenta quattro chip TPU. Il tipo di macchina per i nodi èct5lp-hightpu-4t.
Prima di iniziare
-
In the Cloud de Confiance console, on the project selector page, select or create a Cloud de Confiance project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Cloud de Confiance project.
Enable the Agent Platform API, if it is not already enabled.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.-
Nella console Cloud de Confiance , attiva Cloud Shell.
Nella parte inferiore della console Cloud de Confiance viene avviata una sessione di Cloud Shell e viene visualizzato un prompt della riga di comando. Cloud Shell è un ambiente shell con Google Cloud CLI già installata e con valori già impostati per il progetto corrente. L'inizializzazione della sessione può richiedere alcuni secondi.
Questo tutorial presuppone che tu stia utilizzando Cloud Shell per interagire con Cloud de Confiance by S3NS. Se vuoi utilizzare una shell diversa da Cloud Shell, esegui la seguente configurazione aggiuntiva:
-
Installa Google Cloud CLI.
-
Configura gcloud CLI per utilizzare la tua identità federata.
Per saperne di più, consulta Accedi a gcloud CLI con la tua identità federata.
-
Per inizializzare gcloud CLI, esegui questo comando:
gcloud init - Assicurati di disporre di una quota sufficiente per i chip TPU v5e per
Gemini Enterprise Agent Platform. Per impostazione predefinita, questa quota è 0.
Per una topologia
1x1, deve essere 1. Per2x2, deve essere 4. Per eseguire entrambe le topologie, deve essere 5. - Crea un account Kaggle, se non ne hai già uno.
Ottenere l'accesso al modello
Tieni presente che Cloud Shell potrebbe non disporre di risorse sufficienti per scaricare i pesi del modello. In questo caso, puoi creare un'istanza di Gemini Enterprise Agent Platform Workbench per eseguire questa attività.
Per accedere ai modelli Gemma per il deployment su Gemini Enterprise Agent Platform, devi accedere alla piattaforma Kaggle, firmare il contratto di consenso alla licenza e ottenere un token API Kaggle. In questo tutorial utilizzi un secret Kubernetes per le credenziali Kaggle.
Firma il contratto di consenso alla licenza
Per utilizzare Gemma devi firmare l'accordo sul consenso. Segui queste istruzioni:
- Accedi alla pagina del consenso del modello su Kaggle.com.
- Accedi a Kaggle se non l'hai ancora fatto.
- Fai clic su Richiedi l'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, devi disporre di un token API di Kaggle.
Per generare un nuovo token se non ne hai già uno:
- Nel browser, vai alle impostazioni di Kaggle.
Nella sezione API, fai clic su Crea nuovo token.
Viene scaricato un file denominato
kaggle.json.
Carica il token di accesso su Cloud Shell
In Cloud Shell, puoi caricare il token API Kaggle nel tuo progetto Cloud de Confiance by S3NS:
- In Cloud Shell, fai clic su Altro > Carica.
- Seleziona File e fai clic su Scegli file.
- Apri il file
kaggle.json. - Fai clic su Carica.
Crea il bucket Cloud Storage
Crea un 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 il 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
gcloud storage cp /data/gemma_2b-it/* gs://CHECKPOINTS_BUCKET_NAME/gemma_2b-it/ --recursive
# 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
gcloud storage cp /data/gemma_7b-it/* gs://CHECKPOINTS_BUCKET_NAME/gemma_7b-it/ --recursive
Deployment del modello
Caricamento di un modello
Per caricare una risorsa Model che utilizza il tuo container Saxml, esegui il seguente gcloud ai models upload
comando:
Gemma 2B-it
gcloud ai models upload \
--region=LOCATION \
--display-name=DEPLOYED_MODEL_NAME \
--container-image-uri=us-docker.pkg.dev/vertex-ai/prediction/sax-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=us-docker.pkg.dev/vertex-ai/prediction/sax-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 Cloud de Confiance progetto
- LOCATION_ID: la regione in cui utilizzi Agent Platform. Tieni presente che le TPU sono disponibili solo in us-west1.
-
DEPLOYED_MODEL_NAME: un nome per
DeployedModel. Puoi utilizzare il nome visualizzato diModelanche perDeployedModel.
Creazione di un endpoint
Devi eseguire il deployment del modello in un endpoint prima di poterlo usare per fornire
inferenze online. Se esegui il deployment di un modello in un endpoint esistente,
puoi saltare questo passaggio. Il seguente esempio utilizza 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 Agent Platform.
- ENDPOINT_NAME: il nome visualizzato per l'endpoint.
Lo strumento Google Cloud CLI potrebbe richiedere alcuni secondi per creare l'endpoint.
Esegui il deployment del modello sull'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 Agent Platform.
- ENDPOINT_NAME: il nome visualizzato per l'endpoint.
-
DEPLOYED_MODEL_NAME: un nome per
DeployedModel. Puoi utilizzare il nome visualizzato diModelanche perDeployedModel.
Gemma 2B può essere implementato su una macchina ct5lp-hightpu-1t più piccola, nel qual caso
devi specificare --platform_topology=1x1 durante il caricamento del modello.
Lo strumento Google Cloud CLI potrebbe richiedere alcuni minuti per il deployment del modello all'endpoint. Quando il modello viene implementato correttamente, questo comando stampa il seguente output:
Deployed a model to the endpoint xxxxx. Id of the deployed model: xxxxx.
Ottenere inferenze online dal modello di cui è stato eseguito il deployment
Per richiamare il modello tramite l'endpoint Gemini Enterprise Agent Platform, formatta la richiesta di inferenza utilizzando un oggetto JSON di richiesta di inferenza standard .
Il seguente esempio utilizza 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 Agent Platform.
- ENDPOINT_NAME: il nome visualizzato per l'endpoint.
- instances.json ha il seguente formato:
{"instances": [{"text_batch": "<your prompt>"},{...}]}
Pulizia
Per evitare di incorrere in ulteriori costi di Gemini Enterprise Agent Platform e costi di Artifact Registry, elimina le risorse Cloud de Confiance 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 \ --quietSostituisci LOCATION con la regione in cui hai creato il modello in una 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 \ --quietSostituisci LOCATION con la regione in cui hai creato il modello in una sezione precedente.
Limitazioni
- Su Gemini Enterprise Agent Platform le TPU Cloud sono supportate solo in
us-west1. Per saperne di più, consulta le località.
Passaggi successivi
- Scopri come eseguire il deployment di altri modelli Saxml come Llama2 e GPT-J.