我们面临的问题是很多人想在我们的高性能计算集群上运行不同的科学软件。每个用户都需要一组不同的库和库版本,我们不希望管理员每次都处理新库的安装。
因此,我们正在考虑为此目的使用 docker 容器:每个用户都可以使用他需要的用户空间库设置自己的容器,然后使用该容器运行批处理作业。
然而,正如我所看到的,docker 主要专注于服务而不是批处理作业:通常你有一个(例如 web)服务,它应该一直运行并处理新作业(这基本上总是与 new 相同的任务输入数据)一旦他们进来。
我们的情况完全不同:新用户应该能够设置应该在硬件上运行的新任务,并且应该为他的批处理作业获得一定数量的资源。
因此,我想知道是否已经有针对这种情况的解决方案。我看了一下https://github.com/NERSC/shifter似乎朝着正确的方向发展,但发展停滞不前。
我们将 docker 容器广泛用于临时批处理类型的作业。在我们的例子中,它是密集的 3D 成像处理,但每个容器都处理数千个相关图像的“批次”。我们发现这个用例运行良好,没有理由不使用 docker。
在设计解决方案时,需要考虑以下几点:
-rm
标志运行容器,以便容器在完成后自动删除。ActiveEon 的 ProActive是最初为 HPC 集群设计的批处理调度程序。它包括在容器内启动任务的功能。本文通过 Docker 容器中的 R 包进行演示。
关于设计问题:
最后,如果需要更多容量,另一个功能是能够在云(公共或私有)中爆发。