Slurm是一个用于Linux和Unix操作系统的开源的、可扩展的和高性能的计算集群管理系统,可以用于管理数千个节点。Slurm设计用于管理计算机集群,特别是高性能计算(HPC)系统。
一、Slurm API
Slurm提供了一组API,用于用户和管理员使用编程语言进行访问和管理Slurm,这些API包括C、Python、Perl和Java等语言。Slurm API包括以下组件:
- 命令行界面:提供Slurm标准命令的Python接口;
- Slurm open-source source base library:提供访问Slurm API的C函数;
- SLURM perl library:Slurm Perl API
- Java binding:提供Java API的通用绑定(JNI);
- Python binding:Slurm的Python API
所有Slurm API都可以在Slurm官方文档中找到。这些API可用于创建自定义脚本,以管理Slurm工作,以及进行高级任务请求。
二、Slurm搭建GPU集群
在Slurm中使用GPU资源时,需要至少一个GPU,而对于多GPU节点,Slurm提供了多种排队策略:
- 共享GPU:可将同一任务的多个执行互相共享GPU。可以选择合适的分区大小,该分区大小建议为每个GPU配置的核心数量;
- 独占GPU:预订所有GPU资源,等待队列中的作业获得所有GPU,生命周期结束后,释放GPU资源;
- 混合GPU:为同一任务使用多个GPU和CPU资源。Slurm将GPU、CPU和内存分开进行排队,因此可以分别通过QoS参数控制GPU、CPU和内存。这意味着Slurm可以优化内存和GPU之间的通信。
以下是一个Slurm搭建GPU集群的示例,该示例使用2个节点,每个节点有1个GPU。
Step 1:安装GPU驱动程序
$ sudo apt-get install nvidia-driver
Step 2:安装CUDA和cuDNN
$ sudo apt-get install cuda $ sudo apt-get install libcudnn7 $ sudo apt-get install libcudnn7-dev
Step 3:安装Slurm
$ sudo apt-get install slurm-llnl
Step 4:在Slurm配置中添加GPU资源
在Slurm配置文件中定义GPU资源,如下所示:
NodeName=node1 Name=gpu Type=gpu File=/dev/nvidia0 NodeName=node2 Name=gpu Type=gpu File=/dev/nvidia0
Step 5:测试GPU资源
$ salloc -N 1 -p gpu -t 20:00 $ srun -p gpu -N 1 nvidia-smi
三、Slurm支持Ubuntu吗
Slurm可以在各种Linux和Unix操作系统上运行,包括Ubuntu。可以使用以下命令在Ubuntu上安装Slurm:
$ sudo apt-get install slurm-llnl
默认情况下,Slurm将在Ubuntu上启动,并可以使用Ubuntu上的Slurm命令管理计算集群。
四、Slurm节点宕机处理
Slurm可以检测到节点宕机并处理宕机节点。当一个节点宕机时,Slurm将执行以下操作:
- Slurm将检测到节点已经下线,并在Slurm数据库中删除该节点;
- Slurm将自动停止正在运行的任务,并将它们重新分配到其它可用节点上;
- Slurm将自动关闭所有由该节点处理的依赖任务,确保任务不会一直处于等待状态。
如果您想要手动将节点从Slurm中删除,可以使用以下命令:
$ scontrol update nodename=node0 state=down reason="node down"
以上就是Slurm的简要概述,同时介绍了Slurm的几个方面。随着科学技术的发展,Slurm作为一个高效的计算集群管理系统在科学研究中扮演着巨大的角色。如有兴趣可以进入官网(http://slurm.schedmd.com/)获取更多资料。