GPU-beschleunigte Videotranscodierung mit FFmpeg in Cloud Run-Jobs

In dieser Anleitung wird beschrieben, wie Sie Offlinevideos mit niedriger Priorität mithilfe von Cloud Run-Jobs transcodieren.

Ziele

In dieser Anleitung führen Sie die folgenden Schritte aus:

Kosten

In diesem Dokument verwenden Sie die folgenden kostenpflichtigen Komponenten von Google Cloud:

Mit dem Preisrechner können Sie eine Kostenschätzung für Ihre voraussichtliche Nutzung vornehmen.

Neuen Nutzern von Google Cloud steht möglicherweise eine kostenlose Testversion zur Verfügung.

Hinweis

  1. Melden Sie sich in Ihrem Google Cloud -Konto an. Wenn Sie mit Google Cloudnoch nicht vertraut sind, erstellen Sie ein Konto, um die Leistungsfähigkeit unserer Produkte in der Praxis sehen und bewerten zu können. Neukunden erhalten außerdem ein Guthaben von 300 $, um Arbeitslasten auszuführen, zu testen und bereitzustellen.
  2. Installieren Sie die Google Cloud CLI.

  3. Wenn Sie einen externen Identitätsanbieter (IdP) verwenden, müssen Sie sich zuerst mit Ihrer föderierten Identität in der gcloud CLI anmelden.

  4. Führen Sie den folgenden Befehl aus, um die gcloud CLI zu initialisieren:

    gcloud init
  5. Erstellen Sie ein Google Cloud Projekt oder wählen Sie eines aus.

    Rollen, die zum Auswählen oder Erstellen eines Projekts erforderlich sind

    • Projekt auswählen: Für die Auswahl eines Projekts ist keine bestimmte IAM-Rolle erforderlich. Sie können jedes Projekt auswählen, für das Ihnen eine Rolle zugewiesen wurde.
    • Projekt erstellen: Zum Erstellen eines Projekts benötigen Sie die Rolle „Projektersteller“ (roles/resourcemanager.projectCreator), die die Berechtigung resourcemanager.projects.create enthält. Weitere Informationen zum Zuweisen von Rollen
    • So erstellen Sie ein Google Cloud -Projekt:

      gcloud projects create PROJECT_ID

      Ersetzen Sie PROJECT_ID durch einen Namen für das Google Cloud -Projekt, das Sie erstellen.

    • Wählen Sie das von Ihnen erstellte Google Cloud Projekt aus:

      gcloud config set project PROJECT_ID

      Ersetzen Sie PROJECT_ID durch den Namen Ihres Projekts in Google Cloud .

  6. Prüfen Sie, ob für Ihr Google Cloud Projekt die Abrechnung aktiviert ist.

  7. Installieren Sie die Google Cloud CLI.

  8. Wenn Sie einen externen Identitätsanbieter (IdP) verwenden, müssen Sie sich zuerst mit Ihrer föderierten Identität in der gcloud CLI anmelden.

  9. Führen Sie den folgenden Befehl aus, um die gcloud CLI zu initialisieren:

    gcloud init
  10. Erstellen Sie ein Google Cloud Projekt oder wählen Sie eines aus.

    Rollen, die zum Auswählen oder Erstellen eines Projekts erforderlich sind

    • Projekt auswählen: Für die Auswahl eines Projekts ist keine bestimmte IAM-Rolle erforderlich. Sie können jedes Projekt auswählen, für das Ihnen eine Rolle zugewiesen wurde.
    • Projekt erstellen: Zum Erstellen eines Projekts benötigen Sie die Rolle „Projektersteller“ (roles/resourcemanager.projectCreator), die die Berechtigung resourcemanager.projects.create enthält. Weitere Informationen zum Zuweisen von Rollen
    • So erstellen Sie ein Google Cloud -Projekt:

      gcloud projects create PROJECT_ID

      Ersetzen Sie PROJECT_ID durch einen Namen für das Google Cloud -Projekt, das Sie erstellen.

    • Wählen Sie das von Ihnen erstellte Google Cloud Projekt aus:

      gcloud config set project PROJECT_ID

      Ersetzen Sie PROJECT_ID durch den Namen Ihres Projekts in Google Cloud .

  11. Prüfen Sie, ob für Ihr Google Cloud Projekt die Abrechnung aktiviert ist.

  12. Aktivieren Sie die Cloud Run API, die Artifact Registry API und die Cloud Build API:

    Rollen, die zum Aktivieren von APIs erforderlich sind

    Zum Aktivieren von APIs benötigen Sie die IAM-Rolle „Service Usage-Administrator“ (roles/serviceusage.serviceUsageAdmin), die die Berechtigung serviceusage.services.enable enthält. Weitere Informationen zum Zuweisen von Rollen

    gcloud services enable run.googleapis.com cloudbuild.googleapis.com artifactregistry.googleapis.com
  13. Legen Sie Ihre Region als Umgebungsvariable fest:
    export REGION=REGION
  14. Erstellen Sie ein Dienstkonto:
    gcloud iam service-accounts create video-encoding
  15. Beantragen Sie unter „Cloud Run Admin API“ auf der Seite Kontingente und Systemlimits ein Total Nvidia L4 GPU allocation without zonal redundancy, per project per region-Kontingent, um diese Anleitung abzuschließen. Alternativ können Sie einen Cloud Run-Dienst bereitstellen, um automatisch ein Kontingent von 3 nvidia-l4-GPUs (zonale Redundanz deaktiviert) für eine Region zu erhalten.

