【问题标题】:Best way to deploy long-running high-compute app to GCP将长时间运行的高计算应用程序部署到 GCP 的最佳方式
【发布时间】:2019-10-06 20:00:26
【问题描述】:

我有一个 python 应用程序,它为 GCP 上的机器学习任务构建数据集。

目前我必须启动我们拥有的 VM 实例,然后通过 SSH 进入并运行应用程序,这将在 2-24 小时内完成,具体取决于请求的数据集的大小。

数据集完成后,VM 需要关闭,因此我们不会产生额外费用。

我希望尽可能简化此过程,以便我们拥有“1 单击”或“1 命令”解决方案,但我不确定最佳方式。

从我目前所读到的内容来看,容器似乎是一个不错的选择,但我对 docker 缺乏经验。

我可以设置一个容器来pip install 来自我们私有 GitHub 的最新应用程序,并在关闭之前执行数据集构建吗?我如何将信息传递给容器,例如从哪里获取配置文件等?可以想象,我们会根据不同的配置文件同时生成多个数据集。

有没有比容器更有效的 gcloud 功能更适合我们的目的?

我正在努力获取有关这些基本问题的信息,容器教程似乎以网络应用为主。

【问题讨论】:

    标签: gcloud


    【解决方案1】:

    一个有趣的问题。

    拥有一个运行容器直到其进程完成的类似批处理的容器服务会很有用。我不确定是否存在这样的服务。我最熟悉谷歌云平台,它提供了丰富的计算和容器服务。但是 - 就您而言 - 这些主要通过(HTTP)请求进行扩展。

    一种可能是使用 Cloud Pub/Sub 的 Cloud Runtrigger 作业。我看到还有async capabilities,这可能很有趣(我还没有探索过)。

    您需要考虑的另一个运行时是 Kubernetes 本身。虽然 Kubernetes 在让 Google、AWS 或 Azure 为您管理集群时需要一些开销(我强烈建议您不要自己运行 Kubernetes),并且随着您的扩展,集群节点的容量与您的作业需求之间存在一些惯性工作的数量,你会平滑这些需求。 Kubernetes 的一大优势是它可以根据需要扩展(节点|pod)。您告诉 Kubernetes 运行 X 容器作业,它会执行(并清理)而不需要您进行太多额外的管理。

    我有偏见,主要从默认容器优先的角度来处理容器与图像问题。在这种情况下,您将从容器化解决方案中获得多项好处:

    • 可重现:相同的图像更有可能产生相同的结果
    • 可部署性:容器运行与管理操作系统、应用堆栈、一致性测试等。
    • 可维护:代表您的应用的图像更小,维护工作更少

    如果您选择使用容器,一个(有益的!?)工作流程变化是您需要在使用它们之前构建您的图像。像 Knative 这样的东西结合了这些步骤,但我最初会坚持自己做。一个常见的解决方案是从您的源代码存储库中触发构建(DockerGitHub ActionsCloud Build)。通常,您会针对构建的图像运行测试,但您也可以通过这种方式运行机器学习任务。

    您的容器将只包含您的代码。当你构建你的容器镜像时,你会pip install,也许pip install --requirement requirements.txt 来拉取适当的包。在有意义的情况下,您的数据(模型?)最好与您的代码分开。当您的运行时平台为您运行容器时,您需要向容器提供配置信息(环境变量和/或标志)。

    HTH!

    【讨论】:

      【解决方案2】:

      与容器相比,使用startup script 似乎更符合要求。 The instance always executes startup scripts as root,因此你可以做任何你喜欢的事情,因为命令将作为 root 执行。

      每次您的实例启动时,启动脚本都会执行自动化任务。启动脚本可以执行许多操作,例如安装软件、执行更新、打开服务以及脚本中定义的任何其他任务。

      请记住,启动脚本无法停止实例,但您可以 stop an instance through the guest operating system

      这将是您提出的问题的理想解决方案。这需要您在 Python 应用程序中进行一些小的更改,当数据集完成时操作系统会关闭。


      Q1) 我可以设置一个容器,将 pip install 来自我们私有 GitHub 的最新应用程序并在关闭之前执行数据集构建吗?

      A1) Medium 有一篇很棒的文章,介绍了从容器内的私有 git 存储库安装包。您可以在关闭之前执行数据集构建。

      Q2) 我如何将信息传递给容器,例如从哪里获取配置文件等?

      A2) 您可以使用ENV 设置环境变量。这些将在容器中可用。


      您可以考虑查看Docker 以了解有关容器的更多信息。

      【讨论】:

        猜你喜欢
        • 2011-02-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-12-04
        • 2017-01-11
        • 2010-09-05
        • 2023-03-29
        • 1970-01-01
        相关资源
        最近更新 更多