1. Introduzione
Panoramica
Cloud Run ha recentemente aggiunto il supporto delle GPU. È disponibile come anteprima pubblica in lista d'attesa. Se ti interessa provare la funzionalità, compila questo modulo per iscriverti alla lista d'attesa. Cloud Run è una piattaforma di container su Google Cloud che semplifica l'esecuzione del codice in un container, senza la necessità di gestire un cluster.
Attualmente, le GPU disponibili sono GPU Nvidia L4 con 24 GB di vRAM. È presente una sola GPU per istanza Cloud Run e viene comunque applicata la scalabilità automatica di Cloud Run. Ciò include lo scale out fino a 5 istanze (con aumento della quota disponibile) e lo scale down a zero delle istanze quando non ci sono richieste.
Un caso d'uso delle GPU è l'esecuzione di modelli linguistici di grandi dimensioni (LLM) aperti. Questo tutorial illustra come eseguire il deployment di un servizio che esegue un LLM.
Il servizio è un servizio di backend che esegue vLLM, un motore di inferenza per i sistemi di produzione. Questo codelab utilizza Gemma 2 di Google con un modello ottimizzato per l'istruzione dei parametri per 2 miliardi di parametri.
Cosa imparerai a fare
- Come utilizzare le GPU su Cloud Run.
- Come utilizzare Hugging Face per recuperare un modello.
- Come eseguire il deployment del modello ottimizzato per le istruzioni Gemma 2 2b di Google su Cloud Run utilizzando vLLM come motore di inferenza.
- Come richiamare il servizio di backend per completare la frase.
2. Configurazione e requisiti
Prerequisiti
- Hai eseguito l'accesso alla console Cloud.
- Hai già eseguito il deployment di un servizio Cloud Run. Ad esempio, per iniziare, puoi seguire la guida rapida al deployment di un servizio web dal codice sorgente.
- Hai un account Hugging Face e hai accettato la licenza Gemma 2 2b all'indirizzo https://huggingface.co/google/gemma-2-2b-it; altrimenti non potrai scaricarlo.
- Hai creato un token di accesso che ha accesso al modello google/gemma-2-2b-it.
Attiva Cloud Shell
- Dalla console Cloud, fai clic su Attiva Cloud Shell .
Se è la prima volta che avvii Cloud Shell, ti verrà mostrata una schermata intermedia che descrive di cosa si tratta. Se ti è stata presentata una schermata intermedia, fai clic su Continua.
Il provisioning e la connessione a Cloud Shell dovrebbero richiedere solo qualche istante.
Questa macchina virtuale viene caricata con tutti gli strumenti di sviluppo necessari. Offre una home directory permanente da 5 GB e viene eseguita in Google Cloud, migliorando notevolmente le prestazioni di rete e l'autenticazione. Gran parte, se non tutto, del lavoro in questo codelab può essere svolto con un browser.
Una volta stabilita la connessione a Cloud Shell, dovresti vedere che hai eseguito l'autenticazione e che il progetto è impostato sul tuo ID progetto.
- Esegui questo comando in Cloud Shell per verificare che l'account sia autenticato:
gcloud auth list
Output comando
Credentialed Accounts ACTIVE ACCOUNT * <my_account>@<my_domain.com> To set the active account, run: $ gcloud config set account `ACCOUNT`
- Esegui questo comando in Cloud Shell per confermare che il comando gcloud è a conoscenza del tuo progetto:
gcloud config list project
Output comando
[core] project = <PROJECT_ID>
In caso contrario, puoi impostarlo con questo comando:
gcloud config set project <PROJECT_ID>
Output comando
Updated property [core/project].
3. Abilita le API e imposta le variabili di ambiente
Abilita API
Prima di poter iniziare a utilizzare questo codelab, ci sono diverse API che dovrai abilitare. Questo codelab richiede l'utilizzo delle API seguenti. Puoi abilitare queste API eseguendo questo comando:
gcloud services enable run.googleapis.com \ cloudbuild.googleapis.com \ secretmanager.googleapis.com \ artifactregistry.googleapis.com
Configura le variabili di ambiente
Puoi impostare le variabili di ambiente che verranno utilizzate in questo codelab.
HF_TOKEN=<YOUR_HUGGING_FACE_TOKEN> PROJECT_ID=<YOUR_PROJECT_ID> REGION=us-central1 SERVICE_NAME=vllm-gemma-2-2b-it AR_REPO_NAME=vllm-gemma-2-2b-it-repo SERVICE_ACCOUNT=vllm-gemma-2-2b-it SERVICE_ACCOUNT_ADDRESS=$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com
4. Crea un account di servizio
Questo account di servizio viene utilizzato per creare il servizio Cloud Run e accedere a un secret da Secret Manager.
Innanzitutto, crea l'account di servizio eseguendo questo comando:
gcloud iam service-accounts create $SERVICE_ACCOUNT \ --display-name="Cloud Run vllm SA to access secrete manager"
Quindi, concedi il ruolo Utente Vertex AI all'account di servizio.
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:$SERVICE_ACCOUNT_ADDRESS \ --role=roles/secretmanager.secretAccessor
Ora, crea un secret in Secret Manager chiamato HF_TOKEN per il tuo token di accesso a Hugging Face. Cloud Build utilizza l'account di servizio per accedere a questo secret in fase di build per estrarre il modello Gemma 2 (2B) da Hugging Face. Puoi scoprire di più su secret e Cloud Build qui.
printf $HF_TOKEN | gcloud secrets create HF_TOKEN --data-file=-
Concedi all'account di servizio l'accesso al secret HF_TOKEN in Secret Manager.
gcloud secrets add-iam-policy-binding HF_TOKEN \ --member serviceAccount:$SERVICE_ACCOUNT_ADDRESS \ --role='roles/secretmanager.secretAccessor'
5. Crea l'immagine in Artifact Registry
Per prima cosa, crea un repository in Artifact Registry.
gcloud artifacts repositories create $AR_REPO_NAME \ --repository-format docker \ --location us-central1
Poi, crea un elemento Dockerfile
che incorporerà il secret di Secret Manager. Scopri di più sul flag Docker buildx –secrets qui.
FROM vllm/vllm-openai:latest ENV HF_HOME=/model-cache RUN --mount=type=secret,id=HF_TOKEN HF_TOKEN=$(cat /run/secrets/HF_TOKEN) \ huggingface-cli download google/gemma-2-2b-it ENV HF_HUB_OFFLINE=1 ENTRYPOINT python3 -m vllm.entrypoints.openai.api_server \ --port ${PORT:-8000} \ --model ${MODEL_NAME:-google/gemma-2-2b-it} \ ${MAX_MODEL_LEN:+--max-model-len "$MAX_MODEL_LEN"}
Ora crea un file cloudbuild.yaml
steps: - name: 'gcr.io/cloud-builders/docker' id: build entrypoint: 'bash' secretEnv: ['HF_TOKEN'] args: - -c - | SECRET_TOKEN="$$HF_TOKEN" docker buildx build --tag=${_IMAGE} --secret id=HF_TOKEN . availableSecrets: secretManager: - versionName: 'projects/${PROJECT_ID}/secrets/HF_TOKEN/versions/latest' env: 'HF_TOKEN' images: ["${_IMAGE}"] substitutions: _IMAGE: 'us-central1-docker.pkg.dev/${PROJECT_ID}/vllm-gemma-2-2b-it-repo/vllm-gemma-2-2b-it' options: dynamicSubstitutions: true machineType: "E2_HIGHCPU_32"
Infine, invia una build.
gcloud builds submit --config=cloudbuild.yaml
La compilazione può durare circa 8 minuti.
6. Esegui il deployment del servizio
Ora è tutto pronto per eseguire il deployment dell'immagine in Cloud Run.
gcloud beta run deploy $SERVICE_NAME \ --image=us-central1-docker.pkg.dev/$PROJECT_ID/$AR_REPO_NAME/$SERVICE_NAME \ --service-account $SERVICE_ACCOUNT_ADDRESS \ --cpu=8 \ --memory=32Gi \ --gpu=1 --gpu-type=nvidia-l4 \ --region us-central1 \ --no-allow-unauthenticated \ --max-instances 5 \ --no-cpu-throttling
Il deployment può richiedere fino a 5 minuti.
7. Prova il servizio
Una volta eseguito il deployment, puoi utilizzare il servizio di proxy per sviluppatori di Cloud Run, che aggiunge automaticamente un token ID, oppure puoi eseguire il comando curl direttamente per l'URL del servizio.
Utilizzo del servizio di proxy per sviluppatori di Cloud Run
Per utilizzare il servizio di proxy per sviluppatori di Cloud Run, segui questi passaggi:
Innanzitutto, esegui questo comando
gcloud run services proxy $SERVICE_NAME --region us-central1
Quindi, esegui il comando curl
curl -X POST http://localhost:8080/v1/completions \ -H "Content-Type: application/json" \ -d '{ "model": "google/gemma-2-2b-it", "prompt": "Cloud Run is a", "max_tokens": 128, "temperature": 0.90 }'
Utilizzo diretto dell'URL del servizio
Innanzitutto, recupera l'URL del servizio di cui è stato eseguito il deployment.
SERVICE_URL=$(gcloud run services describe $SERVICE_NAME --region $REGION --format 'value(status.url)')
Cura il servizio
curl -X POST $SERVICE_URL/v1/completions \ -H "Authorization: bearer $(gcloud auth print-identity-token)" \ -H "Content-Type: application/json" \ -d '{ "model": "google/gemma-2-2b-it", "prompt": "Cloud Run is a", "max_tokens": 128, "temperature": 0.90 }'
Risultati
Dovresti vedere risultati simili ai seguenti:
{"id":"cmpl-e0e6924d4bfd4d918383c87cba5e25ac","object":"text_completion","created":1723853023,"model":"google/gemma-2-2b","choices":[{"index":0,"text":" serverless compute platform that lets you write your backend code in standard languages, such as Java, Go, PHP and Python.\n\nYou can deploy your function as a REST API that scales on demand and allows you to add additional security features such as HTTPS.\n\nTo write code for an Android app with Cloud Run, you need to use the GraalVM. This is because while Node.js is a more commonly known node-based platform, GraalVM is a virtual machine (VM) to run native code in the Cloud Run environment.\n\nNow you need graal.vm/java-11-jre.jar, the","logprobs":null,"finish_reason":"length","stop_reason":null}],"usage":{"prompt_tokens":5,"total_tokens":133,"completion_tokens":128}}
8. Complimenti!
Complimenti per aver completato il codelab.
Ti consigliamo di consultare la documentazione Cloud Run
Argomenti trattati
- Come utilizzare le GPU su Cloud Run.
- Come utilizzare Hugging Face per recuperare un modello.
- Come eseguire il deployment del modello Gemma 2 (2B) di Google su Cloud Run utilizzando vLLM come motore di inferenza.
- Come richiamare il servizio di backend per completare la frase.
9. Esegui la pulizia
Per evitare addebiti involontari, ad esempio se i servizi Cloud Run vengono inavvertitamente richiamati più volte rispetto all'allocazione mensile dei callout Cloud Run nel livello senza costi, puoi eliminare Cloud Run o eliminare il progetto che hai creato nel passaggio 2.
Per eliminare il servizio Cloud Run, vai alla console Cloud di Cloud Run all'indirizzo https://console.cloud.google.com/run ed elimina il servizio vllm-gemma-2-2b
. Potresti anche voler eliminare l'account di servizio vllm-gemma-2-2b
.
Se scegli di eliminare l'intero progetto, puoi andare all'indirizzo https://console.cloud.google.com/cloud-resource-manager, selezionare il progetto che hai creato nel passaggio 2 e scegliere Elimina. Se elimini il progetto, dovrai modificarli in Cloud SDK. Puoi visualizzare l'elenco di tutti i progetti disponibili eseguendo gcloud projects list
.