1. Introduction
Présentation
Dans cet atelier de programmation, vous allez utiliser des jobs Cloud Run pour exécuter l'inférence par lot à l'aide du LLM Llama 3.2-1b de Meta et de vLLM optimisé par le GPU Cloud Run Jobs. Vous écrirez les résultats directement dans Cloud Storage à l'aide des installations de volume Cloud Run.
Points abordés
- Effectuer une inférence par lot à l'aide des GPU Cloud Run Jobs
- É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 la commande :
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 acceptée. Le quota est de nvidia_l4_gpu_allocation_no_zonal_redundancy, sous l'API Cloud Run Admin.
Remarque : Si vous utilisez un nouveau projet, il peut s'écouler quelques minutes entre l'activation de l'API et l'affichage des quotas sur cette page.
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 "Lecture". Vous y ferez référence plus tard sous le nom 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éparation
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 l'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 la commande suivante :
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=- - Attribuez le rôle "Accesseur de secrets Secret Manager" à votre compte de service :
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 us-central1 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 sources 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. La tâche utilise un seul GPU L4 pour ce processus.
- Écrit les résultats sur le disque local. Il est écrit dans Cloud Storage via des installations de volume.
Pour créer le job Cloud Run et un fichier 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 appelé
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 une
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
Dans 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écuter le job :
L'exécution du job prend quelques minutes. Vous pouvez vérifier l'état à l'aide du lien fourni dans le résultat de la dernière commande.gcloud run jobs execute inference-job --region $REGION --async
Confirmer la réussite de l'opération
Pour vérifier que votre job s'est exécuté correctement, consultez ses journaux, comme dans le résultat 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 fichier doit contenir les quatre requêtes 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
- Effectuer une inférence par lot à l'aide des GPU Cloud Run Jobs
- Écrire dans Cloud Storage à l'aide des installations de volume Cloud Run
7. Effectuer un nettoyage
Pour supprimer le job Cloud Run, accédez à la console Cloud Run à l'adresse https://console.cloud.google.com/run, puis supprimez le job inference-job.
Pour supprimer l'intégralité 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 changer de projet dans votre SDK Cloud. Vous pouvez afficher la liste de tous les projets disponibles en exécutant gcloud projects list.