【发布时间】:2021-04-11 01:13:04
【问题描述】:
我创建了 15 台包含相同机器学习程序的服务器。但是,每个服务器在运行时都有不同的参数。它由主机名决定。每台服务器还有一个 5 个 1gb 的 pkl 文件的副本,其中包含训练数据。
例如,我现在在云中创建了 15 台服务器,名称如下。
ml-node-1
ml-node-2
ml-node-3
..
ml-node-15
所以当我的程序在ml-node-1 上运行时,它看起来像这样,python3 mlscript.py $HOSTNAME.csv,它将运行python3 mlscript.py ml-node-1.csv。每台服务器都将运行为其主机名指定的脚本。
我的问题是我必须在每台服务器运行之前创建 15 个 5gb pkl 数据的副本。我发现这非常低效且成本高昂,因此我正在寻找 Kubernetes 作为解决方案。从文档中,我可以看到 pod 中的容器可以共享一个持久卷。这样我也许可以减少复制 5gb pkl 数据 15 次。
但是,我试图弄清楚服务器/容器的命名。我认为我需要 1 个具有共享持久卷和 15 个容器的 pod。根据我从文档中了解到的https://kubernetes.io/docs/concepts/containers/container-environment/,Pod 中的所有容器都将共享相同的主机名。
如何区分它们并为它们指定特定的主机名,以便我仍然可以在每个容器中运行不同的参数?我的 docker 镜像是带有我的机器学习脚本的标准 debian 镜像。
【问题讨论】:
-
在 Kubernetes 等可扩展的多主机环境中,使用主机名可能不是最佳选择。
-
@KlausD。有什么建议 ?我以前从未使用过这个,所以我不知道从哪里开始。
-
有一个
input目录,其中包含可供容器拾取的可用文件,它们重命名并分配给自己(可能使用随机生成的密钥)- 可以拾取任何未分配的文件通过容器进行处理。这样,您可以根据需要在 k8s 中上下扩展您的环境(如果您需要更多节点/pod),并让容器处理多个文件,因为它们仍然可用。 -
这将是您在
mlscript.py文件中编写的代码,它会在启动时生成一个唯一的密钥,并监视一个目录以根据需要从中获取文件(您也可以使用消息队列,但现在这可能是过度工程)。 python 代码将永远运行,完成后不会退出 - 实际上是让您配置一个处理文件的处理器集群,并且可以通过 k8s 进行扩展。 -
不,Google Cloud Storage 将成为 Google 的对象存储替代品(我的真正意思是,不是块存储 - 抱歉!)
标签: python docker kubernetes debian google-kubernetes-engine