在 Cloud Run 工作中,使用 FFmpeg 透過 GPU 加速影片轉碼

本教學課程說明如何使用 Cloud Run 工作,轉碼低優先順序的離線影片。

目標

在本教學課程中,您將完成下列學習內容:

費用

在本文件中,您會使用下列 Google Cloud的計費元件:

如要根據預測用量估算費用,請使用 Pricing Calculator

初次使用 Google Cloud 的使用者可能符合免費試用期資格。

事前準備

  1. 登入 Google Cloud 帳戶。如果您是 Google Cloud新手,歡迎 建立帳戶,親自評估產品在實際工作環境中的成效。新客戶還能獲得價值 $300 美元的免費抵免額,可用於執行、測試及部署工作負載。
  2. 安裝 Google Cloud CLI。

  3. 若您採用的是外部識別資訊提供者 (IdP),請先使用聯合身分登入 gcloud CLI

  4. 執行下列指令,初始化 gcloud CLI:

    gcloud init
  5. 建立或選取 Google Cloud 專案

    選取或建立專案所需的角色

    • 選取專案:選取專案時,不需要具備特定 IAM 角色,只要您已獲授角色,即可選取任何專案。
    • 建立專案:如要建立專案,您需要具備專案建立者角色 (roles/resourcemanager.projectCreator),其中包含 resourcemanager.projects.create 權限。瞭解如何授予角色
    • 建立 Google Cloud 專案:

      gcloud projects create PROJECT_ID

      PROJECT_ID 替換為您要建立的 Google Cloud 專案名稱。

    • 選取您建立的 Google Cloud 專案:

      gcloud config set project PROJECT_ID

      PROJECT_ID 替換為 Google Cloud 專案名稱。

  6. 確認專案已啟用計費功能 Google Cloud

  7. 安裝 Google Cloud CLI。

  8. 若您採用的是外部識別資訊提供者 (IdP),請先使用聯合身分登入 gcloud CLI

  9. 執行下列指令,初始化 gcloud CLI:

    gcloud init
  10. 建立或選取 Google Cloud 專案

    選取或建立專案所需的角色

    • 選取專案:選取專案時,不需要具備特定 IAM 角色,只要您已獲授角色,即可選取任何專案。
    • 建立專案:如要建立專案,您需要具備專案建立者角色 (roles/resourcemanager.projectCreator),其中包含 resourcemanager.projects.create 權限。瞭解如何授予角色
    • 建立 Google Cloud 專案:

      gcloud projects create PROJECT_ID

      PROJECT_ID 替換為您要建立的 Google Cloud 專案名稱。

    • 選取您建立的 Google Cloud 專案:

      gcloud config set project PROJECT_ID

      PROJECT_ID 替換為 Google Cloud 專案名稱。

  11. 確認專案已啟用計費功能 Google Cloud

  12. 啟用 Cloud Run、Artifact Registry 和 Cloud Build API:

    啟用 API 時所需的角色

    如要啟用 API,您需要具備服務使用情形管理員 IAM 角色 (roles/serviceusage.serviceUsageAdmin),其中包含 serviceusage.services.enable 權限。瞭解如何授予角色

    gcloud services enable run.googleapis.com cloudbuild.googleapis.com artifactregistry.googleapis.com
  13. 將區域設為環境變數:
    export REGION=REGION
  14. 建立服務帳戶:
    gcloud iam service-accounts create video-encoding
  15. 在「配額和系統限制」頁面的 Cloud Run Admin API 下方,要求 Total Nvidia L4 GPU allocation without zonal redundancy, per project per region,完成本教學課程。或者,您也可以部署 Cloud Run 服務,系統會自動授予區域 3 個 nvidia-l4 GPU 配額 (可用區備援機制關閉)。

必要的角色

如要取得完成本教學課程所需的權限,請要求管理員在專案中授予您下列 IAM 角色:

如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。

您或許也能透過自訂角色或其他預先定義的角色,取得必要權限。

授予角色

控制台

  1. 前往 Google Cloud 控制台的「IAM」頁面。

    前往「IAM」頁面
  2. 選取專案。
  3. 按一下 「授予存取權」
  4. 在「New principals」(新增主體) 欄位中,輸入您的使用者 ID。這通常是部署 Cloud Run 服務時使用的電子郵件地址。

  5. 在「Select a role」(選取角色) 清單中,選取角色。
  6. 如要授予其他角色,請按一下「Add another role」(新增其他角色),然後新增其他角色。
  7. 按一下 [儲存]

