## Slurm调度GPU

### 概述
Slurm是一个开源的集群管理工具,用于在大规模计算机集群中调度、管理作业。在需要使用GPU的任务中,Slurm可以帮助我们有效地管理GPU资源,以实现并行计算的加速。本文将介绍如何在Slurm中实现GPU的调度。

### 流程图
| 步骤 | 操作 |
|------|------|
| 1. 创建Slurm配置文件 | 在集群的主机上创建Slurm的配置文件。 |
| 2. 配置GPU资源 | 在Slurm配置文件中指定GPU资源。 |
| 3. 启动Slurm服务 | 启动Slurm服务以应用配置更改。 |
| 4. 提交带有GPU需求的作业 | 在提交作业时指定对GPU资源的需求。 |
| 5. 监视作业状态 | 使用Slurm命令监视作业状态及GPU使用情况。 |

### 详细步骤
1. 创建Slurm配置文件:在主机上的Slurm配置文件通常为`slurm.conf`。在配置文件中添加以下内容:
```shell
# 开启GPU支持
SelectType=select/cons_res
SelectTypeParameters=CR_Core_Memory,CR_Core_Hyperthread,CR_gpu_model,CR_gpu_count

# 设置GPU资源
GresTypes=gpu
NodeName=node1 Gres=gpu:2
```
2. 配置GPU资源:在配置文件中指定可以使用GPU资源的节点和数量。
3. 启动Slurm服务:使用以下命令启动Slurm服务以应用更改:
```shell
sudo systemctl start slurmd
sudo systemctl restart slurmd
```
4. 提交作业:在提交作业时,需要指定对GPU资源的需求。示例提交脚本如下:
```shell
#!/bin/bash
#SBATCH --job-name=gpu_job
#SBATCH --nodes=1
#SBATCH --gres=gpu:1

echo "Hello, world!"
```
在这个示例中,`--nodes=1`表示作业在1个节点上运行,`--gres=gpu:1`表示需要1个GPU资源。
5. 监视作业状态:使用以下命令监视作业及GPU使用情况:
```shell
squeue
sinfo --Node --Format=NodeHost,Gres
```
`squeue`命令可以查看当前队列中的作业,`sinfo`命令可以查看节点的GPU资源情况。

通过以上步骤,你可以在Slurm中成功实现GPU的调度。希望这篇文章能够帮助你更好地理解和使用Slurm调度GPU资源。