1. Introduzione
Panoramica
Cloud Run ha recentemente aggiunto il supporto GPU. È disponibile come anteprima pubblica con lista d'attesa. Se ti interessa provare la funzionalità, compila questo modulo per entrare nella lista d'attesa. Cloud Run è una piattaforma di container su Google Cloud che semplifica l'esecuzione del codice in un container, senza richiedere la gestione di un cluster.
Oggi, le GPU che rendiamo disponibili sono le GPU Nvidia L4 con 24 GB di vRAM. C'è una GPU per istanza Cloud Run e la scalabilità automatica di Cloud Run è ancora applicabile. Ciò include lo scale out fino a 5 istanze (con aumento della quota disponibile), nonché lo scale down fino a zero istanze quando non ci sono richieste.
Un caso d'uso delle GPU è l'esecuzione dei tuoi modelli linguistici di grandi dimensioni (LLM) open source. Questo tutorial spiega 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, un modello con 2 miliardi di parametri ottimizzato per le istruzioni.
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 Gemma 2 2b ottimizzato per le istruzioni 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 a Cloud Console.
- Hai già eseguito il deployment di un servizio Cloud Run. Ad esempio, puoi seguire la guida rapida per il deployment di un servizio web dal codice sorgente per iniziare.
- Hai un account Hugging Face e hai accettato la licenza Gemma 2 2b all'indirizzo https://huggingface.co/google/gemma-2-2b-it; in caso contrario, non potrai scaricare il modello.
- Hai creato un token di accesso che ha accesso al modello google/gemma-2-2b-it.
Attiva Cloud Shell
- Nella console Google Cloud, fai clic su Attiva Cloud Shell
.
Se è la prima volta che avvii Cloud Shell, viene visualizzata una schermata intermedia che ne descrive le funzionalità. Se è stata visualizzata una schermata intermedia, fai clic su Continua.
Bastano pochi istanti per eseguire il provisioning e connettersi a Cloud Shell.
Questa macchina virtuale è 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 e l'autenticazione della rete. Gran parte, se non tutto, il lavoro in questo codelab può essere svolto con un browser.
Una volta eseguita la connessione a Cloud Shell, dovresti vedere che il tuo account è autenticato e 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 verificare che il comando gcloud conosca il 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, devi abilitare diverse API. Questo codelab richiede l'utilizzo delle seguenti API. Puoi abilitare queste API eseguendo il seguente 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 durante 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 service account viene utilizzato per creare il servizio Cloud Run e accedere a un secret da Secret Manager.
Innanzitutto, crea il service account eseguendo questo comando:
gcloud iam service-accounts create $SERVICE_ACCOUNT \ --display-name="Cloud Run vllm SA to access secret manager"
Secondo, concedi il ruolo Utente Vertex AI al service account.
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 Hugging Face. Cloud Build utilizza il service account per accedere a questo secret in fase di build per scaricare il modello Gemma 2 (2B) da Hugging Face. Puoi scoprire di più sui secret e su Cloud Build qui.
printf $HF_TOKEN | gcloud secrets create HF_TOKEN --data-file=-
e concedi al service account Compute predefinito l'accesso al secret HF_TOKEN in Secret Manager durante la creazione dell'immagine.
PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format="value(projectNumber)")
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:$PROJECT_NUMBER-compute@developer.gserviceaccount.com" \
--role="roles/secretmanager.secretAccessor"
5. Crea l'immagine in Artifact Registry
Innanzitutto, crea un repository in Artifact Registry.
gcloud artifacts repositories create $AR_REPO_NAME \ --repository-format docker \ --location us-central1
Successivamente, crea un Dockerfile
che incorpori il secret di Secret Manager. Puoi scoprire 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 build può richiedere circa 8 minuti.
6. Esegui il deployment del servizio
Ora puoi eseguire il deployment dell'immagine in Cloud Run. Il deployment richiederà circa 5 minuti. Dovrai aumentare il ritardo iniziale per il controllo di integrità di alcuni minuti per dare più tempo all'immagine di caricarsi. In caso contrario, riceverai un errore di scadenza superata dal controllo di integrità.
gcloud beta run deploy $SERVICE_NAME \ --image=$REGION-docker.pkg.dev/$PROJECT_ID/$AR_REPO_NAME/$SERVICE_NAME \ --service-account $SERVICE_ACCOUNT_ADDRESS \ --cpu=8 \ --memory=32Gi \ --gpu=1 \ --port=8000 \ --gpu-type=nvidia-l4 \ --region $REGION \ --no-allow-unauthenticated \ --max-instances 3 \ --no-cpu-throttling \ --no-gpu-zonal-redundancy \ --startup-probe tcpSocket.port=8000,initialDelaySeconds=240,failureThreshold=1,timeoutSeconds=240,periodSeconds=240
7. Testare il servizio
Una volta eseguito il deployment, puoi utilizzare il servizio proxy di sviluppo Cloud Run, che aggiunge automaticamente un token ID, oppure eseguire il comando curl sull'URL del servizio direttamente.
Utilizzo del servizio proxy di sviluppo Cloud Run
Per utilizzare il servizio proxy di sviluppo Cloud Run, puoi seguire questi passaggi:
Innanzitutto, esegui questo comando:
gcloud run services proxy $SERVICE_NAME --region us-central1
Successivamente, esegui curl del servizio.
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)')
Esegui il comando curl sul 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!
Congratulazioni 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 richiamati inavvertitamente più volte rispetto all'allocazione mensile di chiamate a Cloud Run nel livello senza costi), puoi eliminare Cloud Run o il progetto che hai creato nel passaggio 2.
Per eliminare il servizio Cloud Run, vai alla console Cloud Run all'indirizzo https://console.cloud.google.com/run ed elimina il servizio vllm-gemma-2-2b
. Potresti anche voler eliminare il service account vllm-gemma-2-2b
.
Se scegli di eliminare l'intero progetto, puoi andare alla pagina 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 cambiarlo in Cloud SDK. Puoi visualizzare l'elenco di tutti i progetti disponibili eseguendo gcloud projects list
.