gcloud

如要在專案中授予帳戶必要的 IAM 角色,請按照下列步驟操作:

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

更改項目:

  • PROJECT_NUMBER 改成您的 Google Cloud 專案編號。
  • PROJECT_ID 替換為 Google Cloud 專案 ID。
  • PRINCIPAL,並使用您要新增繫結的帳戶。這通常是用於部署 Cloud Run 服務的電子郵件地址。
  • ROLE,並將角色新增至部署者帳戶。

準備申請

如要擷取要使用的程式碼範例:

  1. 將範例存放區複製到本機電腦中:

    git clone https://github.com/GoogleCloudPlatform/cloud-run-samples
    
  2. 變更為包含 Cloud Run 範例程式碼的目錄:

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

建立 Cloud Storage 值區

如要儲存待處理的影片,以及儲存編碼結果,請建立下列兩個 Cloud Storage bucket:

  1. 建立值區,以便在處理影片前儲存影片:

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

    更改下列內容:

    • PROJECT_ID:您的專案 ID。
    • LOCATION:Cloud Storage 位置。
  2. 授予服務帳戶從這個 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"
    

    PROJECT_ID 替換為專案 ID。

  3. 建立值區,用於儲存處理後的轉碼影片:

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

    更改下列內容:

    • PROJECT_ID:您的專案 ID。
    • LOCATION:Cloud Storage 位置。
  4. 授予服務帳戶讀取及寫入這個 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"
    

    PROJECT_ID 替換為專案 ID。

部署 Cloud Run 工作

使用範例存放區中的 Dockerfile 建立 Cloud Run 作業,並掛接您建立的 bucket

  1. 前往範例目錄:

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

  1. 如果預設 Cloud Run 登錄檔不存在,請建立 Artifact Registry:

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

    LOCATION 替換為登錄檔位置的名稱。

  2. 建構容器映像檔:

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

    更改下列內容:

    • PROJECT_ID:您的專案 ID。
    • LOCATION:登錄檔位置的名稱。
    • IMAGE_NAME:容器映像檔的名稱,例如:ffmpeg-image

    Cloud Run 會使用較大的機型,縮短建構時間。

  3. 部署工作:

    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
    

    更改下列內容:

    • PROJECT_ID:您的專案 ID。
    • REGION:區域名稱。 注意:這必須是您有 GPU 配額的相同區域。
    • IMAGE_NAME:容器映像檔的名稱,例如 ffmpeg-image

    如果這是您第一次在這個專案中從來源部署,Cloud Run 會提示您建立預設的 Artifact Registry 存放區。

執行工作

如要執行這項工作,請按照下列步驟操作:

  1. 上傳要編碼的範例影片:

    gcloud storage cp gs://cloud-samples-data/video/cat.mp4 gs://preprocessing-PROJECT_ID
    
  2. 執行工作:

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

    entrypoint.sh 檔案需要輸入檔案、輸出檔案,以及要傳送至 FFmpeg 的任何引數。

  3. 查看 Cloud Run 記錄,確認影片已轉碼:

    gcloud run jobs logs read video-encoding-job --region REGION
    
  4. 下載轉碼後的影片:

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

清除所用資源

為避免系統向您的 Google Cloud 帳戶收取額外費用,請刪除您透過本快速入門導覽課程部署的所有資源。

刪除存放區

Cloud Run 只會針對作業執行時間收費。 不過,您可能仍須支付在 Artifact Registry 中儲存容器映像檔的費用。如要刪除 Artifact Registry 存放區,請按照 Artifact Registry 說明文件中的「刪除存放區」一節操作。

刪除工作

只有在執行工作時,Cloud Run 工作才會產生費用。如要刪除 Cloud Run 工作,請按照下列步驟操作:

控制台

如要刪除工作:

  1. 前往 Google Cloud 控制台的 Cloud Run:

    前往 Cloud Run

  2. 在工作清單中找出要刪除的工作,然後按一下核取方塊來選取。

  3. 按一下「Delete」(刪除)。這會終止所有進行中的工作執行作業和所有執行中的容器執行個體。

gcloud

如要刪除 Job,請執行下列指令:

gcloud run jobs delete JOB_NAME

JOB_NAME 改為工作名稱。

刪除測試專案

刪除 Google Cloud 專案後,系統就會停止對該專案中的所有資源收取費用。如要釋出專案中的所有 Google Cloud 資源,請按照下列步驟操作:

    刪除 Google Cloud 專案:

    gcloud projects delete PROJECT_ID

後續步驟