如何在 Google Cloud 中运行无服务器批处理作业



我有一个批处理作业,需要几个小时才能运行。如何在谷歌云上以无服务器的方式运行它?

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 映像,运行它,并在最后关闭计算机。

我遇到了同样的问题。 就我而言,我选择了:

  1. 云计划程序,通过推送到发布/订阅来启动作业。
  2. 发布/订阅触发云函数。
  3. 挂载计算引擎实例的云函数。
  4. 计算引擎运行批处理工作负载并自动终止实例 一旦完成。你可以在媒体上阅读我的帖子: 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 运行它。触发时,它将执行以下操作:

  1. 创建新虚拟机
  2. VM 启动时,docker run指定的映像
  3. 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 小时以上的批处理作业。

相关内容

  • 没有找到相关文章

最新更新