我们面临的问题是,许多人希望在我们的高性能计算集群上运行不同的科学软件。每个用户都需要一组不同的库和库版本,我们不希望管理员每次都处理新库的安装。
因此,我们正在考虑使用 docker 容器来实现这个目的:每个用户都可以使用他所需的用户空间库设置自己的容器,然后使用该容器运行批处理作业。
然而,在我看来,docker 主要专注于服务代替批处理作业:通常您有一个(例如 Web)服务,该服务应该一直运行并在新作业进入时立即处理新作业(基本上总是使用新输入数据的相同任务)。
我们的情况完全不同:新用户应该能够设置应在硬件上运行的新任务,并且应该为其批处理作业获取一定数量的资源。
因此,我想知道这种情况是否已经有解决方案。我查看了https://github.com/NERSC/shifter看上去方向正确,但发展却停滞了。
答案1
我们广泛使用 Docker 容器来处理临时批处理类型的作业。在我们的案例中,这是密集的 3D 图像处理,但每个容器都会处理数千张相关图像的“批次”。我们发现这种用例非常有效,没有理由不使用 Docker。
设计解决方案时需要考虑以下几点:
- 所有提交代码的人都是值得信赖的吗?如果不是,你需要好好考虑一下安全性。
- 确保使用标志运行容器
-rm
,以便容器在完成后自动删除。 - 运行本地 docker 注册表,这样 1)您不依赖外部注册表,2)您可以配置批处理服务器以根据需要自动提取图像。
- 跟踪一段时间内未使用的图像并将其从服务器中清除。
答案2
ActiveEon 的 ProActive是一个最初为 HPC 集群设计的批处理调度程序。它包括在容器内启动任务的功能。本文使用 Docker 容器内的 R 包进行演示。
关于设计问题:
- 工作流可以存储在具有 RBAC 的目录中。可以创建一个安全的流程来将它们添加到其中。
- 一旦执行任务,容器就会自动移除。
- 如所须。
- 可以建立一个工作流程来定期跟踪和删除来自不同资源的未使用的图像。
最后,如果需要更多容量,另一个附加功能是可以在云(公共或私有)中爆发。