Erforderliche Rollen

Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen für Ihr Projekt zuzuweisen, um die Berechtigungen zu erhalten, die Sie zum Ausführen der Anleitung benötigen:

Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten.

Sie können die erforderlichen Berechtigungen auch über benutzerdefinierte Rollen oder andere vordefinierte Rollen erhalten.

Rollen zuweisen

Console

  1. Rufen Sie in der Google Cloud Console die Seite IAM auf.

    IAM aufrufen
  2. Wählen Sie das Projekt aus.
  3. Klicken Sie auf Zugriffsrechte erteilen.
  4. Geben Sie im Feld Neue Hauptkonten Ihre Nutzer-ID ein. Dies ist in der Regel die E-Mail-Adresse, die zum Bereitstellen des Cloud Run-Dienstes verwendet wird.

  5. Wählen Sie in der Liste Rolle auswählen eine Rolle aus.
  6. Wenn Sie weitere Rollen zuweisen möchten, klicken Sie auf Weitere Rolle hinzufügen und fügen Sie weitere Rollen hinzu.
  7. Klicken Sie auf Speichern.

gcloud

So weisen Sie Ihrem Konto die erforderlichen IAM-Rollen für Ihr Projekt zu:

     gcloud projects add-iam-policy-binding PROJECT_ID \
         --member=PRINCIPAL \
         --role=ROLE
     

Ersetzen Sie:

  • PROJECT_NUMBER durch die Google Cloud Projektnummer.
  • PROJECT_ID durch Ihre Google Cloud Projekt-ID.
  • PRINCIPAL mit dem Konto, für das Sie die Bindung hinzufügen. Dies ist in der Regel die E-Mail-Adresse, die zum Bereitstellen des Cloud Run-Dienstes verwendet wird.
  • ROLE durch die Rolle, die Sie dem Bereitstellerkonto hinzufügen.

Antrag vorbereiten

So rufen Sie das gewünschte Codebeispiel ab:

  1. Klonen Sie das Beispiel-Repository auf Ihren lokalen Computer:

    git clone https://github.com/GoogleCloudPlatform/cloud-run-samples
    
  2. Wechseln Sie in das Verzeichnis, das den Cloud Run-Beispielcode enthält:

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

Cloud Storage-Buckets erstellen

Erstellen Sie die folgenden zwei Cloud Storage-Buckets, um die Videos für die Verarbeitung zu speichern und die Ergebnisse der Codierung zu speichern:

  1. Erstellen Sie einen Bucket, um Videos vor der Verarbeitung zu speichern:

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

    Ersetzen Sie Folgendes:

    • PROJECT_ID: Ihre Projekt-ID.
    • LOCATION: Der Cloud Storage-Speicherort.
  2. Gewähren Sie dem Dienstkonto Zugriff zum Lesen aus diesem 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"
    

    Ersetzen Sie PROJECT_ID durch Ihre Projekt-ID.

  3. Erstellen Sie einen Bucket, um transcodierte Videos nach der Verarbeitung zu speichern:

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

    Ersetzen Sie Folgendes:

    • PROJECT_ID: Ihre Projekt-ID.
    • LOCATION: Der Cloud Storage-Speicherort.
  4. Gewähren Sie dem Dienstkonto Zugriff zum Lesen von und Schreiben in diesen 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"
    

    Ersetzen Sie PROJECT_ID durch Ihre Projekt-ID.

Cloud Run-Job bereitstellen

