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
- Accedi al tuo account Google Cloud . Se non conosci Google Cloud, crea un account per valutare le prestazioni dei nostri prodotti in scenari reali. I nuovi clienti ricevono anche 300 $di crediti senza costi per l'esecuzione, il test e il deployment dei workload.
-
Installa 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 -
Crea o seleziona un Google Cloud progetto.
Ruoli richiesti per selezionare o creare un progetto
- Seleziona un progetto: la selezione di un progetto non richiede un ruolo IAM specifico. Puoi selezionare qualsiasi progetto per il quale ti è stato concesso un ruolo.
-
Crea un progetto: per creare un progetto, devi disporre del ruolo Autore progetto
(
roles/resourcemanager.projectCreator), che contiene l'autorizzazioneresourcemanager.projects.create. Scopri come concedere i ruoli.
-
Creare un progetto Google Cloud :
gcloud projects create PROJECT_ID
Sostituisci
PROJECT_IDcon un nome per il progetto Google Cloud che stai creando. -
Seleziona il progetto Google Cloud che hai creato:
gcloud config set project PROJECT_ID
Sostituisci
PROJECT_IDcon il nome del progetto Google Cloud .
-
Verifica che la fatturazione sia abilitata per il tuo progetto Google Cloud .
-
Installa 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 -
Crea o seleziona un Google Cloud progetto.
Ruoli richiesti per selezionare o creare un progetto
- Seleziona un progetto: la selezione di un progetto non richiede un ruolo IAM specifico. Puoi selezionare qualsiasi progetto per il quale ti è stato concesso un ruolo.
-
Crea un progetto: per creare un progetto, devi disporre del ruolo Autore progetto
(
roles/resourcemanager.projectCreator), che contiene l'autorizzazioneresourcemanager.projects.create. Scopri come concedere i ruoli.
-
Creare un progetto Google Cloud :
gcloud projects create PROJECT_ID
Sostituisci
PROJECT_IDcon un nome per il progetto Google Cloud che stai creando. -
Seleziona il progetto Google Cloud che hai creato:
gcloud config set project PROJECT_ID
Sostituisci
PROJECT_IDcon il nome del progetto Google Cloud .
-
Verifica che la fatturazione sia abilitata per il tuo progetto Google Cloud .
Abilita le API Cloud Run, Artifact Registry e Cloud Build:
Ruoli richiesti per abilitare le API
Per abilitare le API, devi disporre del ruolo IAM Amministratore utilizzo dei servizi (
roles/serviceusage.serviceUsageAdmin), che include l'autorizzazioneserviceusage.services.enable. Scopri come concedere i ruoli.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.
Ruoli obbligatori
Per ottenere le autorizzazioni necessarie per completare il tutorial, chiedi all'amministratore di concederti i seguenti ruoli IAM nel progetto:
-
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)
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
-
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 aggiuntivo.
- Fai clic su Salva.
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:
- 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.
Preparare la richiesta
Per recuperare l'esempio di codice da utilizzare:
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-encoding
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:
Crea 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.
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:
Passa alla directory di esempio:
cd cloud-run-samples/jobs-video-encoding
Crea 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.
Esegui il job
Per eseguire il job:
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 .
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:
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 terminati tutti i job in esecuzione e tutte le istanze di container in esecuzione.
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 progetto:
Elimina un progetto Google Cloud :
gcloud projects delete PROJECT_ID
Passaggi successivi
- Esplora altre demo, tutorial ed esempi di Cloud Run.