新闻详情

新闻详情

首页 / 资讯中心 / 详情

武汉大学超算入门指南:从SSH登录到Slurm作业提交全解析

发布时间:2026/9/30 8:41:23来源:尧图网络
武汉大学超算入门指南:从SSH登录到Slurm作业提交全解析
我最早接触武大超算中心其实是被课题组的师兄硬拽上去的。他甩给我一串IP和一个账号密码留下一句自己上去跑个测试人就出差了。结果我连SSH都折腾了半天登上去之后面对满屏的英文命令更是彻底懵圈——这跟平时用Windows调个Python脚本完全不是一回事。后来在超算上磕磕绊绊跑了三个月从被人笑连PBS和Slurm都分不清到能顺手帮同门写作业脚本中间踩过的坑、翻过的文档、问过的蠢问题攒下来足以写一部小册子。这篇博文就当作一部武汉大学超算入门指南把新手最该知道的东西一次性讲清楚超算是什么、怎么登录、作业怎么提交、为什么老排队、报错到底什么意思。适合刚拿到账号的本科生、研究生以及那些对高性能计算有兴趣但还没下手的同路人。1. 武大超算中心到底是个什么样的电脑1.1 超算不是一台更快的主机而是一套精密的资源调配系统很多人对超算的想象是一台性能爆炸的超级电脑登录进去直接敲命令程序跑得飞快。这个印象不能说完全错但偏差很大。真实的超算中心更像一个计算资源的百货超市你看到的是一堆服务器节点组成的集群每个节点有几十个CPU核心、几百GB甚至更大的内存节点之间用高速网络连在一起背后还有一套庞大的存储系统。武大超算中心本质上就是这样一套集群。你通过SSH登录上去看到的那个界面是登录节点login node它只是整个系统的一扇门。真正的算力分散在成百上千个计算节点compute node上这些节点平时处于待命状态只有当你提交了一个计算任务调度系统才会从资源池里划拨一部分节点、核心、内存给你用。也就是说你登录上去的那台机器只是让你敲命令、传文件、管理作业用的不能在上面直接跑大规模计算这是新手最需要扭转的第一个认知。1.2 登录节点、计算节点、存储节点各司其职超算集群大致可以分成三类角色登录节点用户入口提供交互式Shell环境用于文件操作、代码编辑、作业提交。它承载的是轻量级管理操作不适合跑重型任务。计算节点真正干活的机器被调度系统统一管理。用户一般不直接登录计算节点而是通过作业系统去申请。存储节点提供并行文件系统负责存放用户的家目录、项目数据、中间结果。超算上的存储IO性能往往比本地磁盘好得多但也有容量和inode配额限制。理解这个架构之后你就能明白很多怪现象比如为什么在登录节点上编译程序能过、跑起来却被系统警告为什么作业提交之后不是立刻运行而是要排队为什么有时候明明自己没占资源磁盘却满了。这些都不是故障而是超算这种共享环境的常态。提示登录节点是公共资源一旦有用户在上面跑大任务整个集群的管理操作都会变卡。武大超算是严格禁止在登录节点上做大计算或长时间占用大量CPU的情节严重会被管理员警告甚至封号。2. 开户与登录第一次连上超算前的硬核准备2.1 账号申请别急于下手先想清楚用途超算账号的申请和注册一个普通网站账号完全是两码事。在武大通常以课题组为单位申请计算资源配额个人在使用前需要让导师或课题组负责人在系统里给你开通子账号然后你才拥有登录权限。不同学校的流程略有不同但大体上你需要准备校内统一身份认证信息、导师的确认、以及一个必须填清楚的计算需求说明。这里我想多啰嗦一句申请的时候别笼统写做研究用。调度系统管理员和审批专家看的是你的研究方向和软件需求。你是要做第一性原理计算比如VASP这类材料模拟软件、分子动力学GROMACS、LAMMPS、深度学习PyTorch、TensorFlow还是传统的数值仿真不同的用途会决定你被分配到哪个队列、能申请多大内存、是否需要GPU节点。需求写得越具体管理员越容易帮你配置合适的环境后面卡壳的概率反而越小。2.2 SSH登录与本地环境的三个关键配置拿到账号后登录方式一般是SSH。Windows用户可以用PowerShell自带的ssh命令也可以用MobaXterm、Xshell这类终端工具macOS和Linux用户直接开终端窗口敲ssh就行。一个最基础的登录命令是ssh 你的用户名集群IP或域名第一次登录会提示确认主机指纹输入yes回车然后输密码就进去了。如果嫌每次输密码麻烦可以配置SSH公钥认证ssh-keygen -t ed25519 -C 你的邮箱或备注 ssh-copy-id 你的用户名集群IP或域名这里有一个很多人忽视的细节你的本地终端编码要统一配置成UTF-8连接超时时间要适当调长。因为超算上常见的文件路径、软件输出、报错信息都可能是英文加特殊字符终端编码不对会显示成乱码干扰判断而连接超时太短你稍微编辑一会儿文件连接就断了前面的操作全部白费。2.3 登录节点上的第一课别把登录节点当计算节点用很多新手登录进去的第一反应是既然已经在这台机器上了那我直接跑程序不就行了比如有人配置好conda环境以后直接在登录节点上启动一个深度学习的训练脚本界面看起来一切正常甚至前几步迭代确实在跑。结果是几分钟后接到系统邮件任务被强制杀掉原因是触发了登录节点的CPU超标策略。这个错误几乎每个超算用户都犯过一次我的建议是提前把观念摆正登录节点只适合做四件事——传文件、编辑代码、编译安装软件、提交和管理作业。任何有算力消耗的事情都应该交给作业调度系统。轻度测试比如跑一个几秒钟的小程序验证环境可以勉强接受但就不要侥幸了。3. 资源是怎么分的读懂作业调度系统的底层逻辑3.1 为什么超算不能让你随便跑我第一次用超算时特别不解明明机器那么多为什么我提交的任务不能立刻开始后来才明白超算是一个多用户共享环境全校几十个课题组上百个用户同时在用如果不做资源管理大家一拥而上把节点抢光整个集群就会瘫痪。于是就有了作业调度系统——所有计算任务的中央交通警察。调度系统规定每个用户要跑程序必须用一种约定的格式申请资源然后进入待执行队列由调度器根据优先级、资源空闲情况、用户的公平份额配额决定什么时候把资源分配给你。打个比方这就好比银行柜台你不能直接冲进柜台拿钱而是必须取号排队柜员叫到你了才轮到你办理。3.2 Slurm核心概念分区、队列、作业与资源目前主流超算中心的调度系统主要有Slurm和PBS两大家族。武大超算中心用的是Slurm这也是国内很多高校超算的主流选择。所以下面以Slurm为讲解主线。你需要掌握几个核心概念分区Partition相当于不同服务等级的候车厅。常见的有普通CPU分区、大内存分区、GPU分区、短作业分区调试用等。每个分区有不同的节点配置、时长限制和计费策略。作业Job一次计算任务的完整单元包含脚本、可执行程序、输入输出文件。作业IDJob ID提交后系统分配的编号用来追踪和操作作业。节点Node一个物理计算节点可包含多个CPU核心、一块或多块GPU卡。任务数TaskMPI编程中一个进程就是一个任务。ntasks表示要启动多少个并行进程。CPU核数cpus-per-task每个进程使用多少CPU核心OpenMP线程数通常与之对应。最常用的Slurm命令一张表记住命令作用常见用法sinfo查看分区和节点状态sinfo -o %P %a %D %t看分区概要squeue查看作业队列squeue -u 用户名只看自己的作业sbatch提交批处理脚本sbatch run.shsrun交互式运行/任务内启动并行程序srun ./a.outsalloc申请资源并分配交互Shellsalloc -p gpu --gresgpu:1scancel取消作业scancel 作业IDsacct查看作业历史信息sacct -j 作业ID --formatJobID,State,Elapsed,MaxRSSsinfo查看节点资源状态sinfo -N -o %N %c %m %G3.3 模块化软件环境module命令的正确姿势超算上的软件安装方式跟个人电脑很不一样。因为同一个软件可能有多个版本不同课题组对版本的需求不同而且预装在系统里容易互相冲突。所以超算中心普遍采用**环境模块Environment Modules**机制把不同的软件版本做成独立模块用户需要哪个就加载哪个。常见的命令module avail # 列出可用模块 module load 软件名/版本号 # 加载某个软件 module unload 软件名/版本号 # 卸载某个软件 module list # 查看已加载的模块 module purge # 清空所有模块我对新人的最大忠告是每次提交作业前把脚本里需要用到哪些module写清楚并且按顺序加载。很多人喜欢在登录节点上module load之后就忘了这回事结果提交作业时计算节点环境里根本没加载对应的软件程序直接报command not found。正确的做法是在作业脚本内部完成module的加载详见第4节而不是依赖登录节点的当前环境。4. 从串行到并行一份作业脚本的成长史4.1 sbatch脚本的基本骨架Slurm批处理脚本本质是带调度指令的Shell脚本。开头是若干以#SBATCH开头的参数行后面是你真正要执行的命令。新生最容易犯的错是把#SBATCH当成普通注释忽略掉或者把参数写错位置——这些行必须在脚本的头部不能写一半突然插进去因为调度器只解析脚本最前面的这些标记。一个最基础的模板长这样#!/bin/bash #SBATCH --job-nametest_job # 作业名称 #SBATCH --partitioncpu # 指定分区队列 #SBATCH --nodes1 # 申请1个节点 #SBATCH --ntasks1 # 总任务数进程数 #SBATCH --cpus-per-task4 # 每任务CPU核数 #SBATCH --mem16G # 总内存 #SBATCH --time02:00:00 # 最长运行时间2小时 #SBATCH --output%j.out # 标准输出文件%j作业ID #SBATCH --error%j.err # 错误输出文件 module load 软件名/版本号 # 在这里写你要执行的命令 echo Job started at $(date) 你的程序命令 echo Job finished at $(date)保存为run.sh之后在登录节点执行sbatch run.sh调度器就会把这个脚本连同资源请求一起提交。如果分配成功脚本会在计算节点上执行输出结果写到指定文件里。4.2 串行任务脚本最简单但不能小看串行任务指程序本身只有一个进程、只用一个CPU核心。你的脚本可以这样写#!/bin/bash #SBATCH --job-nameserial_job #SBATCH --partitioncpu #SBATCH --nodes1 #SBATCH --ntasks1 #SBATCH --cpus-per-task1 #SBATCH --mem4G #SBATCH --time00:30:00 module purge module load python/3.9 python my_script.py这里--cpus-per-task1表示只需要1个核。如果程序确实只跑单核别多申请核心否则既浪费资源又降低自己的优先级——调度系统对超额申请是零容忍的多占的核心你不一定用得上但会给集群调度带来麻烦。4.3 单节点多核脚本OpenMP与CPU绑定很多程序支持共享内存并行OpenMP意思是在一个节点内开多个线程共同操作一份内存数据。这种模式的CPU资源申请方式是把--cpus-per-task设成线程数然后在程序运行时设置环境变量OMP_NUM_THREADS#!/bin/bash #SBATCH --job-nameopenmp_job #SBATCH --partitioncpu #SBATCH --nodes1 #SBATCH --ntasks1 #SBATCH --cpus-per-task16 #SBATCH --mem32G #SBATCH --time01:00:00 export OMP_NUM_THREADS16 ./my_openmp_program注意OMP_NUM_THREADS必须跟--cpus-per-task保持一致。一个是告诉调度器我需要多少核一个告诉运行库我实际用多少线程。两者不一致时程序可能只用到部分核心白白浪费资源也可能超过实际申请的核数导致性能不升反降。4.4 MPI多节点并行脚本注意分配数量与进程数当单个节点的核心满足不了你的计算规模就需要跨节点并行。MPIMessage Passing Interface是分布式内存并行的事实标准。它的资源申请逻辑跟前面不同不仅要声明节点数还要声明总进程数--ntasks。提交时用srun启动MPI程序#!/bin/bash #SBATCH --job-namempi_job #SBATCH --partitioncpu #SBATCH --nodes2 #SBATCH --ntasks-per-node16 #SBATCH --ntasks32 #SBATCH --cpus-per-task1 #SBATCH --mem8G #SBATCH --time08:00:00 module load mpi/openmpi-4.1.5 srun ./my_mpi_program这等于跟调度器说我要2个节点每个节点16个任务进程总共32个进程每个进程1个核。调度器会把这32个进程均匀分配到两个节点的32个核上。执行MPI程序的命令必须是srun或mpirun不能直接./my_mpi_program——因为MPI程序需要运行库先把分布式环境建立起来进程之间才能通信。4.5 GPU任务脚本资源申请与CUDA环境现在深度学习任务越来越常见武大超算也配备了GPU分区。GPU任务的申请方式是在普通CPU资源之上额外指定GPU数量#!/bin/bash #SBATCH --job-namegpu_job #SBATCH --partitiongpu #SBATCH --nodes1 #SBATCH --ntasks1 #SBATCH --cpus-per-task8 #SBATCH --gresgpu:1 #SBATCH --mem64G #SBATCH --time12:00:00 module load cuda/11.8 module load pytorch/2.1.0 python train.py --epochs 100 --batch_size 128--gresgpu:1是Slurm里申请GPU的标准写法意思是通用资源Generic RESource里的GPU要1块。带的卡数一定要跟代码里的device_count逻辑一致申请1卡却写多卡代码会报错申请4卡却只用1卡又会让排队变慢。GPU资源紧张申请之前先去确认自己的模型能不能充分利用。5. 先排队再上机作业状态与资源限制的完整解读5.1 作业为什么一直在排队PD状态的自我诊断提交作业后用squeue -u 我的用户名查看状态。如果Job State显示PDPending说明作业在排队还没轮到。出现PD的原因主要有以下几类资源不足你想申请16核64G内存但当前分区没有满足条件的空闲节点。时间限制你申请的--time超过了该分区允许的最大运行时长调度器拒绝分配。QOS限制用户或组级别的资源配额用完比如最多只能同时提交N个作业或者累计占用核时数打满。依赖未满足作业之间有依赖关系前面的作业还没跑完后面的只能等着。遇到长时间PD先别急着反复sbatch重复提交。正确做法是用scontrol show job 作业ID查看详细原因再决定是缩小资源申请、换分区还是等待高峰过去。5.2 RUN、COMPLETED还是FAILED常见状态与后续动作作业提交之后几种状态的含义状态含义该做什么CF正在配置节点几秒钟耐心等待PD排队中查看原因评估是否调整申请R运行中让它跑注意观察日志CG正在结束清理资源中等清理完成CD已完成检查输出文件F失败查看.err日志定位错误TO超时时间申请太短或程序卡死OOM内存溢出加大--mem或优化程序内存占用新手最容易忽略的是TOTimeout这种状态。作业被调度系统主动终止并不代表代码一定有问题有时候只是时间不够。比如程序需要跑10小时你只申请了2小时时间一到就会被杀。遇到这种情况先估算好计算量再合理设置--time留出20%冗余比较稳妥。5.3 配额与时间限制别再被QOS卡脖子QOSQuality of Service是超算上一种比较隐蔽的限制机制。它就像一张用户权益卡规定了你一次最多能占多少节点、排队最长多久、一天之内能申请多少核心时。武大超算通常按课题组分配额度正常情况下个人用户不需要频繁查询但出现异常排队时就要考虑是不是配额用完了。查询配额信息的方法各个超算不一样但sacct可以帮你了解历史作业占用的资源和时长。比如sacct --starttime 2025-01-01 --formatJobID,Partition,Timelimit,Elapsed,TotalCPU,MaxRSS,State这条命令能列出该时间段内所有作业的运行时间、CPU总时长、峰值内存。如果发现某个作业的CPU总时长几乎等于运行时长乘核数说明程序并行效率尚可如果相差悬殊说明并行化做得不好回头优化代码的收益可能比申请更多资源更大。6. 实操中的坑与解决思路从我的一线踩坑经历说起6.1 内存溢出OOM一个低配参数的教训有次我帮同门提交一个结构优化的任务脚本里--mem8G程序跑了一晚上之后写出的日志全是报错slurmstepd: error: *** JOB 12345 ON node005 CANCELLED AT 2025-03-02T03:15:22 DUE TO TIME LIMIT ***。这是典型的超时被杀但更麻烦的是很多入门的参数叠加在一起背后的逻辑是用户申请的资源没有按任务实际需求来调整。排查内存问题时建议用sacct -j 作业ID --formatJobID,MaxRSS,Elapsed,State查看实际峰值内存。如果MaxRSS已经接近甚至略超你申请的--mem就该适当增加内存申请或者优化代码减少内存占用。注意内存请求不是越大越好申请64G却只用2G会让大量空闲节点无法分配给其他人并且极大降低你自己后续作业的优先级。6.2 环境依赖不一致module版本与代码版本的冲突另一种高频报错是这样的代码在自己电脑上跑得好好的一到超算上就崩报各种ImportError: libxxx.so: cannot open shared object file。大部分原因是计算节点上没有正确加载代码运行所需的动态链接库。超算上的库五花八门module load顺序错了、版本选错了都会出问题。我的排查习惯是三步走第一先确认登录节点上which到的可执行文件路径来自哪个module第二在作业脚本里按顺序加载依赖模块并加一行which 你的软件来验证第三如果还报动态库缺失用ldd 可执行文件查看它依赖的.so文件针对性加载对应模块。这个排查链路通用性很强几乎所有超算环境都适用。6.3 数据搬运效率低inode、小文件与压缩传输超算计算中输入输出数据往往很大。新手容易踩的坑是把几万个小文件直接scp到集群上结果传了一整天还没传完或者集群提示no space left on device但明明还有几十GB空间。这不是空间满了而是inode用完了——文件系统允许创建的文件条目数inode达到了上限。成千上万个小文件每个都要占一个inode配额很快见底。解决方案也很简单打成一个压缩包再上传到集群上解压。传输大文件时建议用rsync而不是scp因为rsync支持断点续传和增量同步rsync -avP 本地文件 用户名集群IP:~/data/另外超算上的家目录通常有容量和inode配额临时大量读写应该放到高速的Scratch目录或项目目录下别都往~/塞。6.4 突然断连与终端复用tmux与后台任务最后一个必须解决的问题稳定性。SSH连上超算之后如果你在这边写代码、看日志、监控训练过程突然本地网络断了、电脑休眠了、或者终端窗口被误关了SSH连接就会断开。连接一断前台进程会收到挂断信号而被终止跑了十几个小时的训练任务就这么没了那种心情我至今记得。解决方法是终端复用工具目前最主流的是tmux。思路很简单在登录节点上开启一个tmux会话所有操作都在虚拟终端里进行即使本地SSH断开远端的会话仍然存活重连之后可以原样恢复。基础操作就三个tmux new -s mywork # 新建一个名叫mywork的会话 tmux attach -t mywork # 重新连接attach到该会话 tmux ls # 列出所有会话进到tmux里之后再提交作业、查看日志、跑交互式进程就再也不怕断连了。顺带可以补充一个小技巧如果你的作业只希望后台静静跑可以直接用sbatch提交批处理作业把日志重定向到文件里完全不需要终端在线。7. 最后分享两个实测下来的小经验我在武大超算上折腾的这段时间有两个感受特别深。一个是善用短作业分区做调试。很多超算中心都设有专属短作业调试区比如2小时节点配额、高优先级、免费或低计费。我习惯把完整任务拆成小规模测试先用极小数据量、极短时间验证脚本和代码逻辑确认无误之后再用完整数据正式提交。这一步能省下海量的排队时间别一上来就拿正式任务去试错。另一个是动手记录自己的资源画像。每次作业跑完花三十秒看看sacct里报出的实际内存和运行时长形成一张记录表。时间长了你会对自己的任务吃多少资源了如指掌之后定--mem、--time基本一次到位再也不会被OOM或卡时限杀任务困扰。这比到处找人问应该申请多少核靠谱得多。武大超算这套环境说复杂也复杂说简单其实骨架就那几样登录、调度、脚本、环境、存储。把这五样吃透你就已经超越了大部分拿了账号只会求助师兄的新手。接下来加上自己的专业方向剩下的就都是水磨工夫了。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

