Obiettivi
Questa guida mostra come eseguire l'inferenza LLM su GPU Cloud Run con Gemma 3 e Ollama e ha i seguenti obiettivi:
- Eseguire il deployment di Ollama con il modello Gemma 3 su un servizio Cloud Run abilitato per la GPU.
- Inviare prompt al servizio Ollama sul relativo endpoint privato.
Per scoprire un modo alternativo per eseguire il deployment dei modelli aperti Gemma 3 su Cloud Run utilizzando un container predefinito, consulta Eseguire i modelli Gemma 3 su Cloud Run.
Costi
In questo documento vengono utilizzati i seguenti componenti fatturabili di Google Cloud:
Per generare una stima dei costi in base all'utilizzo previsto,
utilizza il calcolatore prezzi.
Prima di iniziare
- Accedi al tuo Google Cloud account. 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 senza costi per l'esecuzione, il test e il deployment dei workload.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud 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 Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud 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 Google Cloud project.
Abilita le API Artifact Registry, Cloud Build, Cloud Run e Cloud Storage.
Ruoli richiesti per abilitare le API
Per abilitare le API, devi disporre del ruolo IAM Amministratore Service Usage (
roles/serviceusage.serviceUsageAdmin), che contiene l'autorizzazioneserviceusage.services.enable. Scopri come concedere i ruoli.- Installa e inizializza gcloud CLI.
- Per completare questo tutorial, richiedi la quota
Total Nvidia L4 GPU allocation, per project per regionnell'API Cloud Run Admin nella pagina Quote e limiti di sistema.
Ruoli obbligatori
Per ottenere le autorizzazioni necessarie per completare il tutorial, chiedi all'amministratore di concederti i seguenti ruoli IAM nel progetto:
-
Amministratore Artifact Registry (
roles/artifactregistry.admin) -
Editor Cloud Build (
roles/cloudbuild.builds.editor) -
Amministratore Cloud Run (
roles/run.admin) -
Project IAM Admin (
roles/resourcemanager.projectIamAdmin) -
Utente Service Account (
roles/iam.serviceAccountUser) -
Consumer Service Usage (
roles/serviceusage.serviceUsageConsumer) -
Storage Admin (
roles/storage.admin)
Per saperne di più sulla concessione dei ruoli, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.
Potresti anche riuscire a ottenere le autorizzazioni richieste tramite i ruoli personalizzati o altri ruoli predefiniti.
Concedi i ruoli
Console
-
Nella Google Cloud console vai alla pagina IAM.
Vai a IAM - Seleziona il progetto.
- Fai clic su Concedi l'accesso.
-
Nel campo Nuove entità, inserisci il tuo identificatore dell'utente. In genere si tratta dell'indirizzo email utilizzato per eseguire il deployment del servizio Cloud Run.
- Nell'elenco Seleziona un ruolo, seleziona un ruolo.
- Per concedere altri ruoli, fai clic su Aggiungi un altro ruolo e aggiungi ogni ruolo aggiuntivo.
- Fai clic su Salva.
gcloud
Per concedere i ruoli IAM richiesti al tuo account nel tuo progetto:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=PRINCIPAL \ --role=ROLE
Sostituisci:
- PROJECT_NUMBER con il tuo Google Cloud progetto numero.
- PROJECT_ID con l'ID del tuo Google Cloud progetto.
- PRINCIPAL con l'account a cui stai aggiungendo l' associazione. In genere si tratta dell'indirizzo email che è utilizzato per eseguire il deployment del servizio Cloud Run.
- ROLE con il ruolo che stai aggiungendo all'account del deployer.
Configura gcloud
Per configurare Google Cloud CLI per il tuo servizio Cloud Run:
Imposta il progetto predefinito:
gcloud config set project PROJECT_IDFai clic sull'icona per sostituire la variabile PROJECT_ID con il nome del progetto che hai creato per questo tutorial. In questo modo, tutti gli elenchi in questa pagina che fanno riferimento a PROJECT_ID avranno già il valore corretto compilato.
Configura Google Cloud CLI in modo da utilizzare la regione
europe-west1per i comandi Cloud Run.gcloud config set run/region europe-west1
Utilizza Docker per creare un'immagine container con Ollama e Gemma
Crea una directory per il servizio Ollama e cambia la directory di lavoro in questa nuova directory:
mkdir ollama-backend cd ollama-backendCrea un file
Dockerfilecon i seguenti contenuti:FROM ollama/ollama:latest # Listen on all interfaces, port 8080 ENV OLLAMA_HOST 0.0.0.0:8080 # Store model weight files in /models ENV OLLAMA_MODELS /models # Reduce logging verbosity ENV OLLAMA_DEBUG false # Never unload model weights from the GPU ENV OLLAMA_KEEP_ALIVE -1 # Store the model weights in the container image ENV MODEL gemma3:4b RUN ollama serve & sleep 5 && ollama pull $MODEL # Start Ollama ENTRYPOINT ["ollama", "serve"]
Archivia i pesi del modello nell'immagine container per avvii più rapidi delle istanze
Google consiglia di archiviare i pesi del modello per Gemma 3 (4B) e i modelli di dimensioni simili direttamente nell'immagine container.
I pesi del modello sono i parametri numerici che definiscono il comportamento di un LLM. Ollama deve leggere completamente questi file e caricare i pesi nella memoria GPU (VRAM) durante l'avvio dell'istanza container, prima di poter iniziare a gestire le richieste di inferenza.
Su Cloud Run, un avvio rapido dell'istanza container è importante per ridurre al minimo la latenza delle richieste. Se l'istanza container ha un tempo di avvio lento, il servizio impiega più tempo per scalare da zero a un'istanza e ha bisogno di più tempo per eseguire lo scale out durante un picco di traffico.
Per garantire un avvio rapido, archivia i file del modello nell'immagine container stessa. Questa operazione è più rapida e affidabile rispetto al download dei file da una località remota durante l'avvio. Lo spazio di archiviazione interno delle immagini container di Cloud Run è ottimizzato per la gestione dei picchi di traffico, consentendo di configurare rapidamente il file system del container all'avvio di un'istanza.
Tieni presente che i pesi del modello per Gemma 3 (4B) occupano 8 GB di spazio di archiviazione. I modelli più grandi hanno file di pesi del modello più grandi e potrebbe essere poco pratico archiviarli nell'immagine container. Per una panoramica dei compromessi, consulta Best practice: inferenza AI su Cloud Run con GPU.
Crea ed esegui il deployment del servizio Ollama per l'inferenza LLM
Crea ed esegui il deployment del servizio su Cloud Run:
gcloud run deploy ollama-gemma \
--source . \
--concurrency 4 \
--cpu 8 \
--set-env-vars OLLAMA_NUM_PARALLEL=4 \
--gpu 1 \
--gpu-type nvidia-l4 \
--max-instances 1 \
--memory 32Gi \
--no-allow-unauthenticated \
--no-cpu-throttling \
--no-gpu-zonal-redundancy \
--timeout=600Tieni presente i seguenti flag importanti in questo comando:
--concurrency 4è impostato in modo che corrisponda al valore della variabile di ambienteOLLAMA_NUM_PARALLEL.--gpu 1con--gpu-type nvidia-l4assegna 1 GPU NVIDIA L4 a ogni istanza Cloud Run nel servizio.--max-instances 1specifica il numero massimo di istanze a cui eseguire lo scale up. Deve essere uguale o inferiore alla quota di GPU NVIDIA L4 (Total Nvidia L4 GPU allocation, per project per region) del tuo progetto.--no-allow-unauthenticatedlimita l'accesso non autenticato al servizio. Mantenendo privato il servizio, puoi fare affidamento sull'autenticazione Identity and Access Management (IAM) integrata di Cloud Run per la comunicazione da servizio a servizio. Consulta Gestire l'accesso utilizzando IAM.--no-cpu-throttlingè necessario per abilitare la GPU.--no-gpu-zonal-redundancyimposta le opzioni di ridondanza a livello di zona in base ai requisiti di failover a livello di zona e alla quota disponibile. Per i dettagli, consulta Opzioni di ridondanza a livello di zona della GPU.
Impostazioni di concorrenza per prestazioni ottimali
Questa sezione fornisce il contesto delle impostazioni di concorrenza consigliate. Per una
latenza delle richieste ottimale, assicurati che l'impostazione --concurrency sia uguale alla variabile di ambiente
OLLAMA_NUM_PARALLEL di Ollama.
OLLAMA_NUM_PARALLELdetermina il numero di slot di richiesta disponibili per ogni modello per gestire le richieste di inferenza in parallelo.--concurrencydetermina il numero di richieste che Cloud Run invia contemporaneamente a un'istanza Ollama.
Se --concurrency supera OLLAMA_NUM_PARALLEL, Cloud Run può inviare a un modello in Ollama più richieste di quelle per cui ha slot di richiesta disponibili.
Ciò comporta la creazione di code di richieste all'interno di Ollama, aumentando la latenza delle richieste in coda. Comporta anche una scalabilità automatica meno reattiva, poiché le richieste in coda non attivano lo scale out di Cloud Run e l'avvio di nuove istanze.
Ollama supporta anche la pubblicazione di più modelli da una GPU. Per evitare completamente la creazione di code di richieste nell'istanza Ollama, devi comunque impostare --concurrency in modo che corrisponda a OLLAMA_NUM_PARALLEL.
È importante notare che l'aumento di OLLAMA_NUM_PARALLEL comporta anche un aumento della durata delle richieste in parallelo.
Ottimizza l'utilizzo della GPU
Per un utilizzo ottimale della GPU, aumenta --concurrency, mantenendolo entro
il doppio del valore di OLLAMA_NUM_PARALLEL. Sebbene ciò comporti la creazione di code di richieste in Ollama, può contribuire a migliorare l'utilizzo: le istanze Ollama possono elaborare immediatamente le richieste dalla coda e le code aiutano ad assorbire i picchi di traffico.
Testa il servizio Ollama di cui hai eseguito il deployment con curl
Ora che hai eseguito il deployment del servizio Ollama, puoi inviargli richieste. Tuttavia, se invii una richiesta direttamente, Cloud Run risponde con HTTP 401 Unauthorized.
Questo è intenzionale, perché un'API di inferenza LLM è destinata ad essere chiamata da altri servizi, ad esempio un'applicazione frontend. Per ulteriori informazioni sull'autenticazione da servizio a servizio
su Cloud Run, consulta Autenticare da servizio a servizio.
Per inviare richieste al servizio Ollama, aggiungi un'intestazione con un token OIDC valido alle richieste, ad esempio utilizzando il proxy per sviluppatoridi Cloud Run:
Avvia il proxy e, quando ti viene chiesto di installare il componente
cloud-run-proxy, scegliY:gcloud run services proxy ollama-gemma --port=9090Invia una richiesta in una scheda del terminale separata, lasciando in esecuzione il proxy. Tieni presente che il proxy viene eseguito su
localhost:9090:curl http://localhost:9090/api/generate -d '{ "model": "gemma3:4b", "prompt": "Why is the sky blue?" }'Questo comando dovrebbe fornire un output di streaming simile al seguente:
{"model":"gemma3:4b","created_at":"2025-03-10T03:02:18.641492408Z","response":"That","done":false} {"model":"gemma3:4b","created_at":"2025-03-10T03:02:18.687529153Z","response":"'","done":false} {"model":"gemma3:4b","created_at":"2025-03-10T03:02:18.753284927Z","response":"s","done":false} {"model":"gemma3:4b","created_at":"2025-03-10T03:02:18.812957381Z","response":" a","done":false} {"model":"gemma3:4b","created_at":"2025-03-10T03:02:18.889102649Z","response":" fantastic","done":false} {"model":"gemma3:4b","created_at":"2025-03-10T03:02:18.925748116Z","response":",","done":false} {"model":"gemma3:4b","created_at":"2025-03-10T03:02:18.958391572Z","response":" decept","done":false} {"model":"gemma3:4b","created_at":"2025-03-10T03:02:18.971035028Z","response":"ively","done":false} {"model":"gemma3:4b","created_at":"2025-03-10T03:02:18.989678484Z","response":" tricky","done":false} {"model":"gemma3:4b","created_at":"2025-03-10T03:02:18.999321940Z","response":" question","done":false} ...
Libera spazio
Per evitare addebiti aggiuntivi al tuo Google Cloud account, elimina tutte le risorse di cui hai eseguito il deployment con questo tutorial.
Elimina il progetto
Se hai creato un nuovo progetto per questo tutorial, eliminalo. Se hai utilizzato un progetto esistente e devi conservarlo senza le modifiche che hai aggiunto in questo tutorial, elimina le risorse che hai creato per il tutorial.
Il modo più semplice per eliminare la fatturazione è eliminare il progetto che hai creato per il tutorial.
Per eliminare il progetto:
- Nella Google Cloud console, vai alla pagina Gestisci risorse.
- Nell'elenco dei progetti, seleziona il progetto che vuoi eliminare, quindi fai clic su Elimina.
- Nella finestra di dialogo, digita l'ID progetto e fai clic su Chiudi per eliminare il progetto.
Elimina le risorse del tutorial
Elimina il servizio Cloud Run di cui hai eseguito il deployment in questo tutorial. I servizi Cloud Run non comportano costi finché non ricevono richieste.
Per eliminare il servizio Cloud Run, esegui questo comando:
gcloud run services delete SERVICE-NAME
Sostituisci SERVICE-NAME con il nome del tuo servizio.
Puoi eliminare i servizi Cloud Run anche dalla Google Cloud console.
Rimuovi la configurazione della regione predefinita di
gcloudche hai aggiunto durante la configurazione del tutorial:gcloud config unset run/regionRimuovi la configurazione del progetto:
gcloud config unset project