将长期运行的高性能计算应用程序部署到GCP的最佳方法

时间:2019-10-06 20:00:26

标签: gcloud

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

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

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

我希望尽可能简化此过程,以便我们有一个“一键单击”或“一命令”解决方案,但我不确定执行此操作的最佳方法。

到目前为止,从我所读到的内容来看,容器似乎是一个不错的选择,但是我对docker并不了解。

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

是否有更好的gcloud功能比容器更适合我们的目的?

我正在努力获取有关这些基本问题的信息,看来容器教程主要由网络应用程序主导。

2 个答案:

答案 0 :(得分:1)

一个有趣的问题。

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

一种可能性是使用Cloud Pub / Sub进行Cloud Runtrigger个工作。我也看到了async capabilities,这可能很有趣(我没有探索过)。

供您考虑的另一个运行时是Kubernetes本身。虽然Kubernetes在让Google,AWS或Azure为您管理集群方面需要一定的开销(我强烈建议您不要自己运行Kubernetes),并且随着规模的扩展,集群节点的容量和工作需求会有些惯性数量的工作,您将满足这些需求。 Kubernetes的一个很大的优势是它可以根据需要扩展(节点)。您告诉Kubernetes运行X容器作业,它就可以执行(并清理)而无需您进行太多额外的管理。

我偏向于从默认容器优先的角度来处理容器与图像问题。在这种情况下,您可以从解决方案的容器化中获得一些好处:

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

如果选择使用容器,一个(有益的??)工作流程更改是,在使用它们之前需要先构建图像。诸如Knative之类的东西将这些步骤结合在一起,但是,我一开始会坚持这样做。常见的解决方案是从您的源代码存储库触发构建(DockerGitHub ActionsCloud Build)。通常,您会针对生成的图像运行测试,但是您也可能会以这种方式运行机器学习任务。

您的容器将只包含您的代码。构建容器映像时,您将pip install,也许是pip install --requirement requirements.txt来拉出适当的包装。在这种情况下,最好将您的数据(模型?)与代码分开保存。当您的运行时平台为您运行容器时,您将向容器提供配置信息(环境变量和|或标志)。

HTH!

答案 1 :(得分:0)

与容器相比,使用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 repo安装软件包。您可以在关闭之前执行数据集构建。

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

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


您可以考虑查看Docker,以获取有关容器的更多信息。