Claude Code 终于能帮你剪视频了:开源 BeatDesign 的本地画布与时间线 2026/9/30 16:34:01

Claude Code 终于能帮你剪视频了:开源 BeatDesign 的本地画布与时间线

Claude Code 终于能帮你剪视频了:开源平替版 Higgsfield,本地画布 时间线一条龙 你的 AI Agent 能帮你写完一整个 App,却剪不了一条 30 秒的视频。 它看不到你的画布,也碰不到你的时间线。于是你又回到老路:提示词写…

阅读更多 →
深度学习入门指南:从神经网络原理到CNN实战与避坑手册 2026/9/30 16:34:01

深度学习入门指南:从神经网络原理到CNN实战与避坑手册

算起来,我接触神经网络和深度学习也有不少年头了。还记得最早的时候,很多人觉得这是个玄学,调参像炼丹,模型跑起来像黑盒。这几年深度学习已经完全不一样了,它渗透到了图像识别、语音合成、工业检测、流体仿真、量化交…

阅读更多 →
2026 企业 AI 办公工具选型指南:怎么匹配业务场景 2026/9/30 16:34:01

2026 企业 AI 办公工具选型指南:怎么匹配业务场景

一、企业选AI办公工具,为什么不能只看功能列表 很多企业在启动AI办公工具选型工作时,第一反应是拉取不同产品的公开功能清单,逐条比对条目数量,把功能覆盖的广度当成选型的核心判断标准。也有不少团队会直接参考公开的价格排序&am…

