第二章:Linux基础与HPC集群
说实话,很多刚接触第一性原理计算的朋友,第一道坎不是物理概念,而是Linux系统。我见过太多人,理论功底扎实,结果卡在「怎么提交任务」这种基础操作上。今天我们就把这层窗户纸捅破。
2.1 为什么必须学Linux?
你想想看,VASP、Quantum ESPRESSO这些计算软件,几乎都跑在Linux集群上。Windows?基本没戏。我个人习惯把Linux比作「计算世界的普通话」——你不会,就寸步难行。
嗯,这里要注意:我们不需要成为Linux运维专家。掌握20%的常用命令,就能解决80%的计算问题。
2.2 核心命令速成
我挑几个最常用的,你在集群上每天都会用到。
文件操作三件套
ls -lh # 查看文件,-lh 显示详细信息
cd /path # 切换目录,就像在文件夹里跳转
pwd # 看看自己当前在哪个目录
我曾经有个学生,提交任务后找不到输出文件,急得满头大汗。我过去一看,他连pwd都没用过,根本不知道自己跑到了哪个目录。这种坑,踩一次就记住了。
文件编辑与查看
cat INCAR # 直接看文件内容,适合短文件
less INCAR # 分页查看,适合长文件(按q退出)
vim INCAR # 编辑文件,初学者先学会 i(插入) 和 :wq(保存退出)
文件传输
本地和集群之间传文件,我推荐scp和rsync。
# 从本地上传到集群
scp INCAR username@cluster:/path/
# 从集群下载到本地
scp username@cluster:/path/OUTCAR ./
# rsync更智能,只传变化的部分
rsync -avz username@cluster:/path/ ./local_dir/
说实话,我早期做计算时,每次传几百兆的CHGCAR文件,用scp等得心焦。后来改用rsync,配合压缩参数,速度快了不止一倍。
2.3 SSH远程登录
登录集群,靠的就是SSH。说白了,就是一条加密通道,让你坐在自己电脑前,操作千里之外的服务器。
ssh username@cluster_address
第一次登录会提示确认密钥,输入yes就行。之后输入密码,就进去了。
ssh-keygen -t rsa -b 4096
ssh-copy-id username@cluster_address
这样以后登录就不用输密码了。
2.4 作业调度系统:Slurm与PBS
集群不是你家电脑,不能直接敲命令跑程序。你得「排队」——这就是作业调度系统干的事。
目前主流是Slurm,老一些的集群还在用PBS。我主要讲Slurm,因为新集群基本都用它。
Slurm核心命令
| 命令 | 作用 | 我的备注 |
|---|---|---|
| sinfo | 查看集群节点状态 | 看看哪些节点空闲 |
| squeue | 查看任务队列 | 看看自己的任务排到哪了 |
| sbatch job.sh | 提交任务 | 最常用的操作 |
| scancel job_id | 取消任务 | 输错了参数?赶紧取消 |
写一个Slurm作业脚本
这是VASP计算的典型脚本:
#!/bin/bash
#SBATCH -J VASP_test # 任务名称
#SBATCH -N 1 # 申请1个节点
#SBATCH -n 16 # 16个CPU核心
#SBATCH -t 24:00:00 # 最长运行24小时
#SBATCH -p normal # 分区名称
module load vasp/5.4.4
mpirun -np 16 vasp_std
提交命令:
sbatch job.sh
嗯,这里要注意:脚本里的#SBATCH不是注释,是参数。我第一次写的时候,把#SBATCH写成了#SBATCH -h,结果任务一直报错,折腾了半天才发现多打了个字母。
PBS用户怎么办?
如果你还在用PBS,别慌,逻辑一样:
#!/bin/bash
#PBS -N VASP_test
#PBS -l nodes=1:ppn=16
#PBS -l walltime=24:00:00
cd $PBS_O_WORKDIR
mpirun -np 16 vasp_std
提交用qsub job.sh,查看用qstat。
2.5 知识体系一览
我把这章的核心逻辑画了张图,方便你对照着学:
2.6 避坑总结
最后,我把自己踩过的坑列出来,你遇到了直接对照:
- 路径问题: 提交任务前,先pwd确认自己在哪个目录。我见过有人把任务提交到了根目录,结果输出文件散落一地。
- 权限问题: 文件传上去后,记得chmod +x给执行权限。不然脚本跑不起来。
- 资源申请: 别贪心。申请太多核心,排队时间反而更长。我一般先测试小任务,摸清性能再批量跑。
- 作业脚本: 写完脚本后,用sbatch --test-only job.sh检查语法,避免提交后才发现错误。
好了,这一章就到这里。Linux这东西,多用几次就熟了。刚开始可能会觉得命令记不住,没关系,我到现在还经常man一下查参数呢。
核心要点:
- 掌握ls、cd、vim、scp这四个命令,就能应付大部分日常操作
- SSH密钥对配置好,省去每次输密码的麻烦
- Slurm脚本里,#SBATCH参数一个都不能错
- 文件传输用rsync,比scp高效得多