并发 docker 容器可以加速计算吗?
Can concurrent docker containers speed-up computations?
作为免责声明,我只想说我是 Docker 的初学者,因此这个问题听起来有点“愚蠢”。
我正在探索并行化选项以加速某些计算。我正在使用 Python,所以我按照官方指南创建了 my first image and then run it as a container。
目前,我使用一个虚拟程序生成一个非常大的 np 随机矩阵(假设为 4000 x 4000),然后找出每一行中有多少元素落入预定义范围 [min, max]。
然后我用不同的端口和名称启动了同一图像的第二个容器。我没有得到任何我期望的计算速度,因为:
- a) 我还没有开发任何机制让这两个容器以某种方式“相互交谈”并共享中间结果
- b) 我不确定程序本身是否适合以这种方式进行加速。
所以我上面a,b对应的问题是:
- 并行性是 docker 部署支持的“特性”吗?在什么意义上?它只是负载共享吗?如果我实施负载均衡器,docker 如何知道如何将中间结果从一个容器传输到另一个容器?
- 如果上一个问题不“正确”,那么我是否需要编写程序的“并行”版本以分配给每个容器?这不是等同于编写我的程序的 MPI 版本并将它们分配到我系统中的不同内核吗?那么 docker 架构的好处是什么?
提前致谢
Docker 只是一种部署应用程序的方式 - 它本身并不允许您仅通过使用 Docker 来实现 'support' 并行性。您的应用程序本身需要支持并行性。 Docker(和 Kubernetes 等)可以帮助您轻松地进行并行扩展,但您的应用程序需要能够支持这种扩展。
因此,如果您现在可以 运行 并行应用程序的多个实例(但是您可能会这样做)并且它不会带来任何性能改进,那么 Docker 将无济于事。如果 运行 现在使用多个实例 确实 提高了性能,那么 Docker 将有助于横向扩展。
作为免责声明,我只想说我是 Docker 的初学者,因此这个问题听起来有点“愚蠢”。
我正在探索并行化选项以加速某些计算。我正在使用 Python,所以我按照官方指南创建了 my first image and then run it as a container。
目前,我使用一个虚拟程序生成一个非常大的 np 随机矩阵(假设为 4000 x 4000),然后找出每一行中有多少元素落入预定义范围 [min, max]。
然后我用不同的端口和名称启动了同一图像的第二个容器。我没有得到任何我期望的计算速度,因为:
- a) 我还没有开发任何机制让这两个容器以某种方式“相互交谈”并共享中间结果
- b) 我不确定程序本身是否适合以这种方式进行加速。
所以我上面a,b对应的问题是:
- 并行性是 docker 部署支持的“特性”吗?在什么意义上?它只是负载共享吗?如果我实施负载均衡器,docker 如何知道如何将中间结果从一个容器传输到另一个容器?
- 如果上一个问题不“正确”,那么我是否需要编写程序的“并行”版本以分配给每个容器?这不是等同于编写我的程序的 MPI 版本并将它们分配到我系统中的不同内核吗?那么 docker 架构的好处是什么?
提前致谢
Docker 只是一种部署应用程序的方式 - 它本身并不允许您仅通过使用 Docker 来实现 'support' 并行性。您的应用程序本身需要支持并行性。 Docker(和 Kubernetes 等)可以帮助您轻松地进行并行扩展,但您的应用程序需要能够支持这种扩展。
因此,如果您现在可以 运行 并行应用程序的多个实例(但是您可能会这样做)并且它不会带来任何性能改进,那么 Docker 将无济于事。如果 运行 现在使用多个实例 确实 提高了性能,那么 Docker 将有助于横向扩展。