高斯计算软件是量子化学领域广泛使用的工具,其计算任务通常需要消耗大量CPU和内存资源,在服务器或集群上部署高斯时,为了提高资源利用率和任务管理效率,必须安装排队系统(Job Scheduling System),排队系统能够管理作业提交、分配计算节点、监控作业状态,确保多个用户的高斯作业有序运行,避免资源冲突,实现自动化调度,本文将详细介绍高斯计算服务器排队系统的安装与配置过程,以常见的SLURM和PBS/Torque为例,涵盖从系统选型到作业脚本编写的完整步骤,并提供常见问题解决方案。

排队系统选型与对比
目前主流的排队系统有SLURM、PBS/Torque、SGE(Sun Grid Engine)以及HTCondor等,对于高斯计算,SLURM因其高性能、易扩展和社区活跃而成为首选,下表对比了三种常见系统的特点:
| 特性 | SLURM | PBS/Torque | SGE |
|---|---|---|---|
| 架构 | 集中式管理,部分支持联邦 | 集中式,插件化 | 集中式,较老 |
| 配置复杂度 | 中等,配置文件清晰 | 较高,需要设置多个文件 | 较低,但文档不完善 |
| 作业提交命令 | sbatch, srun, salloc | qsub, qstat, qdel | qsub, qstat, qdel |
| 资源管理 | 节点、分区、作业步骤 | 队列、节点、虚拟节点 | 队列、并行环境 |
| 对高斯友好度 | 高,可通过脚本直接调用 | 高,需注意环境变量传递 | 一般,可能需要额外配置 |
| 社区与更新 | 活跃,新功能多 | 维护较慢,但稳定 | 已停止更新,建议迁移 |
根据实际集群规模和管理需求,选择适合的排队系统,如果从零开始,推荐SLURM;如果已有PBS基础,可继续使用Torque,本文以SLURM为例进行安装说明,同时提供PBS的作业脚本示例。
安装SLURM排队系统(以Ubuntu 20.04为例)
安装前准备
确保所有节点(管理节点和计算节点)时间同步,并配置好主机名解析,安装依赖包:
sudo apt update
sudo apt install -y build-essential munge libmunge-dev libmunge2
libmysqlclient-dev libssl-dev libpam0g-dev libnuma-dev
perl libswitch-perl
Munge用于认证,必须安装并启动服务。
下载编译SLURM
从官网下载最新稳定版,解压后编译安装(各节点需相同版本):
wget https://download.schedmd.com/slurm/slurm-23.02.6.tar.bz2 tar -xf slurm-23.02.6.tar.bz2 cd slurm-23.02.6 ./configure --prefix=/usr/local/slurm make -j$(nproc) sudo make install
安装后,将/usr/local/slurm/sbin和/usr/local/slurm/bin加入PATH,并创建必要目录:
sudo mkdir -p /var/spool/slurm /var/log/slurm /var/run/slurm sudo chown -R slurm:slurm /var/spool/slurm /var/log/slurm /var/run/slurm
配置Munge认证
Munge是SLURM必需的认证服务,在管理节点生成密钥,并复制到所有计算节点:
sudo /usr/sbin/mungekey -f sudo chmod 400 /etc/munge/munge.key sudo cp /etc/munge/munge.key /path/to/share/ # 复制到共享目录
在每个计算节点上,将密钥文件放置到/etc/munge/,并启动munge服务:
sudo systemctl enable munge sudo systemctl start munge
配置SLURM主配置文件
编辑/usr/local/slurm/etc/slurm.conf(或/etc/slurm.conf),定义集群名称、分区、节点信息等,示例配置:
ClusterName=gaussian-cluster ControlMachine=master SlurmUser=slurm SlurmctldPort=6817 SlurmdPort=6818 AuthType=auth/munge StateSaveLocation=/var/spool/slurm/ctld SlurmdSpoolDir=/var/spool/slurm/d SlurmctldPidFile=/var/run/slurm/slurmctld.pid SlurmdPidFile=/var/run/slurm/slurmd.pid # 节点定义 NodeName=compute[01-08] CPUs=24 RealMemory=64000 Sockets=2 CoresPerSocket=12 ThreadsPerCore=1 PartitionName=normal Nodes=compute[01-08] Default=YES MaxTime=INFINITE State=UP
注意:需要根据实际硬件调整CPU和内存参数,高斯计算通常需要独占节点或指定CPU核心,可以设置Shared=NO或OverSubscribe=NO。

