Transcoding video yang diakselerasi GPU dengan FFmpeg pada tugas Cloud Run

Tutorial ini menjelaskan cara melakukan transcoding video offline berprioritas rendah menggunakan tugas Cloud Run.

Tujuan

Dalam tutorial ini, Anda akan melakukan hal berikut:

Biaya

Dalam dokumen ini, Anda akan menggunakan komponen Google Cloudyang dapat ditagih berikut:

Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda, gunakan kalkulator harga.

Pengguna Google Cloud baru mungkin memenuhi syarat untuk mendapatkan uji coba gratis.

Sebelum memulai

  1. Instal Google Cloud CLI.

  2. Konfigurasi gcloud CLI agar menggunakan identitas gabungan Anda.

    Untuk mengetahui informasi selengkapnya, lihat Login ke gcloud CLI dengan identitas gabungan Anda.

  3. Untuk melakukan inisialisasi gcloud CLI, jalankan perintah berikut:

    gcloud init
  4. Buat atau pilih project Google Cloud .

    Peran yang diperlukan untuk memilih atau membuat project

    • Memilih project: Memilih project tidak memerlukan peran IAM tertentu—Anda dapat memilih project apa pun yang perannya telah diberikan kepada Anda.
    • Membuat project: Untuk membuat project, Anda memerlukan peran Project Creator (roles/resourcemanager.projectCreator), yang berisi izin resourcemanager.projects.create. Pelajari cara memberikan peran.
    • Buat project Google Cloud :

      gcloud projects create PROJECT_ID

      Ganti PROJECT_ID dengan nama untuk Google Cloud project yang Anda buat.

    • Pilih project Google Cloud yang Anda buat:

      gcloud config set project PROJECT_ID

      Ganti PROJECT_ID dengan nama project Google Cloud Anda.

  5. Pastikan penagihan diaktifkan untuk project Google Cloud Anda.

  6. Aktifkan Cloud Run, Artifact Registry, dan Cloud Build API, jika belum diaktifkan:

    Peran yang diperlukan untuk mengaktifkan API

    Untuk mengaktifkan API, Anda memerlukan izin serviceusage.services.enable. Jika Anda membuat project, kemungkinan Anda sudah memiliki izin ini melalui peran Pemilik (roles/owner). Jika tidak, Anda bisa mendapatkan izin ini melalui peran Service Usage Admin (roles/serviceusage.serviceUsageAdmin). Pelajari cara memberikan peran.

    gcloud services enable run.googleapis.com cloudbuild.googleapis.com artifactregistry.googleapis.com
  7. Tetapkan region Anda sebagai variabel lingkungan:
    export REGION=REGION
  8. Membuat akun layanan:
    gcloud iam service-accounts create video-encoding
  9. Secara default, project baru akan otomatis diberi kuota 3 GPU saat deployment awal. Jika Anda memerlukan kuota tambahan, minta kuota Total Nvidia L4 GPU allocation without zonal redundancy, per project per region di bagian Cloud Run Admin API di halaman Quotas and system limits.

Peran yang diperlukan

Untuk mendapatkan izin yang Anda perlukan untuk menyelesaikan tutorial, minta administrator Anda untuk memberi Anda peran IAM berikut di project Anda:

Untuk mengetahui informasi selengkapnya tentang pemberian peran, lihat Mengelola akses ke project, folder, dan organisasi.

Anda mungkin juga bisa mendapatkan izin yang diperlukan melalui peran khusus atau peran bawaan lainnya.

Memberikan peran

Konsol

  1. Di konsol Google Cloud , buka halaman IAM.

    Buka IAM
  2. Pilih project.
  3. Klik Grant access.
  4. Di kolom New principals, masukkan ID pengguna Anda. Ini biasanya adalah alamat email yang digunakan untuk men-deploy layanan Cloud Run.

  5. Di daftar Select a role, pilih peran.
  6. Untuk memberikan peran tambahan, klik Add another role, lalu tambahkan tiap peran tambahan.
  7. Klik Simpan.

gcloud

Untuk memberikan peran IAM yang diperlukan ke akun Anda di project Anda:

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

Ganti:

  • PROJECT_NUMBER dengan nomor project Google Cloud Anda.
  • PROJECT_ID dengan project ID Google Cloud Anda.
  • PRINCIPAL dengan akun yang akan Anda tambahkan binding-nya. Biasanya, ini adalah alamat email yang digunakan untuk men-deploy layanan Cloud Run.
  • ROLE dengan peran yang Anda tambahkan ke akun deployer.

Menyiapkan aplikasi Anda

Untuk mengambil contoh kode agar dapat digunakan:

  1. Clone repositori contoh ke komputer lokal Anda:

    git clone https://github.com/GoogleCloudPlatform/cloud-run-samples
    
  2. Ubah ke direktori yang memuat kode contoh Cloud Run:

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