阅读更多 →
Jev平替GPT?三天接入踩坑复盘与分级处理降本策略 2026/9/30 16:33:53

Jev平替GPT?三天接入踩坑复盘与分级处理降本策略

1. 为什么我鬼迷心窍,非要把 Jev 当成“穷人版 GPT”接进来 先交代一下背景。当时项目组里正好在做一个内部工单助手,主要场景是让模型帮我们解析用户反馈、抽取关键信息、顺带给客服回话打个草稿。按当时的算力预算和成本模型,如果直接上 GP…

阅读更多 →
AI信息图生成实战:Qwen-Image-2.1提示词模板与本地部署 2026/9/30 16:33:53

AI信息图生成实战:Qwen-Image-2.1提示词模板与本地部署

信息图生成,一直是图像生成模型绕不开的硬骨头。文字渲染、版式布局、数据对齐,哪一样要求都不低,很多模型画风景画人物很顺手,一到带文字的信息图就露馅。Qwen-Image-2.1出来之后我实测了很久,发现这个模型在中文文字…

阅读更多 →
如何为手机AI应用构建测试体系:Off Grid AI三平台(Jest+JUnit+XCTest)测试矩阵实践 2026/9/30 16:33:53

如何为手机AI应用构建测试体系:Off Grid AI三平台(Jest+JUnit+XCTest)测试矩阵实践

如何为手机AI应用构建测试体系:Off Grid AI三平台(JestJUnitXCTest)测试矩阵实践 【免费下载链接】OGAM The Swiss Army Knife of Offline AI. Chat, see, speak, and generate images on your phone or Mac — GGUF LLMs, vision, Whisper s…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