启动SLURM服务
在管理节点启动slurmctld,在所有计算节点启动slurmd:
sudo systemctl enable slurmctld sudo systemctl start slurmctld sudo systemctl enable slurmd # 计算节点 sudo systemctl start slurmd
检查节点状态:sinfo应显示节点UP状态,使用sinfo -N查看详细。
配置高斯作业提交脚本
排队系统安装完成后,需要编写作业提交脚本(Job Script)来调用高斯计算,以下分别给出SLURM和PBS的脚本示例。
SLURM作业脚本示例
创建一个gaussian.slurm文件:
#!/bin/bash #SBATCH -J Gaussian_Job # 作业名称 #SBATCH -p normal # 分区名称 #SBATCH -N 1 # 节点数 #SBATCH -n 24 # 总CPU核心数(与高斯并行设置一致) #SBATCH --mem=64GB # 内存需求(与高斯route相应) #SBATCH -t 48:00:00 # 运行时间上限 #SBATCH -o %j.out # 标准输出文件 #SBATCH -e %j.err # 错误输出文件 # 加载高斯环境(根据实际安装路径修改) export g09root=/opt/gaussian source $g09root/g09/bsd/g09.profile # 设置高斯临时目录(建议使用本地磁盘) export GAUSS_SCRDIR=/scratch/$SLURM_JOB_ID mkdir -p $GAUSS_SCRDIR # 设置并行环境(SLURM自动提供MPI,但高斯需指定CPU数量) export GAUSS_PDEF=$SLURM_NTASKS # 运行高斯(输入文件为input.com,输出为output.log) cd $SLURM_SUBMIT_DIR g09 < input.com > output.log # 清理临时文件 rm -rf $GAUSS_SCRDIR
提交作业:sbatch gaussian.slurm
PBS/Torque作业脚本示例
如果使用PBS,脚本类似:
#!/bin/bash #PBS -N Gaussian_Job #PBS -l nodes=1:ppn=24 #PBS -l mem=64gb #PBS -l walltime=48:00:00 #PBS -o $PBS_JOBNAME.o$PBS_JOBID #PBS -e $PBS_JOBNAME.e$PBS_JOBID export g09root=/opt/gaussian source $g09root/g09/bsd/g09.profile export GAUSS_SCRDIR=/scratch/$PBS_JOBID mkdir -p $GAUSS_SCRDIR export GAUSS_PDEF=$PBS_NP cd $PBS_O_WORKDIR g09 < input.com > output.log rm -rf $GAUSS_SCRDIR
使用qsub提交。
高斯计算排队系统的优化与注意事项
-
临时目录设置:高斯计算会产生大量临时文件,建议使用计算节点的本地SSD(如
/scratch),并设置GAUSS_SCRDIR环境变量,如果使用共享存储,需注意I/O瓶颈。 -
并行核心数:高斯支持并行计算(通过
%nprocshared或GAUSS_PDEF),排队系统分配的CPU核心数必须与高斯内部设置一致,避免资源浪费或内存不足,在route部分写%nprocshared=24,脚本中#SBATCH -n 24。 -
内存管理:高斯使用
%mem指定内存,排队系统申请的内存总量应略大于此值,以容纳系统开销,建议%mem不超过申请内存的90%。
-
作业队列优先级:可通过设置
qos或priority来区分作业优先级,确保紧急任务优先运行。 -
环境变量传递:排队系统在提交节点上执行脚本,某些环境变量(如
LD_LIBRARY_PATH)可能不会自动传递,需在脚本中显式导出,或使用--export选项(SLURM)。 -
故障恢复:高斯长作业可能因节点故障中断,可利用排队系统的检查点(checkpoint)功能,但高斯本身不支持热检查点,因此建议定期备份
chk文件并设置合理的作业时间限制。
常见问题与解决方法
问题1:提交作业后,队列显示作业一直处于等待状态,但节点空闲。
原因:可能资源请求超出节点可用资源,例如请求了64GB内存但节点只有32GB,也可能Partition配置错误,或节点处于DRAIN状态。
解决方法:检查sinfo输出,确认节点状态和分区信息;使用sinfo -o "%A %n %e %m %a"查看可用内存;调整作业资源请求,或联系管理员将节点设置为UP。
问题2:高斯作业报错“Segmentation fault”或“Out of memory”。
原因:内存不足,可能%mem设置过高,或排队系统分配的内存未正确传递,临时目录空间不足也可能导致程序崩溃。
解决方法:检查%mem是否超过%SBATCH --mem;使用ulimit -v查看进程限制;确保GAUSS_SCRDIR所在分区有足够空间(通常需要数倍于输入文件大小),可先测试小作业,逐步增加规模。
相关问答FAQs
问:如何查看高斯作业的实时运行状态和资源使用情况?
答:在SLURM系统中,可以使用squeue -j <jobid>查看作业的详细状态,包括运行节点、预计剩余时间等,使用sstat -j <jobid> --format=JobID,MaxRSS,MaxVMSize,CPUUsage查看实际资源消耗,对于PBS系统,使用qstat -f <jobid>和tracejob <jobid>,如果作业已运行,可以通过ssh登录到分配的计算节点,使用top或ps aux | grep g09监控高斯进程,建议在作业脚本中开启高斯的高性能日志(%CPU和%MEM),以便事后分析。
问:不同排队系统之间的作业提交命令差异很大,是否可以统一管理高斯作业的提交脚本?
答:可以使用作业提交包装器或门户工具实现统一接口,使用wrappers将SLURM的sbatch命令封装成与PBS类似的qsub命令,或者编写一个通用的Shell脚本,根据环境变量动态生成不同的作业脚本,另一种方法是使用集群管理平台如OpenHPC、Bright Cluster Manager,它们提供统一的作业提交界面,但最直接的方式是维护两套模板(SLURM和PBS),在不同系统间切换时仅修改脚本头部,对于经常使用高斯的研究组,建议固定使用一种排队系统,以减少学习成本。
原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/511756.html