Membuat bucket Cloud Storage

Untuk menyimpan video yang akan diproses, dan untuk menyimpan hasil encoding, buat dua bucket Cloud Storage berikut:

  1. Buat bucket untuk menyimpan video sebelum diproses:

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

    Ganti kode berikut:

    • PROJECT_ID: project ID Anda.
    • LOCATION: lokasi Cloud Storage.
  2. Beri akun layanan akses untuk membaca dari bucket ini:

    gcloud storage buckets add-iam-policy-binding gs://preprocessing-PROJECT_ID \
      --member="serviceAccount:video-encoding@PROJECT_ID." \
      --role="roles/storage.objectViewer"
    

    Ganti PROJECT_ID dengan project ID Anda.

  3. Buat bucket untuk menyimpan video yang telah di-transcode setelah diproses:

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

    Ganti kode berikut:

    • PROJECT_ID: project ID Anda.
    • LOCATION: lokasi Cloud Storage.
  4. Beri akun layanan akses untuk membaca dari dan menulis ke bucket ini:

    gcloud storage buckets add-iam-policy-binding gs://transcoded-PROJECT_ID \
      --member="serviceAccount:video-encoding@PROJECT_ID." \
      --role="roles/storage.objectAdmin"
    

    Ganti PROJECT_ID dengan project ID Anda.

Men-deploy tugas Cloud Run

Buat tugas Cloud Run menggunakan Dockerfile di repositori contoh dan memasang bucket yang Anda buat:

  1. Buka direktori contoh:

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

  1. Buat Artifact Registry jika registry Cloud Run default belum ada:

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

    Ganti LOCATION dengan nama lokasi registry.

  2. Bangun image container:

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

    Ganti kode berikut:

    • PROJECT_ID: project ID Anda.
    • LOCATION:nama lokasi registry.
    • IMAGE_NAME: nama untuk image container, misalnya: ffmpeg-image.

    Cloud Run menggunakan jenis mesin yang lebih besar untuk mengurangi waktu build.

  3. Men-deploy tugas:

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

    Ganti kode berikut:

    • PROJECT_ID: project ID Anda.
    • REGION: nama region. Catatan: Region ini harus sama dengan region tempat Anda memiliki kuota GPU.
    • IMAGE_NAME: nama untuk image container, misalnya, ffmpeg-image.

    Jika ini adalah pertama kalinya Anda men-deploy dari sumber di project ini, Cloud Run akan meminta Anda untuk membuat repositori Artifact Registry default.

Menjalankan tugas

Untuk menjalankan tugas, ikuti langkah-langkah berikut:

  1. Upload contoh video untuk dienkode:

    gcloud storage cp gs://cloud-samples-data/video/cat.mp4 gs://preprocessing-PROJECT_ID
    
  2. Menjalankan tugas:

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

    File entrypoint.sh memerlukan file input, file output, dan argumen apa pun untuk dikirim ke FFmpeg.

  3. Tinjau log Cloud Run untuk memastikan video telah ditranskode:

    gcloud run jobs logs read video-encoding-job --region REGION
    
  4. Download video yang telah di-transcoding:

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

Pembersihan

Agar akun Google Cloud Anda tidak dikenai biaya tambahan, hapus semua resource yang Anda deploy dengan panduan memulai ini.

Menghapus repositori Anda

Cloud Run hanya mengenakan biaya untuk waktu eksekusi tugas Anda. Namun, Anda mungkin tetap dikenai biaya atas penyimpanan image container di Artifact Registry. Untuk menghapus repositori Artifact Registry, ikuti langkah-langkah di bagian Menghapus repositori dalam dokumentasi Artifact Registry.

Menghapus tugas Anda

Tugas Cloud Run hanya dikenai biaya saat tugas dijalankan. Untuk menghapus tugas Cloud Run, ikuti salah satu langkah berikut:

Konsol

Untuk menghapus tugas:

  1. Di konsol Google Cloud , buka Cloud Run:

    Buka Cloud Run

  2. Temukan tugas yang ingin Anda hapus dalam daftar tugas, lalu klik kotak centang tugas tersebut untuk memilihnya.

  3. Klik Hapus. Tindakan ini akan menghentikan semua eksekusi tugas yang sedang berlangsung dan semua instance container yang sedang berjalan.

gcloud

Untuk menghapus tugas, jalankan perintah berikut:

gcloud run jobs delete JOB_NAME

Ganti JOB_NAME dengan nama tugas.

Menghapus project pengujian Anda

Menghapus project Google Cloud Anda akan menghentikan penagihan untuk semua resource dalam project tersebut. Untuk merilis semua resource Google Cloud di project Anda, ikuti langkah-langkah berikut:

    Menghapus project Google Cloud :

    gcloud projects delete PROJECT_ID

Langkah berikutnya