Transcoding video yang diakselerasi GPU dengan FFmpeg pada tugas Cloud Run

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

Tujuan

Dalam tutorial ini, Anda akan melakukan hal-hal berikut:

Biaya

Di 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. 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.
  2. Install the Google Cloud CLI.

  3. Jika Anda menggunakan penyedia identitas (IdP) eksternal, Anda harus login ke gcloud CLI dengan identitas gabungan Anda terlebih dahulu.

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

    gcloud init
  5. 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 the resourcemanager.projects.create permission. Learn how to grant roles.
    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with 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_ID with your Google Cloud project name.

  6. Verify that billing is enabled for your Google Cloud project.

  7. Install the Google Cloud CLI.

  8. Jika Anda menggunakan penyedia identitas (IdP) eksternal, Anda harus login ke gcloud CLI dengan identitas gabungan Anda terlebih dahulu.

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

    gcloud init
  10. 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 the resourcemanager.projects.create permission. Learn how to grant roles.
    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with 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_ID with your Google Cloud project name.

  11. Verify that billing is enabled for your Google Cloud project.

  12. 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 the serviceusage.services.enable permission. Learn how to grant roles.

    gcloud services enable run.googleapis.com cloudbuild.googleapis.com artifactregistry.googleapis.com
  13. Tetapkan region Anda sebagai variabel lingkungan:
    export REGION=REGION
  14. Membuat akun layanan:
    gcloud iam service-accounts create video-encoding
  15. Minta Total Nvidia L4 GPU allocation without zonal redundancy, per project per region, di bagian Cloud Run Admin API di halaman Kuota dan batas sistem untuk menyelesaikan tutorial ini. Atau, Anda dapat men-deploy layanan Cloud Run untuk secara otomatis menerima pemberian kuota GPU nvidia-l4 sebanyak 3 (redundansi zona nonaktif) untuk suatu region.
  16. 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 Tambahkan peran lain, lalu tambahkan setiap 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 Anda tambahkan binding-nya. Biasanya berupa alamat email yang digunakan untuk men-deploy layanan Cloud Run.
    • ROLE dengan peran yang Anda tambahkan ke akun deployer.

    Menyiapkan permohonan pendaftaran

    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.iam.gserviceaccount.com" \
        --role="roles/storage.objectViewer"
      

      Ganti PROJECT_ID dengan project ID Anda.

    3. Buat bucket untuk menyimpan video yang ditranskode 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.iam.gserviceaccount.com" \
        --role="roles/storage.objectAdmin"
      

      Ganti PROJECT_ID dengan project ID Anda.

    Men-deploy tugas Cloud Run

    Buat tugas Cloud Run dengan 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 registri.

    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 registri.
      • IMAGE_NAME: nama untuk image container, misalnya: ffmpeg-image.

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

    3. 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.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
      

      Ganti kode berikut:

      • PROJECT_ID: Project ID Anda.
      • REGION: nama region. Catatan: Ini harus berupa region yang sama dengan yang 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 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. Jalankan 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 yang akan dikirim ke FFmpeg.

    3. Tinjau log Cloud Run untuk memastikan video ditranskode:

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

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

    Pembersihan

    Untuk menghindari biaya tambahan pada akun Google Cloud Anda, 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 Menghapus repositori dalam dokumentasi Artifact Registry.

    Menghapus tugas Anda

    Tugas Cloud Run hanya menimbulkan biaya saat tugas sedang dieksekusi. 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 akan menghentikan penagihan untuk semua resource dalam project tersebut. Untuk melepaskan semua Google Cloud resource di project Anda, ikuti langkah-langkah berikut:

      Delete a Google Cloud project:

      gcloud projects delete PROJECT_ID

    Langkah berikutnya