东莞数据中心
1 Slurm集群使用方法
集群简介
- Slurm集群目前支持的应用如下表所示:
组别(group) | 应用 | 计算负责人 |
---|---|---|
LQCD | 格点QCD | 孙玮 |
- Slurm集群的资源情况如下表所示:
资源分区(partition) | 节点数量 | 单节点计算资源数量 | 单节点内存 | 角色 |
---|---|---|---|---|
dgpublic | 245 | 48 CPU cores | 250GB | x86计算节点 |
dggpu | 20 | 48 CPU cores, 4 NVIDIA V100 PCI-e GPU cards | 488GB | GPU计算节点 |
dgarm | 98 | 96 CPU cores | 250GB | arm计算节点 |
dgvfarm | 210 | 52 CPU cores | 224GB | 静态虚拟机计算节点 |
dgloginX86 | 2 | - | - | 登录节点 |
dgloginArm | 2 | - | - | 登录节点 |
- 各应用可使用的的资源分区(partition), 账户(account),组别(group),队列(qos)如下表所示:
partition | account | QOS |
---|---|---|
dgpublic | lqcd | normal |
dggpu | lqcd | normal |
dgarm | lqcd | normal |
dgvfarm | lqcd | normal |
Step1 :申请集群账号及授权
- 申请集群账号
- 申请页面: https://login.csns.ihep.ac.cn
- 高能所用户可使用IHEP SSO(所邮箱和密码)登录
- 非高能所用户先注册账号,注册完成后,方可登录
- 申请加入所属应用对应的组别
- Profile -> Group Information -> Apply for Group
- 申请使用slurm集群的授权并建立专用数据目录
- 邮件联系所属应用的计算负责人和集群管理员获取集群使用授权
- 专用数据目录在
/dg_hpc
下,具体目录结构为/dg_hpc/<group_name>/<user_name>
- 例如:用户名为
zhangsan
,所属组为LQCD
,则该用户的专用数据目录为:/dg_hpc/LQCD/zhangsan
- 例如:用户名为
- 特别提示
- 若未获得slurm集群使用授权,提交作业时会报错
Invalid account or account/partition combination specified
- 请尽量将作业运行环境(作业脚本,输入文件,输出文件)置于专用数据目录/dg_hpc下
- home目录可用于备份作业脚本和运行程序
- 若未获得slurm集群使用授权,提交作业时会报错
Step2 : 登录集群
集群登录节点为acn[099-100].csns.ihep.ac.cn,cn[249-250].csns.ihep.ac.cn
高能所集群用户可先ssh登录lxlogin.ihep.ac.cn后,再ssh登录acn[099-100],cn[249-250]
$ ssh <user_name>@lxlogin.ihep.ac.cn # on lxlogin, ssh to one of the following login nodes $ ssh <user_name>@acn099.csns.ihep.ac.cn $ ssh <user_name>@acn100.csns.ihep.ac.cn $ ssh <user_name>@cn249.csns.ihep.ac.cn $ ssh <user_name>@cn250.csns.ihep.ac.cn
非高能所集群用户可在login.csns.ihep.ac.cn申请VPN后,以VPN方式登录集群
- profile -> Group information -> apply for VPN group
- 申请VPN请联系所属应用的计算负责人
Step3 :准备作业脚本
- 仅使用CPU的作业脚本样例
$ cat cpu_job_sample.sh
#! /bin/bash
#======= Part 1 : Job parameter ======
#SBATCH --partition=dgpublic
#SBATCH --account=lqcd
#SBATCH --qos=normal
#SBATCH --ntasks-per-node=32
#SBATCH --nodes=1
#SBATCH --mem-per-cpu=4G
#SBATCH --job-name=lqcdcpu
#SBATCH --output=/dg_hpc/CNG/zhangsan/job_output/lqcd/lqcd_cpu_job_%j.out
#======= Part 2 : Job workload ======
echo "Lqcd job ${SLURM_JOB_ID} on cpu worker node ${SLURM_JOB_NODELIST} job starting..."
date
set -e
# sofeware workload comes here
echo "Lqcd job ${SLURM_JOB_ID} ended."
date
- 使用CPU和GPU的作业脚本样例
$ cat gpu_job_sample.sh
#! /bin/bash
#======= Part 1 : Job parameter ======
#SBATCH --partition=dggpu
#SBATCH --account=lqcd
#SBATCH --qos=normal
#SBATCH --gpus=v100:4
#SBATCH --ntasks=4
#SBATCH --mem-per-cpu=40G
#SBATCH --job-name=lqcdgpu
#SBATCH --output=/dg_hpc/CNG/zhangsan/job_output/lqcd/lqcd_gpu_job_%j.out
#======= Part 2 : Job workload ======
echo "Lqcd job ${SLURM_JOB_ID} on gpu worker node ${SLURM_JOB_NODELIST} job starting..."
date
set -e
# sofeware workload comes here
echo "Lqcd job ${SLURM_JOB_ID} ended."
date
- 若作业中运行LQCD软件,请参考 9.7.2 LQCD软件使用说明
Step4 :提交作业
# sbatch will return back a job id
# replace <job_script.sh> with the filename of your job script
$ sbatch <job_script.sh>
Step5 :查看作业
# 1. jobs running or pending
# replace <user_name> with your user name
$ squeue -u <user_name>
# replace <job_id> with your job id
$ squeue -j <job_id>
# 2. jobs completed or failed
# replace <user_name> with your user name
# jobs started during past 24 hours
$ sacct -u <user_name>
# jobs started since YYYY-MM-DD, e.g.: 2021-05-03
$ sacct -u <user_name> --starttime=YYYY-MM-DD
# query a specific job with its job id
# replace <job_id> with a job id
$ sacct -j <job_id>
Step6 :获取作业运行结果
两类作业输出文件:
- 作业脚本本身的输出文件:由
#SBATCH --output
定义的文件 - 作业负载软件(workload software)的输出文件:用户自己定义
Step7 :取消作业
# cancel a job with job id
$ scancel -j <job_id>
# cancel jobs submitted by a user
$ scancel -u <user_name>
Q&A
Q1 为什么提交作业会报错:Invalid account or account/partition combination specified ?
A1 三个可能的原因:
- 账号没有加入所属组别(group),请加入所属应用的组别。
- 账号没有授权使用slurm集群,请申请slurm集群授权。
- 作业脚本中的
#SBATCH --partition
,#SBATCH --qos
,#SBATCH --account
没有设置正确的值,请参考 集群简介中各组可使用的partition、qos、account对照表
Q2 为什么我的home目录下文件的有目录或文件的属主突然变成了root?
A2 Home目录采用的是GlusterFS文件系统,出现这种情况是底层文件系统的问题,请联系集群管理员处理
Q3 为什么我的作业提交了却马上就失败了?
A3 两个可能的原因:
#SBATCH --output
的值是一个文件,而不是目录,并且用户必须对该文件有写权限,请检查该文件路径是否正确。- 作业负载软件(workload software)运行失败,请检查软件运行命令是否正确
Q4 为什么我的作业提示oom错误?
A4 oom意思是out of memory, 即内存超出使用。请增加作业脚本中的内存值,如增大#SBATCH --mem-per-cpu
的值。
2 LQCD软件使用说明
运行环境设置
- 首次登录东莞集群时按如下配置
module
环境mkdir -p ~/privatemodules ln -sf /dg_hpc/LQCD/modulefiles/lqcd ~/privatemodules/lqcd echo "module load use.own" >> ~/.bashrc source ~/.bashrc
- 目前在 x86, arm, gpu计算节点下的软件可以通过
module av
查看
Chroma软件使用
- 高能所产生规范从组态目录:
/dg_hpc/LQCD/gongming/productions
- Chroma 使用参考示例代码:
/dg_hpc/LQCD/sunwei/examples
- Chroma 软件包依赖
- x86: chroma + qphix + qdp++ + qmp
- arm: chroma + qopqdp + qdp++ + qmp
- gpu: chroma + quda + qdp-jit + qmp
NOTE: 东莞集群使用 RoCE(RDMA over Converged Ethernet) 网络,在运行 MPI 程序时需要指定网卡, 使用 openMPI (arm, gpu),intelMPI (x86) 可参考如下运行脚本
- x86
#!/bin/bash
#SBATCH --partition=dgpublic
#SBATCH --account=lqcd
#SBATCH --qos=normal
#SBATCH --nodes=1
#SBATCH --ntasks-per-node=1
#SBATCH --cpus-per-task=48
#SBATCH --mem-per-cpu=2G
#SBATCH --job-name=lqcd-job
set -e
module load lqcd/x86/chroma/double-qphix-qdpxx-intel
MPFLAGS="-env FI_PROVIDER=verbs " # specify RoCE with intel MPI
ncore=48
export OMP_NUM_THREADS=$ncore
QPHIX_PARAM="-by 4 -bz 4 -pxy 1 -pxyz 0 -c ${ncore} -sy 1 -sz 1 -minct 2"
mpirun ${MPFLAGS} -np 1 chroma ${QPHIX_PARAM} -geom 1 1 1 1 -i input.xml -o output.xml &> log
- arm
#!/bin/bash
#SBATCH --partition=dgarm
#SBATCH --account=lqcd
#SBATCH --qos=normal
#SBATCH --nodes=1
#SBATCH --ntasks-per-node=96
#SBATCH --mem-per-cpu=2G
#SBATCH --job-name=lqcd-job
set -e
module load lqcd/arm/chroma/double-qopqdp-qdpxx
MPFLAGS="--mca pml ucx -x UCX_NET_DEVICES=mlx5_bond_1:1 "
mpirun ${MPFLAGS} -np 96 chroma -geom 1 1 1 96 -i input.xml -o output.xml &> log # setup -geom according to the lattice size
- gpu
#!/bin/bash
#SBATCH --partition=dggpu
#SBATCH --account=lqcd
#SBATCH --qos=normal
#SBATCH --job-name=lqcd-job
#SBATCH --ntasks-per-node=1
#SBATCH --nodes=1
#SBATCH --mem-per-cpu=50G
#SBATCH --gres=gpu:v100:1
set -e
module load lqcd/gpu/chroma/double-cuda11-qdpjit
export OMP_NUM_THREADS=1
export QUDA_RESOURCE_PATH=${PWD}
MPFLAGS="--mca pml ucx -x UCX_NET_DEVICES=mlx5_bond_1:1 "
mpirun ${MPFLAGS} -np 1 chroma -geom 1 1 1 1 -ptxdb ./ptxdb -i input.xml -o output.xml &> log
如需使用不带MPI的chroma版本,可以module load lqcd/gpu/chroma/double-cuda11-qdpjit-nompi
或 module load lqcd/gpu/chroma/single-cuda11-qdpjit-nompi
,分别为双精度与单精度。