簡體   English   中英

如何在 Google Cloud 中運行無服務器批處理作業

[英]How do I run a serverless batch job in Google Cloud

我有一個批處理作業需要幾個小時才能運行。 如何在 Google Cloud 上以無服務器方式運行它?

AppEngine、Cloud Functions 和 Cloud Run 限制為 10-15 分鍾。 我不想在 Apache Beam 中重寫我的代碼。

Google Cloud 上是否有與 AWS Batch 等效的產品?

注意:Cloud Run 和 Cloud Functions 現在可以持續長達 60 分鍾。 如果您有一份多小時的工作,下面的答案仍然是一種可行的方法。

Vertex 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

Google Cloud 不提供與 AWS Batch 類似的產品(請參閱https://cloud.google.com/docs/compare/aws/#service_comparisons )。

相反,您需要使用 Cloud Tasks 或 Pub/Sub 將工作委派給另一個產品,例如 Compute Engine,但這缺乏以“無服務器”方式執行此操作的能力。

如何使 GCE 實例在其部署的容器完成時停止 也將為您工作:

簡而言之:

  • 首先 dockerize 你的批處理。
  • 然后,創建一個實例:
    • 使用容器優化鏡像
    • 並使用啟動腳本提取 docker 映像,運行它,最后關閉機器。

我遇到了同樣的問題。 就我而言,我去了:

  1. Cloud Scheduler 通過推送到 Pub/Sub 來啟動作業。
  2. Pub/Sub 觸發 Cloud Functions。
  3. Cloud Functions 掛載 Compute Engine 實例。
  4. Compute Engine 運行批處理工作負載並在完成后自動終止實例。 您可以在媒體上通過帖子閱讀: https://link.medium.com/1K3NsElGYZ

它可能會幫助您入門。 還有一篇后續文章展示了如何在 Compute Engine 實例中使用 Docker 容器: https://medium.com/google-cloud/serverless-batch-workload-on-gcp-adding-docker-and-container-registry -to-the-mix-558f925e1de1

您可以使用雲運行。 在撰寫本文時,Cloud Run(完全托管)的超時時間增加到 60 分鍾,但處於測試階段。

https://cloud.google.com/run/docs/configuring/request-timeout

重要提示:雖然 Cloud Run(完全托管)的最大超時時間為 60 分鍾,但通常只有 15 分鍾或更短的超時時間可用:設置大於 15 分鍾的超時時間是一項 Beta 功能。

批處理計算的另一種選擇是使用Google Cloud Lifesciences

使用 Cloud Life Sciences 的示例應用程序是dsub

或查看Cloud Life Sciences 快速入門文檔

我發現自己正在尋找解決此問題的方法,並以名為gcp-runbatch的可重用工具的形式構建了類似於 mesmacosta 在另一個答案中描述的內容。

如果您可以將您的工作負載 package 轉換為 Docker 映像,那么您可以使用 gcp-runbatch 運行它。 觸發后,它將執行以下操作:

  1. 創建一個新的虛擬機
  2. 在VM啟動時, docker run指定的鏡像
  3. docker run退出時,VM 將被刪除

支持的一些功能:

  • 從命令行調用批處理工作負載,或部署為 Cloud Function 並以這種方式調用(例如,通過 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)'

最后,谷歌發布了(目前是 Beta 版)Cloud Batch。 女巫完全按照您的意願行事。 您推送作業(容器或腳本)並運行。 就那么簡單。 https://cloud.google.com/batch/docs/get-started

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM