第二章: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(保存退出)
我的小技巧: 查看输入文件时,多用less。cat会把整个文件刷到屏幕上,文件一大就乱。less可以上下翻页,舒服得多。

文件传输

本地和集群之间传文件,我推荐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密钥对才是安全又方便的方式。生成密钥对:
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 知识体系一览

我把这章的核心逻辑画了张图,方便你对照着学:

HPC集群操作 Linux常用命令 SSH远程登录 作业调度系统 文件传输 ls/cd/vim ssh密钥 sbatch/squeue scp/rsync 第二章:Linux基础与HPC集群知识体系

2.6 避坑总结

最后,我把自己踩过的坑列出来,你遇到了直接对照:

  • 路径问题: 提交任务前,先pwd确认自己在哪个目录。我见过有人把任务提交到了根目录,结果输出文件散落一地。
  • 权限问题: 文件传上去后,记得chmod +x给执行权限。不然脚本跑不起来。
  • 资源申请: 别贪心。申请太多核心,排队时间反而更长。我一般先测试小任务,摸清性能再批量跑。
  • 作业脚本: 写完脚本后,用sbatch --test-only job.sh检查语法,避免提交后才发现错误。

好了,这一章就到这里。Linux这东西,多用几次就熟了。刚开始可能会觉得命令记不住,没关系,我到现在还经常man一下查参数呢。

核心要点:

  • 掌握ls、cd、vim、scp这四个命令,就能应付大部分日常操作
  • SSH密钥对配置好,省去每次输密码的麻烦
  • Slurm脚本里,#SBATCH参数一个都不能错
  • 文件传输用rsync,比scp高效得多

专注资料整理