我如何 运行 Google Cloud 中的无服务器批处理作业
How do I run a serverless batch job in Google Cloud
我有一个批处理作业需要几个小时才能完成 运行。我怎样才能 运行 在 Google Cloud 上以无服务器方式进行此操作?
AppEngine、Cloud Functions 和 Cloud 运行 限制为 10-15 分钟。我不想在 Apache Beam 中重写我的代码。
是否有与 Google Cloud 上的 AWS Batch 等效的产品?
Google Cloud 不提供与 AWS Batch 相当的产品(参见 https://cloud.google.com/docs/compare/aws/#service_comparisons)。
相反,您需要使用 Cloud Tasks 或 Pub/Sub 将工作委派给其他产品,例如 Compute Engine,但这无法以 "serverless" 方式执行此操作。
注意:Cloud 运行 和 Cloud Functions 现在最多可以持续 60 分钟。如果您有一份需要数小时的工作,下面的答案仍然是一个可行的方法。
Vertex AI Training 是无服务器且长期存在的。将批处理代码包装在 Docker 容器中,推送到 gcr.io 然后执行:
gcloud ai custom-jobs create \
--region=LOCATION \
--display-name=JOB_NAME \
--worker-pool-spec=machine-type=MACHINE_TYPE,replica-count=REPLICA_COUNT,executor-image-uri=EXECUTOR_IMAGE_URI,local-package-path=WORKING_DIRECTORY,script=SCRIPT_PATH
您可以 运行 任意 Docker 容器——它不一定是机器学习工作。详情见:
https://cloud.google.com/vertex-ai/docs/training/create-custom-job#create_custom_job-gcloud
我遇到过同样的问题。就我而言,我选择了:
- Cloud Scheduler 通过推送到 Pub/Sub 来启动作业。
- Pub/Sub 触发 Cloud Functions。
- 安装 Compute Engine 实例的 Cloud Functions。
- Compute Engine 运行批处理工作负载并自动终止实例
一旦完成。您可以通过 post 在媒体上阅读:
https://link.medium.com/1K3NsElGYZ
它可能会帮助您入门。还有一个跟进 post 展示了如何在 Compute Engine 实例中使用 Docker 容器:https://medium.com/google-cloud/serverless-batch-workload-on-gcp-adding-docker-and-container-registry-to-the-mix-558f925e1de1
您可以使用云 运行。在撰写本文时,Cloud 运行(完全托管)的超时增加到 60 分钟,但处于测试阶段。
https://cloud.google.com/run/docs/configuring/request-timeout
Important: Although Cloud Run (fully managed) has a maximum timeout of 60 minutes, only timeouts of 15 minutes or less are generally available: setting timeouts greater than 15 minutes is a Beta feature.
这个 to a 也适用于您:
简而言之:
- 首先docker调整你的批处理。
- 然后,创建实例:
- 使用 container-optmized 图片
- 并使用启动脚本拉取您的 docker 图像,运行它,最后关闭机器。
批量计算的另一种替代方法是使用 Google Cloud Lifesciences。
使用 Cloud Life Sciences 的示例应用程序是 dsub。
我发现自己正在寻找这个问题的解决方案,并构建了与 mesmacosta 在不同答案中描述的类似的东西,其形式是名为 gcp-runbatch.
的可重用工具。
如果您可以将工作负载打包到 Docker 映像中,那么您可以 运行 使用 gcp-runbatch。触发后,它将执行以下操作:
- 创建新虚拟机
- VM 启动时,
docker run
指定的图像
- 当
docker run
退出时,VM将被删除
支持的部分功能:
- 从命令行调用批处理工作负载,或部署为 Cloud Functions 并以这种方式调用(例如,通过 Cloud Scheduler 触发批处理工作负载)
- stdout 和 stderr 将通过管道传输到 Cloud Logging
- 环境变量可以由调用者指定,也可以从 Secret Manager 中提取
下面是命令行调用示例:
$ gcp-runbatch \
--project-id=long-octane-350517 \
--zone=us-central1-a \
--service-account=1234567890-compute@developer.gserviceaccount.com \
hello-world
Successfully started instance runbatch-38408320. To tail batch logs run:
CLOUDSDK_PYTHON_SITEPACKAGES=1 gcloud beta --project=long-octane-350517
logging tail 'logName="projects/long-octane-350517/logs/runbatch" AND
resource.labels.instance_id="runbatch-38408320"' --format='get(text_payload)'
我有一个批处理作业需要几个小时才能完成 运行。我怎样才能 运行 在 Google Cloud 上以无服务器方式进行此操作?
AppEngine、Cloud Functions 和 Cloud 运行 限制为 10-15 分钟。我不想在 Apache Beam 中重写我的代码。
是否有与 Google Cloud 上的 AWS Batch 等效的产品?
Google Cloud 不提供与 AWS Batch 相当的产品(参见 https://cloud.google.com/docs/compare/aws/#service_comparisons)。
相反,您需要使用 Cloud Tasks 或 Pub/Sub 将工作委派给其他产品,例如 Compute Engine,但这无法以 "serverless" 方式执行此操作。
注意:Cloud 运行 和 Cloud Functions 现在最多可以持续 60 分钟。如果您有一份需要数小时的工作,下面的答案仍然是一个可行的方法。
Vertex AI Training 是无服务器且长期存在的。将批处理代码包装在 Docker 容器中,推送到 gcr.io 然后执行:
gcloud ai custom-jobs create \
--region=LOCATION \
--display-name=JOB_NAME \
--worker-pool-spec=machine-type=MACHINE_TYPE,replica-count=REPLICA_COUNT,executor-image-uri=EXECUTOR_IMAGE_URI,local-package-path=WORKING_DIRECTORY,script=SCRIPT_PATH
您可以 运行 任意 Docker 容器——它不一定是机器学习工作。详情见:
https://cloud.google.com/vertex-ai/docs/training/create-custom-job#create_custom_job-gcloud
我遇到过同样的问题。就我而言,我选择了:
- Cloud Scheduler 通过推送到 Pub/Sub 来启动作业。
- Pub/Sub 触发 Cloud Functions。
- 安装 Compute Engine 实例的 Cloud Functions。
- Compute Engine 运行批处理工作负载并自动终止实例 一旦完成。您可以通过 post 在媒体上阅读: https://link.medium.com/1K3NsElGYZ
它可能会帮助您入门。还有一个跟进 post 展示了如何在 Compute Engine 实例中使用 Docker 容器:https://medium.com/google-cloud/serverless-batch-workload-on-gcp-adding-docker-and-container-registry-to-the-mix-558f925e1de1
您可以使用云 运行。在撰写本文时,Cloud 运行(完全托管)的超时增加到 60 分钟,但处于测试阶段。
https://cloud.google.com/run/docs/configuring/request-timeout
Important: Although Cloud Run (fully managed) has a maximum timeout of 60 minutes, only timeouts of 15 minutes or less are generally available: setting timeouts greater than 15 minutes is a Beta feature.
这个
简而言之:
- 首先docker调整你的批处理。
- 然后,创建实例:
- 使用 container-optmized 图片
- 并使用启动脚本拉取您的 docker 图像,运行它,最后关闭机器。
批量计算的另一种替代方法是使用 Google Cloud Lifesciences。
使用 Cloud Life Sciences 的示例应用程序是 dsub。
我发现自己正在寻找这个问题的解决方案,并构建了与 mesmacosta 在不同答案中描述的类似的东西,其形式是名为 gcp-runbatch.
的可重用工具。如果您可以将工作负载打包到 Docker 映像中,那么您可以 运行 使用 gcp-runbatch。触发后,它将执行以下操作:
- 创建新虚拟机
- VM 启动时,
docker run
指定的图像 - 当
docker run
退出时,VM将被删除
支持的部分功能:
- 从命令行调用批处理工作负载,或部署为 Cloud Functions 并以这种方式调用(例如,通过 Cloud Scheduler 触发批处理工作负载)
- stdout 和 stderr 将通过管道传输到 Cloud Logging
- 环境变量可以由调用者指定,也可以从 Secret Manager 中提取
下面是命令行调用示例:
$ gcp-runbatch \
--project-id=long-octane-350517 \
--zone=us-central1-a \
--service-account=1234567890-compute@developer.gserviceaccount.com \
hello-world
Successfully started instance runbatch-38408320. To tail batch logs run:
CLOUDSDK_PYTHON_SITEPACKAGES=1 gcloud beta --project=long-octane-350517
logging tail 'logName="projects/long-octane-350517/logs/runbatch" AND
resource.labels.instance_id="runbatch-38408320"' --format='get(text_payload)'