我有一个批处理作业,需要几个小时才能运行。如何在谷歌云上以无服务器的方式运行它?
AppEngine、Cloud Functions 和 Cloud Run 限制为 10-15 分钟。我不想在Apache Beam中重写我的代码。
是否有等效于 Google Cloud 上的 AWS Batch?
注意:Cloud Run 和 Cloud Functions 现在可以持续长达 60 分钟。 如果您有数小时的工作,下面的答案仍然是一种可行的方法。
顶点 AI 训练是无服务器且长期存在的。将批处理代码包装在 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 Batch:https://cloud.google.com/batch/docs/get-started#create-basic-job
Google Cloud 不提供与 AWS Batch 类似的产品(请参阅 https://cloud.google.com/docs/compare/aws/#service_comparisons(。
相反,您需要使用Cloud Tasks或Pub/Sub将工作委托给其他产品,例如Compute Engine,但这缺乏以"无服务器"方式执行此操作的能力。
最后,谷歌发布了(目前处于测试阶段(Cloud Batch,它完全可以满足您的需求。 您推送作业(容器或脚本(并运行。就这么简单。 https://cloud.google.com/batch/docs/get-started
这个答案 如何让 GCE 实例在其部署的容器完成后停止? 也将为您工作:
总之:
- 首先对批处理进行码头化。
- 然后,创建一个实例:
- 使用容器优化映像
- 并使用启动脚本来提取您的 docker 映像,运行它,并在最后关闭计算机。
我遇到了同样的问题。 就我而言,我选择了:
- 云计划程序,通过推送到发布/订阅来启动作业。
- 发布/订阅触发云函数。
- 挂载计算引擎实例的云函数。
- 计算引擎运行批处理工作负载并自动终止实例 一旦完成。你可以在媒体上阅读我的帖子: https://link.medium.com/1K3NsElGYZ
它可能会帮助您入门。还有一篇后续文章展示了如何在计算引擎实例中使用 Docker 容器:https://medium.com/google-cloud/serverless-batch-workload-on-gcp-adding-docker-and-container-registry-to-the-mix-558f925e1de1
您可以使用Cloud Run。在撰写本文时,Cloud Run(完全托管(的超时时间增加到 60 分钟,但处于测试阶段。
https://cloud.google.com/run/docs/configuring/request-timeout
重要提示:尽管 Cloud Run(完全托管(的最大超时时间为 60 分钟,但通常只有 15 分钟或更短的超时可用:将超时设置为大于 15 分钟是 Beta 版的一项功能。
批处理计算的另一种选择是使用Google Cloud Lifesciences。
使用云生命科学的示例应用程序是 dsub。
或者参阅云生命科学快速入门文档。
我发现自己正在寻找解决这个问题的方法,并以名为gcp-runbatch的可重用工具的形式构建了类似于mesmacosta在不同答案中描述的东西。
如果可以将工作负载打包到 Docker 映像中,则可以使用 gcp-runbatch 运行它。触发时,它将执行以下操作:
- 创建新虚拟机
- VM 启动时,
docker run
指定的映像 - 当
docker run
退出时,VM 将被删除
支持的一些功能:
- 从命令行调用批处理工作负载,或部署为云函数并以这种方式调用(例如,通过云调度程序触发批处理工作负载(
- stdout 和 stderr 将被传送到 Cloud Logging
- 环境变量可以由调用程序指定,也可以从机密管理器中提取
下面是一个命令行调用示例:
$ 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)'
GCP 于 22 年 7 月推出了新的"批处理"服务。它基本上是计算引擎与一些实用程序打包在一起,以轻松生产批处理作业 - 包括定义所需的资源,可执行文件(基于脚本或容器(以及定义运行计划。
还没有使用它,但似乎非常适合需要 1 小时以上的批处理作业。