使用 google 容器处理多个作业

handle multiple jobs with google container

我有一个 docker 文件,它描述了一个经典的数据科学机器,上面安装了 pandassklearn 等...,我想从 google 云机通过 google 容器,并在某个通知到达时将我的 python 包和一些参数作为参数。

我必须 运行 我的 python 包在 100 个不同的数据集上,具有不同的访问密钥等...我的梦想是通过实例化我的 docker 文件的 100 个实例google 个容器并为它们提供我的 100 个不同的数据集和参数,因此它们可以非常快地产生输出。

另一种选择是实例化我的 docker 文件的一个实例,并将每个数据集和参数一个一个地赋予它,但这对我来说看起来要长得多。

我的问题是:

1- 这些解决方案中有一个比另一个更可行或更现实吗?

2- 是否有第三种解决方案以智能方式实例化此 docker 文件,以使我的计算速度更快且成本更低?

您可以利用 Kubernetes。 Kubernetes 是一个开源容器集群管理器。它在一组节点实例中调度任意数量的容器副本。主实例公开 Kubernetes API,通过它定义任务。 Kubernetes 在节点上生成容器来处理定义的任务。

容器的数量和类型可以根据需要动态修改。每个节点实例上的代理(kubelet)监视容器并在必要时重新启动它们。

Kubernetes 针对 Google 云平台进行了优化,但可以 运行 在任何物理机或虚拟机上。

两种解决方案都可以正常工作,您只是在问是否应该并行处理您的问题(这主要取决于您)。

如果您想 运行 并行处理您的工作负载,您将需要更多的计算资源。如果您希望能够 运行 按需 并行 (当信号到达时),您将需要准备好这些资源(空闲)或动态实例化它们(这更便宜,因为您只在使用时为计算付费)。

你可以有一个控制器进程来接受信号,扩大(或创建)一个 Google Container Engine 集群以获得所需数量的节点,然后将 N pods 提交给系统以执行你的工作。每个 pod 都可以使用环境变量进行参数化(您需要即时合成这些变量)。然后收集您的输出并在完成后缩减(或删除)集群。