本教程介绍了如何使用 Cloud Run 作业转码低优先级的离线视频。
目标
在本教程中,您将执行以下操作:
- 创建 Cloud Storage 存储分区,用于存储要处理的视频和编码结果。
- 使用 GPU 部署 Cloud Run 作业,以加速视频转码。
- 运行作业,并确保视频已成功转码。
费用
在本文档中,您将使用 Google Cloud的以下收费组件:
如需根据您的预计使用量来估算费用,请使用价格计算器。
准备工作
- 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.
-
如果您使用的是外部身份提供方 (IdP),则必须先使用联合身份登录 gcloud CLI。
-
如需初始化 gcloud CLI,请运行以下命令:
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
(
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.
-
如果您使用的是外部身份提供方 (IdP),则必须先使用联合身份登录 gcloud CLI。
-
如需初始化 gcloud CLI,请运行以下命令:
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
(
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 - 将区域设置为环境变量:
export REGION=REGION
- 创建服务账号:
gcloud iam service-accounts create video-encoding
- 如需完成本教程,请前往配额和系统限额页面并进入 Cloud Run Admin API 下方以请求
Total Nvidia L4 GPU allocation without zonal redundancy, per project per region。或者,您也可以部署 Cloud Run 服务,以便自动获授予某个区域的 3 个 nvidia-l4 GPU 配额(不启用可用区级冗余)。 -
Artifact Registry Repository Administrator (
roles/artifactregistry.repoAdmin) -
Cloud Build Editor (
roles/cloudbuild.builds.editor) -
Cloud Run Admin (
roles/run.admin) -
Create Service Accounts (
roles/iam.serviceAccountCreator) -
Service Account User (
roles/iam.serviceAccountUser) -
在 Google Cloud 控制台中,前往 IAM 页面。
前往 IAM - 选择相应项目。
- 点击 授予访问权限。
-
在新的主账号字段中,输入您的用户标识符。这通常是用于部署 Cloud Run 服务的电子邮件地址。
- 在选择角色列表中,选择一个角色。
- 如需授予其他角色,请点击 添加其他角色,然后依次添加所需角色。
- 点击保存。
- 将 PROJECT_NUMBER 替换为您的 Google Cloud 项目编号。
- 将 PROJECT_ID 替换为您的 Google Cloud 项目 ID。
- 将 PRINCIPAL 替换为要为其添加绑定的账号。这通常是用于部署 Cloud Run 服务的电子邮件地址。
- 将 ROLE 替换为要添加到部署者账号的角色。
将示例代码库克隆到您的本地机器:
git clone https://github.com/GoogleCloudPlatform/cloud-run-samples切换到包含 Cloud Run 示例代码的目录:
cd cloud-run-samples/jobs-video-encoding创建一个存储分区以存储处理前的视频:
gcloud storage buckets create gs://preprocessing-PROJECT_ID \ --location LOCATION替换以下内容:
- PROJECT_ID:您的项目 ID。
- LOCATION:Cloud Storage 位置。
向服务账号授予从此存储分区读取数据的权限:
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。
创建一个存储分区以存储处理后的转码视频:
gcloud storage buckets create gs://transcoded-PROJECT_ID \ --location LOCATION替换以下内容:
- PROJECT_ID:您的项目 ID。
- LOCATION:Cloud Storage 位置。
向服务账号授予读取和写入此存储分区的权限:
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。
转到示例目录:
cd cloud-run-samples/jobs-video-encoding如果默认 Cloud Run 注册表尚不存在,请创建一个 Artifact Registry:
gcloud artifacts repositories create cloud-run-source-deploy \ --repository-format=docker \ --location LOCATION将 LOCATION 替换为注册表所在位置的名称。
构建容器映像:
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 使用资源规模更大的机器类型来缩短构建时间。
部署作业:
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 代码库。
上传要编码的示例视频:
gcloud storage cp gs://cloud-samples-data/video/cat.mp4 gs://preprocessing-PROJECT_ID运行该作业:
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 的任何实参。查看 Cloud Run 日志,确保视频已转码:
gcloud run jobs logs read video-encoding-job --region REGION下载转码后的视频:
gcloud storage cp gs://transcoded-PROJECT_ID/encoded_cat.mp4 .在 Google Cloud 控制台中,前往 Cloud Run:
在作业列表中找到要删除的作业,然后点击该作业对应的复选框以将其选中。
点击删除。这会终止所有正在进行的作业执行和所有正在运行的容器实例。
- 探索其他 Cloud Run 演示、教程和示例。
所需的角色
如需获得完成本教程所需的权限,请让您的管理员为您授予项目的以下 IAM 角色:
如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。
授予角色
控制台
gcloud
如需向您在项目中的账号授予所需的 IAM 角色,请执行以下操作:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=PRINCIPAL \ --role=ROLE
您需要进行如下替换:
准备申请材料
如需检索可用的代码示例,请执行以下操作:
创建 Cloud Storage 存储桶
如需存储待处理的视频并保存编码结果,请创建以下两个 Cloud Storage 存储分区:
部署 Cloud Run 作业
使用示例代码库中的 Dockerfile 并装载您创建的存储分区来创建 Cloud Run 作业:
运行作业
如需运行作业,请按以下步骤操作:
清理
为避免您的 Google Cloud 账号产生额外费用,请删除您在本快速入门中部署的所有资源。
删除仓库
Cloud Run 仅针对作业的执行时间收费。不过,您可能仍需要支付将容器映像存储在 Artifact Registry 中而产生的相关费用。如需删除 Artifact Registry 仓库,请按照 Artifact Registry 文档中删除仓库的步骤操作。
删除作业
Cloud Run 作业仅在作业任务执行时产生费用。如需删除 Cloud Run 作业,请按照以下步骤之一操作:
控制台
要删除任务,请执行以下操作:
gcloud
要删除作业,请运行以下命令:
gcloud run jobs delete JOB_NAME
将 JOB_NAME 替换为作业的名称。
删除测试项目
删除 Google Cloud 项目后,系统即会停止对该项目中的所有资源计费。如需释放项目中的所有 Google Cloud 资源,请按照以下步骤操作:
Delete a Google Cloud project:
gcloud projects delete PROJECT_ID