Questo tutorial descrive come transcodificare video offline a bassa priorità utilizzando i job Cloud Run.
Obiettivi
In questo tutorial imparerai a:
- Crea bucket Cloud Storage per archiviare i video da elaborare e i risultati della codifica.
- Esegui il deployment di un job Cloud Run utilizzando le GPU per accelerare la transcodifica video.
- Esegui il job e assicurati che la transcodifica del video sia andata a buon fine.
Costi
In questo documento vengono utilizzati i seguenti componenti fatturabili di Google Cloud:
Per generare una stima dei costi in base all'utilizzo previsto,
utilizza il Calcolatore prezzi.
Prima di iniziare
- 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.
-
Se utilizzi un provider di identità (IdP) esterno, devi prima accedere a gcloud CLI con la tua identità federata.
-
Per inizializzare gcloud CLI, esegui questo comando:
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.
-
Se utilizzi un provider di identità (IdP) esterno, devi prima accedere a gcloud CLI con la tua identità federata.
-
Per inizializzare gcloud CLI, esegui questo comando:
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 - Imposta la regione come variabile di ambiente:
export REGION=REGION
- Crea un service account:
gcloud iam service-accounts create video-encoding
- Richiedi
Total Nvidia L4 GPU allocation without zonal redundancy, per project per region, in API Cloud Run Admin nella pagina Quote e limiti di sistema per completare questo tutorial. In alternativa, puoi eseguire il deployment di un servizio Cloud Run per ricevere automaticamente una concessione di 3 quote GPU nvidia-l4 (ridondanza a livello di zona disattivata) per una regione. -
Amministratore repository Artifact Registry (
roles/artifactregistry.repoAdmin) -
Editor Cloud Build (
roles/cloudbuild.builds.editor) -
Cloud Run Admin (
roles/run.admin) -
Crea service account (
roles/iam.serviceAccountCreator) -
Utente Service Account (
roles/iam.serviceAccountUser) -
Nella console Google Cloud , vai alla pagina IAM.
Vai a IAM - Seleziona il progetto.
- Fai clic su Concedi l'accesso.
-
Nel campo Nuove entità, inserisci il tuo identificatore dell'utente. In genere si tratta dell'indirizzo email utilizzato per il deployment del servizio Cloud Run.
- Nell'elenco Seleziona un ruolo, seleziona un ruolo.
- Per concedere altri ruoli, fai clic su Aggiungi un altro ruolo e aggiungi ogni ruolo successivo.
- Fai clic su Salva.
- PROJECT_NUMBER con il numero del tuo progetto Google Cloud .
- PROJECT_ID con l'ID progetto Google Cloud .
- PRINCIPAL con l'account per il quale stai aggiungendo l'associazione. In genere si tratta dell'indirizzo email utilizzato per eseguire il deployment del servizio Cloud Run.
- ROLE con il ruolo che stai aggiungendo all'account deployer.
Clona il repository di esempio sulla tua macchina locale:
git clone https://github.com/GoogleCloudPlatform/cloud-run-samplesPassa alla directory che contiene il codice campione di Cloud Run:
cd cloud-run-samples/jobs-video-encodingCrea un bucket per archiviare i video prima dell'elaborazione:
gcloud storage buckets create gs://preprocessing-PROJECT_ID \ --location LOCATIONSostituisci quanto segue:
- PROJECT_ID: il tuo ID progetto.
- LOCATION: la posizione di Cloud Storage.
Concedi al account di servizio l'accesso in lettura a questo 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"Sostituisci PROJECT_ID con l'ID progetto.
Crea un bucket per archiviare i video transcodificati dopo l'elaborazione:
gcloud storage buckets create gs://transcoded-PROJECT_ID \ --location LOCATIONSostituisci quanto segue:
- PROJECT_ID: il tuo ID progetto.
- LOCATION: la posizione di Cloud Storage.
Concedi all'account di servizio l'accesso in lettura e scrittura a questo 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"Sostituisci PROJECT_ID con l'ID progetto.
Passa alla directory di esempio:
cd cloud-run-samples/jobs-video-encodingCrea un Artifact Registry se il registro Cloud Run predefinito non esiste già:
gcloud artifacts repositories create cloud-run-source-deploy \ --repository-format=docker \ --location LOCATIONSostituisci LOCATION con il nome della posizione del registro.
Crea l'immagine container:
gcloud builds submit \ --tag LOCATION-docker.pkg.dev/PROJECT_ID/cloud-run-source-deploy/IMAGE_NAME \ --machine-type E2-HIGHCPU-32Sostituisci quanto segue:
- PROJECT_ID: il tuo ID progetto.
- LOCATION:il nome della posizione del registro.
- IMAGE_NAME: il nome dell'immagine container, ad esempio
ffmpeg-image.
Cloud Run utilizza un tipo di macchina più grande per ridurre il tempo di compilazione.
Esegui il deployment del 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=/outputsSostituisci quanto segue:
- PROJECT_ID: il tuo ID progetto.
- REGION: il nome della regione Nota: deve essere la stessa regione per cui hai una quota di GPU.
- IMAGE_NAME: il nome dell'immagine container, ad esempio
ffmpeg-image.
Se è la prima volta che esegui il deployment dal codice sorgente in questo progetto, Cloud Run ti chiede di creare un repository Artifact Registry predefinito.
Carica un video di esempio da codificare:
gcloud storage cp gs://cloud-samples-data/video/cat.mp4 gs://preprocessing-PROJECT_IDEsegui il job:
gcloud run jobs execute video-encoding-job \ --region REGION \ --wait \ --args="cat.mp4,encoded_cat.mp4,-vcodec,h264_nvenc,-cq,21,-movflags,+faststart"Il file
entrypoint.shrichiede un file di input, un file di output e tutti gli argomenti da inviare a FFmpeg.Esamina i log di Cloud Run per assicurarti che il video sia stato transcodificato:
gcloud run jobs logs read video-encoding-job --region REGIONScarica il video transcodificato:
gcloud storage cp gs://transcoded-PROJECT_ID/encoded_cat.mp4 .Nella console Google Cloud , vai a Cloud Run:
Individua il job che vuoi eliminare nell'elenco dei job e fai clic sulla relativa casella di controllo per selezionarlo.
Fai clic su Elimina. Vengono terminate tutte le esecuzioni dei job in corso e tutte le istanze dei container in esecuzione.
- Esplora altre demo, tutorial ed esempi di Cloud Run.
Ruoli obbligatori
Per ottenere le autorizzazioni necessarie per completare il tutorial, chiedi all'amministratore di concederti i seguenti ruoli IAM nel progetto:
Per saperne di più sulla concessione dei ruoli, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.
Potresti anche riuscire a ottenere le autorizzazioni richieste tramite i ruoli personalizzati o altri ruoli predefiniti.
Concedi i ruoli
Console
gcloud
Per concedere i ruoli IAM richiesti al tuo account nel tuo progetto:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=PRINCIPAL \ --role=ROLE
Sostituisci:
Preparare la richiesta
Per recuperare l'esempio di codice da utilizzare:
Creazione di bucket di Cloud Storage
Per archiviare i video da elaborare e salvare i risultati della codifica, crea i seguenti due bucket Cloud Storage:
Esegui il deployment di un job Cloud Run
Crea un job Cloud Run utilizzando il Dockerfile nel repository di esempio e montando i bucket che hai creato:
Esegui il job
Per eseguire il job:
Esegui la pulizia
Per evitare costi aggiuntivi al tuo account Google Cloud , elimina tutte le risorse che hai eseguito il deployment con questa guida rapida.
Eliminare il repository
Cloud Run addebita solo il tempo di esecuzione del job. Tuttavia, potresti comunque pagare l'archiviazione dell'immagine container in Artifact Registry. Per eliminare i repository Artifact Registry, segui i passaggi descritti in Eliminare i repository nella documentazione di Artifact Registry.
Eliminare il job
I job Cloud Run comportano costi solo quando viene eseguita un'attività del job. Per eliminare il job Cloud Run, segui uno di questi passaggi:
Console
Per eliminare un job:
gcloud
Per eliminare un job, esegui questo comando:
gcloud run jobs delete JOB_NAME
Sostituisci JOB_NAME con il nome del job.
Eliminare il progetto di test
L'eliminazione del progetto Google Cloud interrompe la fatturazione per tutte le risorse al suo interno. Per rilasciare tutte le Google Cloud risorse nel tuo progetto:
Delete a Google Cloud project:
gcloud projects delete PROJECT_ID