Erstellen Sie einen Cloud Run-Job mit dem Dockerfile im Beispiel-Repository und hängen Sie die erstellten Buckets ein:

  1. Navigieren Sie zum Beispielverzeichnis:

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

  1. Erstellen Sie eine Artifact Registry, falls die Standard-Cloud Run-Registry noch nicht vorhanden ist:

    gcloud artifacts repositories create cloud-run-source-deploy \
      --repository-format=docker \
      --location LOCATION
    

    Ersetzen Sie LOCATION durch den Namen des Standorts der Registrierung.

  2. Erstellen Sie das Container-Image:

    gcloud builds submit \
      --tag LOCATION-docker.pkg.dev/PROJECT_ID/cloud-run-source-deploy/IMAGE_NAME \
      --machine-type E2-HIGHCPU-32
    

    Ersetzen Sie Folgendes:

    • PROJECT_ID: Ihre Projekt-ID.
    • LOCATION:Name des Standorts der Registrierung.
    • IMAGE_NAME: Name für das Container-Image, z. B. ffmpeg-image.

    Cloud Run verwendet einen größeren Maschinentyp, um die Build-Zeit zu verkürzen.

  3. Stellen Sie den Job bereit:

    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
    

    Ersetzen Sie Folgendes:

    • PROJECT_ID: Ihre Projekt-ID.
    • REGION: Name der Region Hinweis: Dies muss dieselbe Region sein, für die Sie ein GPU-Kontingent haben.
    • IMAGE_NAME: Name für das Container-Image, z. B. ffmpeg-image.

    Wenn Sie in diesem Projekt zum ersten Mal aus dem Quellcode bereitstellen, werden Sie von Cloud Run aufgefordert, ein Standard-Artifact Registry-Repository zu erstellen.

Job ausführen

So führen Sie den Job aus:

  1. Laden Sie ein Beispielvideo hoch, das codiert werden soll:

    gcloud storage cp gs://cloud-samples-data/video/cat.mp4 gs://preprocessing-PROJECT_ID
    
  2. Führen Sie den Job aus:

    gcloud run jobs execute video-encoding-job  \
        --region REGION \
        --wait \
        --args="cat.mp4,encoded_cat.mp4,-vcodec,h264_nvenc,-cq,21,-movflags,+faststart"
    

    Für die Datei entrypoint.sh sind eine Eingabedatei, eine Ausgabedatei und alle Argumente erforderlich, die an FFmpeg gesendet werden sollen.

  3. Prüfen Sie die Cloud Run-Logs, um sicherzugehen, dass das Video transcodiert wurde:

    gcloud run jobs logs read video-encoding-job --region REGION
    
  4. Transcodiertes Video herunterladen:

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

Bereinigen

Löschen Sie alle Ressourcen, die Sie mit dieser Kurzanleitung bereitgestellt haben, um zusätzliche Gebühren für Ihr Google Cloud -Konto zu vermeiden.

Repository löschen

In Cloud Run werden nur die Ressourcen berechnet, die während der Ausführung Ihres Jobs verwendet werden. Das Speichern des Container-Images in Artifact Registry ist jedoch möglicherweise kostenpflichtig. Wenn Sie Artifact Registry-Repositories löschen möchten, folgen Sie der Anleitung unter Repositories löschen in der Artifact Registry-Dokumentation.

Job löschen

Bei Cloud Run-Jobs fallen nur Kosten an, wenn eine Jobaufgabe ausgeführt wird. So löschen Sie Ihren Cloud Run-Job:

Console

So löschen Sie einen Job:

  1. Rufen Sie in der Google Cloud Console Cloud Run auf:

    Zu Cloud Run

  2. Suchen Sie in der Jobliste den Job, den Sie löschen möchten, und klicken Sie auf das zugehörige Kästchen, um ihn auszuwählen.

  3. Klicken Sie auf Löschen. Dadurch werden alle laufenden Jobausführungen und alle ausgeführten Containerinstanzen beendet.

gcloud

Führen Sie den folgenden Befehl aus, um einen Job zu löschen:

gcloud run jobs delete JOB_NAME

Ersetzen Sie JOB_NAME durch den Namen des Jobs.

Testprojekt löschen

Wenn Sie Ihr Google Cloud -Projekt löschen, wird die Abrechnung für alle Ressourcen in diesem Projekt beendet. So geben Sie alle Google Cloud Ressourcen in Ihrem Projekt frei:

    Google Cloud -Projekt löschen:

    gcloud projects delete PROJECT_ID

Nächste Schritte