学校HPC集群

学校HPC集群
陈鑫宇学校高性能计算平台共两百余台机器,纳入SLURM调度的171台,合计12352个CPU核,调度器统计内存90余TB,外挂23PB并行文件系统。硬件分批采购,代际混合。
120台为早期CPU节点,双路32核Xeon 8358P,单机64核 / 500G内存,承载日常主要算力。数台胖节点为四路24核Xeon 8360H,单机96核 / 2T内存,供大内存作业使用。最新批次为GPU节点,单机96核 / 1T内存、8张H20,另有一台配2块4090。另有2台国产K100异构节点,自五月末起持续offline。
平台另有二十余台GPU机器未纳入SLURM节点列表;登录、管理、监控类机器同样不计入调度器口径,sinfo不显示。
主要用户方向为生物信息与计算化学,module avail提供87个模块,blast、bwa、vasp、gromacs占多数。
登录节点仅承担登录与作业提交,计算须下发至计算节点。调度系统版本SLURM 23.11.10,以下数据均在登录节点实测采集。
节点详情
1 | sinfo -s # 分区概览:节点数、状态分布 |
sinfo -s输出:
1 | PARTITION AVAIL TIMELIMIT NODES(A/I/O/T) NODELIST |
带星号的cpu64为默认分区,不指定-p时作业落入此分区。中间四列为allocated / idle / other / total。
分区
| 分区 | 节点数 | CPU型号 | 单机核数 | 单机内存 | 加速卡 |
|---|---|---|---|---|---|
cpu64(默认) |
120 | Xeon Platinum 8358P | 64 | 500G | — |
cpu96 |
5 | Xeon Platinum 8360H | 96 | 2T | — |
test96 |
2 | Xeon Platinum 8558P | 96 | 250G | — |
soy-com |
22 | Xeon Platinum 8558P | 96 | 500G | — |
sri-com |
14 | — | 96 | 500G | — |
sri-mem |
2 | — | 96 | 2T | — |
sri-ghz |
2 | — | 32 | 500G | — |
sri-gpu |
1 | — | 96 | 1T | H20 × 8 |
sri-gnm |
1 | — | 96 | 500G | 4090 × 2 |
dcu |
2 | — | 48 | 250G | 国产K100 × 2 |
十个分区合计171台、12352核。cpu64中118台为500G内存,其余两台384G。
sri-*一组绑定专属QoS,普通账号提交返回Invalid qos specification,CPU型号无法读取;dcu两台offline,同样无法读取。
cpu64的120台为主力:空闲95台时可直接提交;25台在跑时backfill仍可插入空闲窗口。调度器记录内存500G,节点内free -g实测503G。
DCU两台装国产K100,sinfo中为down*,scontrol show node给出的原因为Not responding,自五月底持续至今。另两台带加速卡的节点——sri-gpu的H20与sri-gnm的4090——位于上述受限QoS组内。
系统代际存在差异:早期CPU节点为CentOS 8.2 / 内核4.18,后加的GPU与内存节点为RHEL 9.5 / 内核5.14。/hpc/software下gcc覆盖4.8.5至14.1.0,glibc保留2.29与2.36两套,对应两代系统各留一版。自行编译的二进制跨分区搬运存在兼容风险。
作业提交
交互式调试用srun:
1 | srun -p cpu64 -N1 -n1 --time=00:30:00 --pty bash |
实测分配到node08,grep -m1 'model name' /proc/cpuinfo为Xeon Platinum 8358P。进入后nproc返回1而非64——srun该步仅分配1个CPU,确认整机规格需读/proc/cpuinfo或使用lscpu。
正式任务写脚本交sbatch:
1 |
|
申请加速卡加一行#SBATCH --gres=gpu:1,具体型号见分区Gres字段。
集群SelectTypeParameters为CR_CORE,调度按核数分配,内存不参与资源分配——作业不写--mem亦可运行,节点AllocMem恒为0。以两个1核作业验证,运行期间所在节点AllocMem均为0。同节点多作业之间互不可见实际内存占用,先占满内存的作业会影响其余作业,故提交时须显式指定--mem。sacct中ReqMem显示500000M,为未填该字段时按节点总内存回填的显示值,不代表实际申请整机。
数组作业上限MaxArraySize为1001,单次最多提交1001个子任务,更大规模需分批提交。
调度器按什么排
PriorityType = priority/multifactor,SchedulerType = sched/backfill。前者按作业年龄、份额、队列权重计算优先级,后者负责插空——作业若能在一个空闲窗口内跑完,即可提前启动。
该组合利于短作业,反向亦然:为一个5分钟的任务写--time=72:00:00,backfill找不到足够长的窗口,作业只能排队。
所有分区时间上限均为infinite,MaxTime无系统级限制,时限交由使用者自行声明,长时作业可长期占用节点。
squeue -a在普通账号下不显示其他用户作业:实测squeue -a -h | wc -l返回0,同一时刻sinfo显示25个节点处于alloc状态。判断集群负载只能依据sinfo的节点状态分布。
存储:23P与5000亿inode
df -hT中容量最大的一行:
1 | Filesystem Type Size Used Avail Use% Mounted on |
23PB并行文件系统,已用1.1PB。文件系统类型为dpc,属分布式存储客户端挂载,与本地盘行为不同——小文件随机读性能与顺序读写相差量级,登录节点禁用du / find即源于此。
inode容量见df -i /hpc:总量5000亿,已用2.33亿。元数据按目录树铺开、查询需走网络,是该量级的成因。
另两个挂载点:
/usr/local/globle/softs为NFS,191G、59%已用,存放slurm二进制与公共软件,所有节点共享同一份。/dev/shm为252G内存盘。数据管道中间结果置于此处,读写不落盘;重启即清空。
家目录位于/hpc/home/<用户名>。以本账号为例,占用接近48TB,主要为从ModelScope拉取的49个模型,其余为量化日线数据。
环境与启动速度
公共软件通过module加载,module avail挂载87个:生信类(blast、bwa、hmmer、canu、megahit、gtdbtk、metawrap)、计算化学类(vasp、gromacs、amber、autodock)、gcc/4.8.5至gcc/14.1.0、openmpi 3.1至5.0.5、cuda/11.7与12.4、Python 3.7/3.8、R三个版本、singularity两个版本。使用前module load gcc/14.1.0 openmpi/5.0.5即可,优于在home内自行编译。
Python环境采用miniconda,按用途拆为四个:myenv放通用工具,quant放baostock相关依赖,agent与agent-gpu分开的原因是GPU侧依赖锁定在另一cuda版本。
zsh启动时间做过专项优化。原始耗时约15秒,成因是oh-my-zsh及插件每次登录重新source,而home挂在分布式存储上,网络文件系统随机读延迟高。处理办法是把omz与历史文件缓存到/dev/shm,并将"重新加载配置"改写为跳过omz重复加载的函数。优化后约0.8秒,多终端窗口并发打开时差异明显。
长任务用tmux托管
登录节点直接运行长任务,网络断开即进程终止,改用tmux托管:
1 | tmux new -s pull # 建会话 |
集群tmux版本为2.7。小时级以上的任务交sbatch;tmux用于托管数据拉取循环与监控进程。




