1. Introduction
Présentation
Dans cet atelier de programmation, vous allez utiliser des jobs Cloud Run pour exécuter une inférence par lot à l'aide du LLM Llama 3.2-1b de Meta et de vLLM, optimisés par Cloud Run Jobs GPU. Vous écrirez les résultats directement dans Cloud Storage à l'aide des installations de volume Cloud Run.
Points abordés
- Comment effectuer une inférence par lot à l'aide de Cloud Run Jobs GPU
- Comment écrire dans Cloud Storage à l'aide des installations de volume Cloud Run
2. Avant de commencer
Activer les API
Avant de commencer à utiliser cet atelier de programmation, activez les API suivantes en exécutant :
gcloud services enable run.googleapis.com \
cloudbuild.googleapis.com \
secretmanager.googleapis.com \
artifactregistry.googleapis.com
Quota de GPU
Demandez une augmentation de quota pour une région compatible. Le quota est nvidia_l4_gpu_allocation_no_zonal_redundancy, sous l'API Cloud Run Admin.
Remarque : Si vous utilisez un nouveau projet, l'activation de l'API et l'affichage des quotas sur cette page peuvent prendre quelques minutes.
Hugging Face
Cet atelier de programmation utilise un modèle hébergé sur Hugging Face. Pour obtenir ce modèle, demandez le jeton d'accès utilisateur Hugging Face avec l'autorisation "Read" (Lecture). Vous y ferez référence ultérieurement en tant que YOUR_HF_TOKEN.
Vous devrez également accepter les conditions d'utilisation pour utiliser le modèle : https://huggingface.co/meta-llama/Llama-3.2-1B
3. Prérequis
Cette section inclut des instructions pour configurer les ressources suivantes :
- Compte de service IAM et autorisations IAM associées.
- Secret Secret Manager pour stocker votre jeton Hugging Face.
- Bucket Cloud Storage pour stocker le résultat de votre inférence.
Pour configurer les ressources requises, procédez comme suit :
- Définissez les variables d'environnement pour cet atelier de programmation :
export PROJECT_ID=<your_project_id> export REGION=<your_region> export HF_TOKEN=<YOUR_HF_TOKEN> export SERVICE_ACCOUNT=inference-service-account export SERVICE_ACCOUNT_EMAIL=${SERVICE_ACCOUNT}@${PROJECT_ID}.iam.gserviceaccount.com export SECRET_ID=hugging-face-token export BUCKET_NAME=inference-codelab-${PROJECT_ID} - Créez le compte de service en exécutant :
gcloud iam service-accounts create ${SERVICE_ACCOUNT} \ --display-name="Service account for batch inference codelab" - Utilisez Secret Manager pour stocker le jeton d'accès Hugging Face :
gcloud secrets create $SECRET_ID \ --replication-policy="automatic" printf $HF_TOKEN | gcloud secrets versions add $SECRET_ID --data-file=- - Accordez à votre compte de service le rôle Accesseur de secrets de Secret Manager :
gcloud secrets add-iam-policy-binding $SECRET_ID \ --member serviceAccount:$SERVICE_ACCOUNT_EMAIL \ --role='roles/secretmanager.secretAccessor' - Créez un bucket pour héberger votre modèle affiné :
gcloud storage buckets create -l europe-west4 gs://${BUCKET_NAME} - Accordez à votre compte de service l'accès au bucket :
gcloud storage buckets add-iam-policy-binding gs://$BUCKET_NAME \ --member=serviceAccount:$SERVICE_ACCOUNT_EMAIL \ --role=roles/storage.objectAdmin - Créez un dépôt Artifact Registry pour stocker l'image de conteneur. Si vous avez déjà utilisé des déploiements de source Cloud Run dans votre projet, ignorez cette étape.
gcloud artifacts repositories create cloud-run-source-deploy \ --repository-format=docker \ --location=$REGION \ --project=$PROJECT_ID
4. Créer le job Cloud Run
Dans cette section, vous allez créer le code qui effectue les opérations suivantes :
- Importe le modèle Llama depuis Hugging Face
- Effectue une inférence par lot sur le modèle. Le job utilise un seul GPU L4 pour ce processus.
- Écrit les résultats sur le disque local. Ils sont écrits dans Cloud Storage via des installations de volume.
Pour créer le job Cloud Run et un Dockerfile, procédez comme suit :
- Créez un répertoire pour héberger le code de votre job d'affinage :
mkdir codelab-inference-job cd codelab-inference-job - Créez un fichier nommé
main.py:# SPDX-License-Identifier: Apache-2.0 from vllm import LLM, SamplingParams # Sample prompts. prompts = [ "Cloud Run is", "The future of AI is", "The capital of Germany is", "python as a programming language is", ] # Create a sampling params object. sampling_params = SamplingParams(temperature=0.8, top_p=0.95) # Create an LLM. llm = LLM(model="meta-llama/Llama-3.2-1B") # Generate texts from the prompts. The output is a list of RequestOutput objects # that contain the prompt, generated text, and other information. outputs = llm.generate(prompts, sampling_params) # Save the outputs to disk with open("/results/output.txt", "w") as f: for output in outputs: prompt = output.prompt generated_text = output.outputs[0].text f.write(f"Prompt: {prompt!r}, Generated text: {generated_text!r}\n") print(f"Wrote {len(outputs)} to disk.") - Créez un
Dockerfile:FROM python:3.12 ADD main.py . RUN python -m pip install --upgrade pip setuptools RUN pip install vllm CMD ["python", "./main.py"]
5. Déployer et exécuter le job
Lors de cette étape, vous allez créer le job Cloud Run à l'aide du déploiement de source Cloud Run, puis l'exécuter. Cette étape inclut également les indicateurs d'installation de volume Cloud Run pour stocker les résultats.
- Créez le job Cloud Run :
Cette commande crée l'image à partir de la source et déploie le job. Cette opération prendra un certain temps.gcloud run jobs deploy inference-job \ --region $REGION \ --source . \ --gpu=1 \ --set-secrets HF_TOKEN=${SECRET_ID}:latest \ --add-volume name=results,type=cloud-storage,bucket=${BUCKET_NAME} \ --add-volume-mount volume=results,mount-path=/results \ --service-account $SERVICE_ACCOUNT_EMAIL - Exécutez le job :
L'exécution du job prend quelques minutes. Vous pouvez vérifier l'état à l'aide du lien fourni dans la sortie de la dernière commande.gcloud run jobs execute inference-job --region $REGION --async
Confirmer la réussite
Pour confirmer que votre job s'est exécuté correctement, consultez les journaux du job, comme dans la sortie de la dernière commande.
Vérifiez les résultats dans le bucket Cloud Storage :
Dans la console :
- Accédez à Cloud Storage.
- Sélectionnez le bucket commençant par
inference-codelab. - Sélectionnez
output.txt. - Cliquez sur URL authentifiée pour afficher le contenu dans le navigateur.
Le contenu du fichier doit correspondre aux quatre invites et à leurs sorties.
6. Félicitations !
Bravo ! Vous avez terminé cet atelier de programmation.
Nous vous recommandons de consulter la documentation Cloud Run.
Points abordés
- Comment effectuer une inférence par lot à l'aide de Cloud Run Jobs GPU
- Comment écrire dans Cloud Storage à l'aide des installations de volume Cloud Run
7. Effectuer un nettoyage
Pour supprimer le job Cloud Run, accédez à Cloud Run Cloud Console sur https://console.cloud.google.com/run et supprimez le job inference-job.
Pour supprimer l'ensemble du projet, accédez à Gérer les ressources, sélectionnez le projet que vous avez créé à l'étape 2, puis choisissez 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.