In dieser Anleitung wird beschrieben, wie Sie Offlinevideos mit niedriger Priorität mithilfe von Cloud Run-Jobs transcodieren.
Ziele
In dieser Anleitung tun Sie Folgendes:
- Erstellen Sie Cloud Storage-Buckets, um die Videos für die Verarbeitung und die Codierungsergebnisse zu speichern.
- Stellen Sie einen Cloud Run-Job bereit, der GPUs verwendet, um die Videotranscodierung zu beschleunigen.
- Führen Sie den Job aus und prüfen Sie, ob das Video erfolgreich transcodiert wurde.
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.
Hinweis
-
Installieren Sie die Google Cloud CLI.
-
Konfigurieren Sie die gcloud CLI für die Verwendung Ihrer föderierten Identität.
Weitere Informationen finden Sie unter Mit Ihrer föderierten Identität in der gcloud CLI anmelden.
-
Führen Sie den folgenden Befehl aus, um die gcloud CLI zu initialisieren:
gcloud init -
Google Cloud -Projekt erstellen oder auswählen.
Erforderliche Rollen zum Auswählen oder Erstellen eines Projekts
- 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 „Project Creator“ (
roles/resourcemanager.projectCreator), die die Berechtigungresourcemanager.projects.createenthält. Informationen zum Zuweisen von Rollen
-
Erstellen Sie ein Projekt in Google Cloud :
gcloud projects create PROJECT_ID
Ersetzen Sie
PROJECT_IDdurch einen Namen für das Google Cloud -Projekt, das Sie erstellen. -
Wählen Sie das von Ihnen erstellte Projekt Google Cloud aus:
gcloud config set project PROJECT_ID
Ersetzen Sie
PROJECT_IDdurch den Namen Ihres Projekts in Google Cloud .
-
Prüfen Sie, ob die Abrechnung für Ihr Google Cloud -Projekt aktiviert ist.
Aktivieren Sie die Cloud Run API, die Artifact Registry API und die Cloud Build API, falls sie noch nicht aktiviert sind:
Erforderliche Rollen zum Aktivieren von APIs
Zum Aktivieren von APIs benötigen Sie die Berechtigung
serviceusage.services.enable. Wenn Sie das Projekt erstellt haben, haben Sie diese Berechtigung wahrscheinlich bereits über die Inhaberrolle (roles/owner). Andernfalls können Sie diese Berechtigung über die Rolle „Service Usage-Administrator“ (roles/serviceusage.serviceUsageAdmin) erhalten. Informationen zum Zuweisen von Rollengcloud services enable run.googleapis.com
cloudbuild.googleapis.com artifactregistry.googleapis.com - Legen Sie Ihre Region als Umgebungsvariable fest:
export REGION=REGION
- Erstellen Sie ein Dienstkonto:
gcloud iam service-accounts create video-encoding
- Standardmäßig erhalten neue Projekte bei der ersten Bereitstellung automatisch ein GPU-Kontingent von 3. Wenn Sie ein zusätzliches Kontingent benötigen, fordern 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 an.
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:
- Repository-Administrator für Artifact Registry (
roles/artifactregistry.repoAdmin) - Cloud Build-Bearbeiter (
roles/cloudbuild.builds.editor) - Cloud Run-Administrator (
roles/run.admin) - Dienstkonten erstellen (
roles/iam.serviceAccountCreator) - Service Account User (
roles/iam.serviceAccountUser)
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
-
Rufen Sie in der Google Cloud Console die Seite IAM auf.
IAM aufrufen - Wählen Sie das Projekt aus.
- Klicken Sie auf Zugriffsrechte erteilen.
-
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.
- Wählen Sie in der Liste Rolle auswählen eine Rolle aus.
- Wenn Sie weitere Rollen zuweisen möchten, klicken Sie auf Weitere Rolle hinzufügen und fügen Sie weitere Rollen hinzu.
- 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 Ihre Google Cloud Projektnummer.
- PROJECT_ID durch Ihre Google Cloud -Projekt-ID.
- PRINCIPAL durch das 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 Deployer-Konto hinzufügen.
Anwendung vorbereiten
So rufen Sie das gewünschte Codebeispiel ab:
Klonen Sie das Beispiel-Repository auf Ihren lokalen Computer:
git clone https://github.com/GoogleCloudPlatform/cloud-run-samplesWechseln 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 beiden Cloud Storage-Buckets, um die Videos für die Verarbeitung zu speichern und die Ergebnisse der Codierung zu speichern:
Erstellen Sie einen Bucket, um Videos vor der Verarbeitung zu speichern:
gcloud storage buckets create gs://preprocessing-PROJECT_ID \ --location LOCATIONErsetzen Sie Folgendes:
- PROJECT_ID: Ihre Projekt-ID.
- LOCATION: der Cloud Storage-Speicherort.
Gewähren Sie dem Dienstkonto Lesezugriff auf diesen Bucket:
gcloud storage buckets add-iam-policy-binding gs://preprocessing-PROJECT_ID \ --member="serviceAccount:video-encoding@PROJECT_ID." \ --role="roles/storage.objectViewer"Ersetzen Sie PROJECT_ID durch Ihre Projekt-ID.
Erstellen Sie einen Bucket, um transcodierte Videos nach der Verarbeitung zu speichern:
gcloud storage buckets create gs://transcoded-PROJECT_ID \ --location LOCATIONErsetzen Sie Folgendes:
- PROJECT_ID: Ihre Projekt-ID.
- LOCATION: der Cloud Storage-Speicherort.
Gewähren Sie dem Dienstkonto Lese- und Schreibzugriff auf diesen Bucket:
gcloud storage buckets add-iam-policy-binding gs://transcoded-PROJECT_ID \ --member="serviceAccount:video-encoding@PROJECT_ID." \ --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 stellen Sie die von Ihnen erstellten Buckets bereit:
Navigieren Sie zum Beispielverzeichnis:
cd cloud-run-samples/jobs-video-encoding
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 LOCATIONErsetzen Sie LOCATION durch den Namen des Standorts der Registry.
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-32Ersetzen Sie Folgendes:
- PROJECT_ID: Ihre Projekt-ID.
- LOCATION:Name des Standorts der Registry.
- 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.
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. \ --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=/outputsErsetzen 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 zum ersten Mal aus einer Quelle in diesem Projekt bereitgestellt haben, werden Sie von Cloud Run aufgefordert, ein Standard-Artifact Registry-Repository zu erstellen.
Job ausführen
So führen Sie den Job aus:
Laden Sie ein Beispielvideo zum Codieren hoch:
gcloud storage cp gs://cloud-samples-data/video/cat.mp4 gs://preprocessing-PROJECT_IDFü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.shsind eine Eingabedatei, eine Ausgabedatei und alle Argumente erforderlich, die an FFmpeg gesendet werden sollen.Prüfen Sie die Cloud Run-Logs, um sicherzustellen, dass das Video transcodiert wurde:
gcloud run jobs logs read video-encoding-job --region REGIONLaden Sie das transcodierte Video herunter:
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
Cloud Run berechnet nur die Zeit, in der Ihr Job ausgeführt wird. Allerdings können für das Speichern des Container-Images in Artifact Registry Kosten anfallen. 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
Für 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:
Rufen Sie in der Google Cloud Console Cloud Run auf:
Klicken Sie in der Jobliste das Kästchen des zu löschenden Jobs an.
Klicken Sie auf Löschen. Dadurch werden alle laufenden Jobausführungen und alle laufenden 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
- Weitere Cloud Run-Demos, Anleitungen und Beispiele entdecken