我在一个研究实验室工作,实验室里有多台不同规格的物理机器。这些机器的 CPU 不同(有些是 Intel 的,有些是 AMD 的),RAM 大小也不同,有些有独立 GPU,有些则没有。
我们目前的解决方案是基于 SSSD 和 Kerberos 的,这样用户就可以从每个终端登录自己的账户并访问自己的文件。但问题在于,这样一来,用户在工作时就被“绑定”在一台机器上,导致资源分配不理想。
因此,我们正在为我们的集群寻找替代解决方案。我们的主要目标是真正统一所有机器,即从用户的角度来看,集群由一台机器组成。但是,从我们收集到的信息来看,像 Slurm 这样的解决方案并不理想,因为我们不想依赖作业调度程序。我们设想的解决方案是这样的:当用户登录时,他们可以指定所需的规格(RAM、CPU 数量、独立 GPU 等),然后创建具有所需规格的虚拟化环境(例如 Docker 映像或虚拟机)。然后,用户可以将该环境用作常规“计算机”。尽管如此,这个虚拟环境的资源应该来自集群,而不是来自单台机器。还应该能够共享每个“虚拟环境”都可以访问的大型数据集。集群还应该有一个身份验证和权限系统。
我们一直在寻找可以实现我们目标的集群工具,但我们不确定选择哪一个。我们研究了 Mesos、OS/DB、Docker Swarm、Kubernetes 和 oVirt,但我们不知道这些工具是否可以实现我们想要的目标,如果可以,哪一个是最佳选择。我们认为容器可能是生产的一个好选择,但可能不是研发的最佳选择。你们能帮助我们并告诉我们该做什么以及从哪里开始吗?
谨致问候,pinxau1000
答案1
同意@NikitaKipriyanov 的观点,您无法将来自多个系统的资源组合成一个映像,尽管过去曾有商业产品这样做过,并且它们依靠 infiniband 来降低延迟(恕我直言,效果不佳)。Slurm 可以用作调度程序,但您也可以将其用于交互式作业,然后它可以更多地充当资源管理器。
每个作业可以指定 CPU 核心数、GPU 数量和类型、内存量等。然后,调度程序将选择一个合适且未使用的系统并为您提供 shell 提示。如果需要,可以使用 X11 转发。
此外,容器在研发环境中非常有用。你不应该因为看不到其实用性而将其丢弃,但它们并不是解决这个问题的办法。
答案2
这是不可能的。
- 不同的 CPU 意味着指令可能不同。如果你想在 CPU 之间迁移代码,这将是一场噩梦。
- 内存延迟以纳秒为单位,网络延迟以几十微秒为单位。
根据您的工作负载,您可以将工作负载转换为在多台计算机上运行并在它们之间传递数据。对于某些问题,这很简单,您可以将数据集分成较小的分区并并行处理它们。对于其他工作负载,这很困难。但这需要修改工作负载,而不是操作系统。