1. Introduction
Présentation
Cloud Run est récemment devenu compatible avec les GPU. Elle est disponible en version Preview publique sur liste d'attente. Si vous souhaitez essayer cette fonctionnalité, remplissez ce formulaire pour rejoindre la liste d'attente. Cloud Run est une plate-forme de conteneurs sur Google Cloud qui permet d'exécuter facilement votre code dans un conteneur, sans avoir à gérer de cluster.
Aujourd'hui, nous proposons des GPU Nvidia L4 avec 24 Go de VRAM. Il y a un GPU par instance Cloud Run, et l'autoscaling Cloud Run s'applique toujours. Cela inclut le scaling horizontal jusqu'à cinq instances (avec possibilité d'augmentation du quota), ainsi que le scaling à la baisse jusqu'à zéro instance en l'absence de requêtes.
Les GPU peuvent, par exemple, être utilisés pour exécuter vos propres grands modèles de langage (LLM) ouverts. Ce tutoriel vous explique comment déployer un service qui exécute un LLM.
Dans cet atelier de programmation, vous allez déployer un service multiconteneur qui utilise Open WebUI comme conteneur d'entrée de frontend et Ollama dans un sidecar pour diffuser un modèle Gemma 2 2B stocké dans un bucket Google Cloud Storage.
Points abordés
- Créer un service multiconteneur dans Cloud Run
- Déployer Ollama en tant que side-car pour diffuser un modèle Gemma 2 2B
- Déployer Open WebUI en tant que conteneur d'entrée de frontend
2. Définir des variables d'environnement et activer les API
Mettre à niveau gcloud CLI
Vous devez d'abord installer une version récente de gcloud CLI. Vous pouvez mettre à jour la CLI en exécutant la commande suivante :
gcloud components update
Configurer des variables d'environnement
Vous pouvez définir des variables d'environnement qui seront utilisées tout au long de cet atelier de programmation.
PROJECT_ID=<YOUR_PROJECT_ID> REGION=us-central1 gcloud config set project $PROJECT_ID
Activer les API
Avant de pouvoir commencer à utiliser cet atelier de programmation, vous devez activer plusieurs API. Cet atelier de programmation nécessite l'utilisation des API suivantes. Vous pouvez activer ces API en exécutant la commande suivante :
gcloud services enable run.googleapis.com \
cloudbuild.googleapis.com \
storage.googleapis.com \
artifactregistry.googleapis.com
Créez un répertoire pour cet atelier de programmation.
mkdir ollama-sidecar-codelab cd ollama-sidecar-codelab
3. Créer un bucket GCS pour stocker le modèle Gemma 2 2B
Commencez par installer Ollama pour télécharger le modèle. Le modèle sera téléchargé dans /home/$USER/.ollama/models.
curl -fsSL https://ollama.com/install.sh | sh
Exécutez maintenant Ollama en saisissant
ollama serve
Ollama commence à écouter sur le port 11434.
Ouvrez une deuxième fenêtre de terminal pour extraire le modèle Gemma 2 2B vers
ollama pull gemma2:2b
(Facultatif) Vous pouvez interagir avec Gemma depuis la ligne de commande en exécutant
ollama run gemma2:2b
Lorsque vous avez terminé de discuter avec Gemma, vous pouvez quitter en saisissant
/bye
4. Créer un bucket de stockage
Maintenant que le modèle est téléchargé, vous pouvez le déplacer vers votre bucket GCS.
Commencez par créer le bucket.
gcloud storage buckets create gs://$PROJECT_ID-gemma2-2b-codelab
Déplacez maintenant le dossier des modèles vers GCS.
gsutil cp -r /home/$USER/.ollama/models gs://$PROJECT_ID-gemma2-2b-codelab
5. Créer l'image Ollama
Créez un fichier Dockerfile avec le contenu suivant :
FROM --platform=linux/amd64 ollama/ollama # Listen on all interfaces, port 11434 ENV OLLAMA_HOST 0.0.0.0:11434 # 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
Créez un dépôt Artifact Registry pour stocker les images de votre service.
gcloud artifacts repositories create ollama-sidecar-codelab-repo --repository-format=docker \
--location=us-central1 --description="Ollama + OpenWebUI website demo" \
--project=$PROJECT_ID
Créer l'image side-car Ollama
gcloud builds submit \
--tag us-central1-docker.pkg.dev/$PROJECT_ID/ollama-sidecar-codelab-repo/ollama-gemma-2b \
--machine-type e2-highcpu-32
6. Créer l'image de l'interface Open WebUI
Dans cette section, vous allez créer le conteneur d'entrée frontend à l'aide d'Open WebUI.
Utilisez Docker pour extraire l'image Open WebUI.
docker pull ghcr.io/open-webui/open-webui:main
Configurez ensuite Docker pour qu'il utilise vos identifiants Google Cloud afin de s'authentifier auprès d'Artifact Registry. Cela vous permettra d'utiliser Docker pour transférer une image vers un dépôt Artifact Registry.
gcloud auth configure-docker us-central1-docker.pkg.dev
Ajoutez un tag à votre image, puis transférez-la vers Artifact Registry.
docker tag ghcr.io/open-webui/open-webui:main us-central1-docker.pkg.dev/$PROJECT_ID/ollama-sidecar-codelab-repo/openwebui docker push us-central1-docker.pkg.dev/$PROJECT_ID/ollama-sidecar-codelab-repo/openwebui
7. Déployer le service multiconteneur sur Cloud Run
Utiliser un fichier YAML pour déployer le service multiconteneurs
Créez un fichier service.yaml avec le contenu suivant.
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: ollama-sidecar-codelab
labels:
cloud.googleapis.com/location: us-central1
spec:
template:
metadata:
annotations:
autoscaling.knative.dev/maxScale: '5'
run.googleapis.com/cpu-throttling: 'false'
run.googleapis.com/startup-cpu-boost: 'true'
run.googleapis.com/container-dependencies: '{"openwebui":["ollama-sidecar"]}'
spec:
containerConcurrency: 80
timeoutSeconds: 300
containers:
- name: openwebui
image: us-central1-docker.pkg.dev/YOUR_PROJECT_ID/ollama-sidecar-codelab/openwebui
ports:
- name: http1
containerPort: 8080
env:
- name: OLLAMA_BASE_URL
value: http://localhost:11434
- name: WEBUI_AUTH
value: 'false'
resources:
limits:
memory: 1Gi
cpu: 2000m
volumeMounts:
- name: in-memory-1
mountPath: /app/backend/data
startupProbe:
timeoutSeconds: 240
periodSeconds: 240
failureThreshold: 1
tcpSocket:
port: 8080
- name: ollama-sidecar
image: us-central1-docker.pkg.dev/YOUR_PROJECT_ID/ollama-sidecar-codelab/ollama-gemma-2b
env:
- name: OLLAMA_MODELS
value: /root/.ollama/models
resources:
limits:
cpu: '6'
nvidia.com/gpu: '1'
memory: 16Gi
volumeMounts:
- name: gcs-1
mountPath: /root/.ollama
startupProbe:
timeoutSeconds: 1
periodSeconds: 10
failureThreshold: 3
tcpSocket:
port: 11434
volumes:
- name: gcs-1
csi:
driver: gcsfuse.run.googleapis.com
volumeAttributes:
bucketName: YOUR_PROJECT_ID-gemma2-2b-codelab
- name: in-memory-1
emptyDir:
medium: Memory
sizeLimit: 10Gi
nodeSelector:
run.googleapis.com/accelerator: nvidia-l4
Mettez à jour service.yaml pour remplacer PROJECT_ID par l'ID de votre projet :
sed -i "s/YOUR_PROJECT_ID/${PROJECT_ID}/g" service.yaml
Déployez sur Cloud Run à l'aide de la commande suivante.
gcloud beta run services replace service.yaml
Tester le service Cloud Run
Ouvrez maintenant l'URL du service dans votre navigateur Web.
Une fois l'interface utilisateur chargée, sous Sélectionner un modèle, choisissez Gemma 2 2B.
Posez maintenant une question à Gemma, par exemple "Pourquoi le ciel est-il bleu ?".
8. Félicitations !
Bravo ! Vous avez terminé cet atelier de programmation.
Nous vous recommandons de consulter la documentation sur Cloud Run Functions.
Points abordés
- Créer un service multiconteneur dans Cloud Run
- Déployer Ollama en tant que side-car pour diffuser un modèle Gemma 2 2B
- Déployer Open WebUI en tant que conteneur d'entrée de frontend
9. Effectuer un nettoyage
Pour éviter des frais involontaires (par exemple, si les services Cloud Run sont invoqués par inadvertance plus de fois que votre quota mensuel d'invocations Cloud Run dans le niveau sans frais), vous pouvez supprimer Cloud Run ou le projet que vous avez créé à l'étape 2.
Pour supprimer la fonction Cloud Run, accédez à la console Cloud Run à l'adresse https://console.cloud.google.com/run, puis supprimez le service ollama-sidecar-codelab.
Si vous choisissez de supprimer l'intégralité du projet, vous pouvez accéder à https://console.cloud.google.com/cloud-resource-manager, sélectionner le projet que vous avez créé à l'étape 2, puis choisir "Supprimer". Si vous supprimez le projet, vous devrez changer de projet dans votre SDK Cloud. Vous pouvez afficher la liste de tous les projets disponibles en exécutant gcloud projects list.