Ce tutoriel explique comment transcoder des vidéos hors connexion de faible priorité à l'aide de tâches Cloud Run.
Objectifs
Dans ce tutoriel, vous allez effectuer les opérations suivantes :
- Créez des buckets Cloud Storage pour stocker les vidéos à traiter et les résultats de l'encodage.
- Déployez un job Cloud Run à l'aide de GPU pour accélérer le transcodage vidéo.
- Exécutez le job et assurez-vous que la vidéo a été transcodée correctement.
Coûts
Dans ce document, vous utilisez les composants facturables de Google Cloudsuivants :
Vous pouvez obtenir une estimation des coûts en fonction de votre utilisation prévue à l'aide du simulateur de coût.
Avant de commencer
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
Install the Google Cloud CLI.
-
Si vous utilisez un fournisseur d'identité (IdP) externe, vous devez d'abord vous connecter à la gcloud CLI avec votre identité fédérée.
-
Pour initialiser la gcloud CLI, exécutez la commande suivante :
gcloud init -
Create or select 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.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_IDwith a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_IDwith your Google Cloud project name.
-
Verify that billing is enabled for your Google Cloud project.
-
Install the Google Cloud CLI.
-
Si vous utilisez un fournisseur d'identité (IdP) externe, vous devez d'abord vous connecter à la gcloud CLI avec votre identité fédérée.
-
Pour initialiser la gcloud CLI, exécutez la commande suivante :
gcloud init -
Create or select 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.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_IDwith a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_IDwith your Google Cloud project name.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Cloud Run, Artifact Registry, and Cloud Build APIs:
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.gcloud services enable run.googleapis.com
cloudbuild.googleapis.com artifactregistry.googleapis.com - Définissez votre région en tant que variable d'environnement :
export REGION=REGION
- Créez un compte de service :
gcloud iam service-accounts create video-encoding
- Demandez
Total Nvidia L4 GPU allocation without zonal redundancy, per project per regionsous l'API Cloud Run Admin sur la page Quotas et limites du système pour terminer ce tutoriel. Vous pouvez également déployer un service Cloud Run pour recevoir automatiquement un quota de trois GPU nvidia-l4 (redondance zonale désactivée) pour une région. -
Administrateur de dépôts Artifact Registry (
roles/artifactregistry.repoAdmin) -
Éditeur Cloud Build (
roles/cloudbuild.builds.editor) -
Administrateur Cloud Run (
roles/run.admin) -
Créer des comptes de service (
roles/iam.serviceAccountCreator) -
Utilisateur du compte de service (
roles/iam.serviceAccountUser) -
Dans la console Google Cloud , accédez à la page IAM.
Accéder à IAM - Sélectionnez le projet.
- Cliquez sur Accorder l'accès.
-
Dans le champ Nouveaux comptes principaux, saisissez votre identifiant utilisateur. Il s'agit généralement de l'adresse e-mail utilisée pour déployer le service Cloud Run.
- Dans la liste Sélectionner un rôle, sélectionnez un rôle.
- Pour attribuer des rôles supplémentaires, cliquez sur Ajouter un autre rôle et ajoutez tous les rôles supplémentaires.
- Cliquez sur Enregistrer.
- PROJECT_NUMBER par le numéro de votre projet Google Cloud .
- PROJECT_ID par l'ID de votre projet Google Cloud .
- PRINCIPAL par le compte pour lequel vous ajoutez la liaison. Il s'agit généralement de l'adresse e-mail utilisée pour déployer le service Cloud Run.
- ROLE par le rôle que vous ajoutez au compte du déployeur.
Clonez le dépôt de l'exemple sur votre ordinateur local :
git clone https://github.com/GoogleCloudPlatform/cloud-run-samplesAccédez au répertoire contenant l'exemple de code Cloud Run :
cd cloud-run-samples/jobs-video-encodingCréez un bucket pour stocker les vidéos avant le traitement :
gcloud storage buckets create gs://preprocessing-PROJECT_ID \ --location LOCATIONRemplacez les éléments suivants :
- PROJECT_ID : ID de votre projet.
- LOCATION : emplacement Cloud Storage.
Accordez au compte de service l'accès en lecture à ce bucket :
gcloud storage buckets add-iam-policy-binding gs://preprocessing-PROJECT_ID \ --member="serviceAccount:video-encoding@PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/storage.objectViewer"Remplacez PROJECT_ID par l'ID du projet.
Créez un bucket pour stocker les vidéos transcodées après traitement :
gcloud storage buckets create gs://transcoded-PROJECT_ID \ --location LOCATIONRemplacez les éléments suivants :
- PROJECT_ID : ID de votre projet.
- LOCATION : emplacement Cloud Storage.
Accordez au compte de service l'autorisation de lire et d'écrire dans ce bucket :
gcloud storage buckets add-iam-policy-binding gs://transcoded-PROJECT_ID \ --member="serviceAccount:video-encoding@PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/storage.objectAdmin"Remplacez PROJECT_ID par l'ID du projet.
Accédez à l'exemple de répertoire :
cd cloud-run-samples/jobs-video-encodingCréez un Artifact Registry si le registre Cloud Run par défaut n'existe pas encore :
gcloud artifacts repositories create cloud-run-source-deploy \ --repository-format=docker \ --location LOCATIONRemplacez LOCATION par le nom de l'emplacement du registre.
Créez l'image du conteneur :
gcloud builds submit \ --tag LOCATION-docker.pkg.dev/PROJECT_ID/cloud-run-source-deploy/IMAGE_NAME \ --machine-type E2-HIGHCPU-32Remplacez les éléments suivants :
- PROJECT_ID : ID de votre projet.
- LOCATION : nom de l'emplacement du registre.
- IMAGE_NAME : nom de l'image de conteneur, par exemple
ffmpeg-image.
Cloud Run utilise un type de machine plus grand pour réduire le temps de compilation.
Déployez le job :
gcloud run jobs create video-encoding-job \ --image LOCATION-docker.pkg.dev/PROJECT_ID/cloud-run-source-deploy/IMAGE_NAME \ --region REGION \ --memory 32Gi \ --cpu 8 \ --gpu 1 \ --gpu-type nvidia-l4 \ --no-gpu-zonal-redundancy \ --max-retries 1 \ --service-account video-encoding@PROJECT_ID.iam.gserviceaccount.com \ --add-volume=name=input-volume,type=cloud-storage,bucket=preprocessing-PROJECT_ID,readonly=true \ --add-volume-mount=volume=input-volume,mount-path=/inputs \ --add-volume=name=output-volume,type=cloud-storage,bucket=transcoded-PROJECT_ID \ --add-volume-mount=volume=output-volume,mount-path=/outputsRemplacez les éléments suivants :
- PROJECT_ID : ID de votre projet.
- REGION : nom de la région. Remarque : Il doit s'agir de la même région pour laquelle vous disposez d'un quota de GPU.
- IMAGE_NAME : nom de l'image de conteneur, par exemple
ffmpeg-image.
Si c'est la première fois que vous déployez à partir d'une source dans ce projet, Cloud Run vous invite à créer un dépôt Artifact Registry par défaut.
Importez un exemple de vidéo à encoder :
gcloud storage cp gs://cloud-samples-data/video/cat.mp4 gs://preprocessing-PROJECT_IDExécutez la tâche :
gcloud run jobs execute video-encoding-job \ --region REGION \ --wait \ --args="cat.mp4,encoded_cat.mp4,-vcodec,h264_nvenc,-cq,21,-movflags,+faststart"Le fichier
entrypoint.shnécessite un fichier d'entrée, un fichier de sortie et tous les arguments à envoyer à FFmpeg.Consultez les journaux Cloud Run pour vous assurer que la vidéo a été transcodée :
gcloud run jobs logs read video-encoding-job --region REGIONTéléchargez la vidéo transcodée :
gcloud storage cp gs://transcoded-PROJECT_ID/encoded_cat.mp4 .Dans la console Google Cloud , accédez à Cloud Run :
Recherchez le job que vous souhaitez supprimer dans la liste des jobs, puis cliquez sur la case à cocher correspondante pour le sélectionner.
Cliquez sur Supprimer. Toutes les exécutions de jobs en cours et toutes les instances de conteneur en cours d'exécution sont alors arrêtées.
- Découvrez d'autres démonstrations, tutoriels et exemples concernant Cloud Run.
Rôles requis
Pour obtenir les autorisations nécessaires pour suivre le tutoriel, demandez à votre administrateur de vous accorder les rôles IAM suivants sur votre projet :
Pour en savoir plus sur l'attribution de rôles, consultez la page Gérer l'accès aux projets, aux dossiers et aux organisations.
Vous pouvez également obtenir les autorisations requises via des rôles personnalisés ou d'autres rôles prédéfinis.
Attribuer les rôles
Console
gcloud
Pour attribuer les rôles IAM requis à votre compte dans votre projet :
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=PRINCIPAL \ --role=ROLE
Remplacez :
Préparer votre demande
Pour récupérer l’exemple de code à utiliser, procédez comme suit :
Créer des buckets Cloud Storage
Pour stocker les vidéos à traiter et enregistrer les résultats de l'encodage, créez les deux buckets Cloud Storage suivants :
Déployer un job Cloud Run
Créez un job Cloud Run à l'aide du fichier Dockerfile dans l'exemple de dépôt et en montant les buckets que vous avez créés :
Exécuter le job
Pour exécuter le job, procédez comme suit :
Effectuer un nettoyage
Pour éviter que des frais supplémentaires ne soient facturés sur votre compte Google Cloud , supprimez toutes les ressources que vous avez déployées avec ce guide de démarrage rapide.
Supprimer votre dépôt
Cloud Run ne facture que la durée d'exécution de votre job. Toutefois, il se peut que des frais vous soient facturés pour le stockage de l'image de conteneur dans Artifact Registry. Pour supprimer des dépôts Artifact Registry, suivez les étapes décrites dans Supprimer des dépôts de la documentation Artifact Registry.
Supprimer votre job
Les jobs Cloud Run n'entraînent des coûts que lorsqu'une tâche de job est en cours d'exécution. Pour supprimer votre job Cloud Run, procédez comme suit :
Console
Pour supprimer une tâche, procédez comme suit :
gcloud
Pour supprimer un job, exécutez la commande suivante :
gcloud run jobs delete JOB_NAME
Remplacez JOB_NAME par le nom de la tâche.
Supprimer votre projet de test
La suppression de votre projet Google Cloud arrête la facturation de toutes les ressources de ce projet. Pour libérer toutes les ressources Google Cloud de votre projet, procédez comme suit :
Delete a Google Cloud project:
gcloud projects delete PROJECT_ID