Transcodage vidéo accéléré par GPU avec FFmpeg sur les jobs Cloud Run

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 :

Coûts

Dans ce document, vous utilisez les composants facturables suivants de Google Cloud :

Pour obtenir une estimation des coûts en fonction de votre utilisation prévue, utilisez le simulateur de coût.

Les nouveaux utilisateurs de Google Cloud peuvent bénéficier d'un essai sans frais.

Avant de commencer

  1. Connectez-vous à votre compte Google Cloud . Si vous débutez sur Google Cloud, créez un compte pour évaluer les performances de nos produits en conditions réelles. Les nouveaux clients bénéficient également de 300 $de crédits sans frais pour exécuter, tester et déployer des charges de travail.
  2. Installez la Google Cloud CLI.

  3. 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.

  4. Pour initialiser la gcloud CLI, exécutez la commande suivante :

    gcloud init
  5. Créez ou sélectionnez un projet Google Cloud .

    Rôles requis pour sélectionner ou créer un projet

    • Sélectionnez un projet : la sélection d'un projet ne nécessite pas de rôle IAM spécifique. Vous pouvez sélectionner n'importe quel projet pour lequel un rôle vous a été attribué.
    • Créer un projet : pour créer un projet, vous devez disposer du rôle Créateur de projet (roles/resourcemanager.projectCreator), qui contient l'autorisation resourcemanager.projects.create. Découvrez comment attribuer des rôles.
    • Créez un projet Google Cloud  :

      gcloud projects create PROJECT_ID

      Remplacez PROJECT_ID par le nom du projet Google Cloud que vous créez.

    • Sélectionnez le projet Google Cloud que vous avez créé :

      gcloud config set project PROJECT_ID

      Remplacez PROJECT_ID par le nom de votre projet Google Cloud .

  6. Vérifiez que la facturation est activée pour votre projet Google Cloud .

  7. Installez la Google Cloud CLI.

  8. 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.

  9. Pour initialiser la gcloud CLI, exécutez la commande suivante :

    gcloud init
  10. Créez ou sélectionnez un projet Google Cloud .

    Rôles requis pour sélectionner ou créer un projet

    • Sélectionnez un projet : la sélection d'un projet ne nécessite pas de rôle IAM spécifique. Vous pouvez sélectionner n'importe quel projet pour lequel un rôle vous a été attribué.
    • Créer un projet : pour créer un projet, vous devez disposer du rôle Créateur de projet (roles/resourcemanager.projectCreator), qui contient l'autorisation resourcemanager.projects.create. Découvrez comment attribuer des rôles.
    • Créez un projet Google Cloud  :

      gcloud projects create PROJECT_ID

      Remplacez PROJECT_ID par le nom du projet Google Cloud que vous créez.

    • Sélectionnez le projet Google Cloud que vous avez créé :

      gcloud config set project PROJECT_ID

      Remplacez PROJECT_ID par le nom de votre projet Google Cloud .

  11. Vérifiez que la facturation est activée pour votre projet Google Cloud .

  12. Activez les API Cloud Run, Artifact Registry et Cloud Build :

    Rôles requis pour activer les API

    Pour activer les API, vous avez besoin du rôle IAM Administrateur Service Usage (roles/serviceusage.serviceUsageAdmin), qui contient l'autorisation serviceusage.services.enable. Découvrez comment attribuer des rôles.

    gcloud services enable run.googleapis.com cloudbuild.googleapis.com artifactregistry.googleapis.com
  13. Définissez votre région en tant que variable d'environnement :
    export REGION=REGION
  14. Créez un compte de service :
    gcloud iam service-accounts create video-encoding
  15. Demandez Total Nvidia L4 GPU allocation without zonal redundancy, per project per region sous 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.

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

  1. Dans la console Google Cloud , accédez à la page IAM.

    Accéder à IAM
  2. Sélectionnez le projet.
  3. Cliquez sur  Accorder l'accès.
  4. 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.

  5. Dans la liste Sélectionner un rôle, sélectionnez un rôle.
  6. Pour attribuer des rôles supplémentaires, cliquez sur Ajouter un autre rôle et ajoutez tous les rôles supplémentaires.
  7. Cliquez sur Enregistrer.

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 :

  • 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 déployeur.

Préparer votre demande

Pour récupérer l’exemple de code à utiliser, procédez comme suit :

  1. Clonez le dépôt de l'exemple sur votre ordinateur local :

    git clone https://github.com/GoogleCloudPlatform/cloud-run-samples
    
  2. Accédez au répertoire contenant l'exemple de code Cloud Run :

    cd cloud-run-samples/jobs-video-encoding
    

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 :

  1. Créez un bucket pour stocker les vidéos avant de les traiter :

    gcloud storage buckets create gs://preprocessing-PROJECT_ID \
      --location LOCATION
    

    Remplacez les éléments suivants :

    • PROJECT_ID : ID de votre projet.
    • LOCATION : emplacement Cloud Storage.
  2. 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.

  3. Créez un bucket pour stocker les vidéos transcodées après traitement :

    gcloud storage buckets create gs://transcoded-PROJECT_ID \
      --location LOCATION
    

    Remplacez les éléments suivants :

    • PROJECT_ID : ID de votre projet.
    • LOCATION : emplacement Cloud Storage.
  4. 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.

Déployer un job Cloud Run

Créez un job Cloud Run en utilisant le fichier Dockerfile du dépôt d'exemple et en montant les buckets que vous avez créés :

  1. Accédez à l'exemple de répertoire :

    cd cloud-run-samples/jobs-video-encoding
    

  1. Cré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 LOCATION
    

    Remplacez LOCATION par le nom de l'emplacement du registre.

  2. 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-32
    

    Remplacez 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.

  3. 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=/outputs
    

    Remplacez 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.

Exécuter le job

Pour exécuter le job, procédez comme suit :

  1. Importez un exemple de vidéo à encoder :

    gcloud storage cp gs://cloud-samples-data/video/cat.mp4 gs://preprocessing-PROJECT_ID
    
  2. Exé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.sh nécessite un fichier d'entrée, un fichier de sortie et tous les arguments à envoyer à FFmpeg.

  3. 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 REGION
    
  4. Téléchargez la vidéo transcodée :

    gcloud storage cp gs://transcoded-PROJECT_ID/encoded_cat.mp4 .
    

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 :

  1. Dans la console Google Cloud , accédez à Cloud Run :

    Accédez à Cloud Run

  2. Recherchez le job que vous souhaitez supprimer dans la liste des jobs, puis cliquez sur la case à cocher correspondante pour le sélectionner.

  3. Cliquez sur Supprimer. Cela met fin à toutes les exécutions de jobs en cours et à toutes les instances de conteneur en cours d'exécution.

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 :

    Supprimer un projet Google Cloud  :

    gcloud projects delete PROJECT_ID

Étapes suivantes