1. Introduction
Présentation
Cloud Run a récemment ajouté la compatibilité avec les GPU. Elle est disponible en version Preview publique sur liste d'attente. Si vous souhaitez tester cette fonctionnalité, remplissez ce formulaire pour vous inscrire sur la liste d'attente. Cloud Run est une plate-forme de conteneurs sur Google Cloud qui vous permet d'exécuter facilement votre code dans un conteneur, sans avoir à gérer de cluster.
Aujourd'hui, les GPU que nous mettons à votre disposition sont des GPU Nvidia L4 avec 24 Go de vRAM. Vous avez un GPU par instance Cloud Run, et l'autoscaling Cloud Run s'applique toujours. Cela inclut le scaling horizontal jusqu'à cinq instances (avec augmentation de quota disponible), ainsi que le scaling à la baisse jusqu'à zéro instance en l'absence de requêtes.
Les GPU peuvent être utilisés, par exemple, 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 multi-conteneur qui utilise Open WebUI comme conteneur d'entrée de façade 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 sidecar diffusant un modèle Gemma 2B
- Déployer Open WebUI en tant que conteneur d'entrée de façade
2. Définir des variables d'environnement et activer les API
Mettre à niveau la CLI gcloud
Vous devez d'abord disposer d'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 commencer à utiliser cet atelier de programmation, vous devez activer plusieurs API. Cet atelier de programmation nécessite d'utiliser les 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 est alors téléchargé dans /home/$USER/.ollama/models.
curl -fsSL https://ollama.com/install.sh | sh
Exécutez maintenant ollama en exécutant
ollama serve
Ollama commence à écouter sur le port 11434.
Ouvrez une deuxième fenêtre de terminal pour télécharger le modèle Gemma 2 2B dans
ollama pull gemma2:2b
(Facultatif) Vous pouvez interagir avec Gemma à partir de la ligne de commande en exécutant
ollama run gemma2:2b
Lorsque vous avez terminé de discuter avec Gemma, vous pouvez quitter la discussion en saisissant
/bye
4. Créer un bucket de stockage
Maintenant que le modèle a été 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
À présent, déplacez le dossier "templates" 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 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 # Store the model weights in the container image ENV MODEL gemma2:2b RUN ollama serve & sleep 5 && ollama pull $MODEL # Start Ollama ENTRYPOINT ["ollama", "serve"]
Créez un dépôt Artifact Registry pour stocker vos images de 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 du sidecar 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 du frontend à l'aide d'Open WebUI.
Utilisez Docker pour extraire l'image de l'interface utilisateur Web Open.
docker pull ghcr.io/open-webui/open-webui:main
Configurez ensuite Docker pour qu'il utilise vos identifiants Google Cloud pour 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 multiconteneurs sur Cloud Run
Utiliser un fichier YAML pour déployer le service multi-conteneur
Créez un 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 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 votre ID de 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 le chargement de l'interface utilisateur terminé, sous Sélectionner un modèle, choisissez Gemma 2 2B.
Maintenant, posez une question à Gemma, par exemple « Pourquoi le ciel est bleu ? »
8. Félicitations !
Félicitations ! Vous avez terminé cet atelier de programmation.
Nous vous recommandons de consulter la documentation sur les fonctions Cloud Run.
Points abordés
- Créer un service de conteneurs multiples dans Cloud Run
- Déployer Ollama en tant que sidecar diffusant un modèle Gemma 2B
- Déployer Open WebUI en tant que conteneur d'entrée de façade
9. Effectuer un nettoyage
Pour éviter les frais involontaires (par exemple, si les services Cloud Run sont appelés par inadvertance plus de fois que votre quota d'appels Cloud Run mensuels 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 et 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 cliquer sur "Supprimer". Si vous supprimez le projet, vous devrez modifier les projets dans votre SDK Cloud. Vous pouvez afficher la liste de tous les projets disponibles en exécutant gcloud projects list
.