ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

武汉大学超算平台入门指南:从账号申请到Slurm作业调度实战

武汉大学超算平台入门指南:从账号申请到Slurm作业调度实战 1. 先说清楚超算到底是个什么东西我第一次接触超算这个词是在大二的一门数值计算课上。当时老师扔给我们一个三维流体模拟的作业说你们回宿舍用自己的笔记本跑跑看跑不动的再申请学校超算账号。我当时心里想能有多跑不动回去一跑直接傻眼——一个只有几十万网格点的算例内存直接爆掉硬盘一直在响CPU风扇转得跟直升机起飞一样。折腾了半个小时求解器还没进入迭代主循环。那是我第一次真正意识到个人笔记本和超算之间的差距根本不是“快一点”和“慢一点”的距离而是“能不能算”和“能算多大的问题”的距离。后来我申请了武汉大学的超算账号才算真正摸到高性能计算的门。这篇东西就是给完全没接触过超算的学弟学妹们写的入门介绍内容全部基于我在武汉大学超算平台上实际使用过程中的经验。你不需要有任何超算基础只要会基本的Linux命令能看懂下面这些内容就能把你的第一个并行作业跑起来。武大的超算平台是面向全校师生开放的不管你是做深度学习、流体力学、量子化学、分子动力学还是纯粹跑MATLAB的大矩阵运算都能用上。重点是它免费。对在校学生来说等于给你一台几千核CPU加几十张GPU的机器随便折腾只要你不乱搞跑什么正经算例都行。这篇入门会讲清楚四件事超算中心能提供什么资源、怎么申请账号、怎么连上去、怎么把作业交上去跑起来。最后一节我会把实战中踩过的坑都列出来帮你省下至少一个星期的摸索时间。2. 武汉大学超算平台的资源与架构盘点2.1 超算中心有什么硬件资源武汉大学超算中心的位置和具体硬件配置以学校官网公布的信息为准我这里只讲你实际使用时会碰到的资源类型。一般来说超算平台会把你需要用到的计算资源分成几个逻辑分区每个分区对应不通的硬件CPU计算分区用于传统数值计算、科学仿真、数据处理。这类分区一般由高主频的Xeon或EPYC处理器组成单节点通常几十个物理核心内存从128GB到512GB甚至更高。GPU加速分区用于深度学习训练、分子动力学模拟、AI推理等场景。节点上插着多张NVIDIA的GPU卡A100、V100、A800这类你多半会碰到显存从16GB到80GB不等。胖节点分区内存特别大的节点适合处理单机内存吃紧的大规模数据分析任务。有些任务的单个进程就需要几百GB内存普通计算节点根本装不下就得申请胖节点。存储系统超算平台一般会给你分配个人目录和共享目录个人目录空间有限但私密性高共享目录用于课题组内协作。存储系统通常是并行文件系统比如Lustre读写性能远高于普通磁盘阵列。登录超算平台之后输入sinfo命令就能看到当前有哪些分区、每个分区节点数量、状态等信息。第一次看到几十上百个节点整整齐齐列在那里的时候那种资源在手的感觉确实比用自己的笔记本跑计算舒服太多。2.2 账号体系和登录方式武汉大学超算平台的账号申请入口在学校的统一身份认证系统里。一般来说学生用自己的学号加密码就能登录申请页面填写导师信息、课题组归属、使用用途等内容提交后等待管理员审核。审核时间通常在一到两个工作日内快的当天就能下来。审核通过后你会得到一个超算平台专用的用户名和初始密码。第一次登录需要修改密码同时需要在网页端配置SSH公钥方便后续免密登录。这一步很重要因为后续你在自己电脑上跑的所有操作都要通过SSH连到超算的登录节点上进行。常用的连接方式有两种命令行SSH连接适合习惯终端的用户直接在本地终端执行ssh userlogin.hpc.whu.edu.cn输入密码登录。Web界面WebShell / JupyterHub / OnDemand适合不熟悉命令行的用户直接在浏览器里打开网页版终端甚至可以直接启动Jupyter Notebook进行交互式计算。我个人强烈建议你至少在初期学会用命令行连SSH因为后续提交作业、管理文件、查看任务状态全是在终端里操作的。Web页面虽然方便但很多高级功能还是得回终端里做。2.3 存储空间怎么分配登录进去后你会发现自己有几个不同的目录分别对应不同的存储空间和用途家目录/home/用户名个人私有空间容量一般有限比如50GB。适合存放代码、脚本、小规模测试数据不适合存放大型中间结果。共享目录/work/用户名或/public/用户名课题组共享空间容量更大适合存放数据集和运行日志。临时目录/tmp计算节点上的本地临时盘速度快但不保证数据安全性作业结束后可能被清空只适合放中间缓冲文件。存储这块我踩过一个大坑后面会专门展开这里先记住一条基本原则代码放家目录大数据放共享目录临时文件放临时目录别乱丢。3. 从零开始账号申请与首次登录全流程3.1 账号申请的分步操作申请武大超算账号的流程不同时期的入口可能略有调整但核心步骤绕不开下面这几步打开武汉大学信息门户搜索“超算”找到超算中心的申请入口。用学号登录统一身份认证点击“申请账号”。填写申请表包括所属学院、导师姓名、研究方向、预计使用时长、主要使用的软件类型。阅读并同意用户守则重点注意“禁止使用超算资源进行挖矿”“禁止登录节点上跑计算任务”等条款。提交后等待审核。审核通过后系统会通过校内邮箱通知你初始账号信息。收到通知后请第一时间登录并修改初始密码。这里有个小建议研究方向那栏不要只写“深度学习”这种模糊词尽量写具体一些比如“基于卷积神经网络的医学影像分割模型训练”。管理员在审核时更倾向于把资源批给用途明确、需求合理的申请写得越具体审核越顺利。3.2 SSH密钥配置省掉每次输密码的麻烦收到初始密码后建议你在第一时间配置SSH密钥这样后续登录就不用每次输密码了。以macOS和Linux自带的终端为例Windows用户用PowerShell或Git Bash都行操作如下ssh-keygen -t rsa -b 4096 -C your_emailwhu.edu.cn一路回车确认默认文件名和路径生成的公钥在~/.ssh/id_rsa.pub里。查看并复制公钥内容cat ~/.ssh/id_rsa.pub然后登录超算平台把公钥内容粘贴到网页端后台的“SSH密钥管理”里或者登录后在~/.ssh/authorized_keys文件里手动追加公钥。之后执行ssh userlogin.hpc.whu.edu.cn就能直接登录不再需要密码。我建议在本地写一个SSH配置文件~/.ssh/config给超算连接设置一个别名Host whuhpc HostName login.hpc.whu.edu.cn User your_username ServerAliveInterval 60这样以后只要输入ssh whuhpc就能连接而且ServerAliveInterval 60会让连接每隔60秒发一次心跳包避免长时间不操作被服务器踢下线。3.3 首次登录后的三件必做事项登录成功之后别急着跑大作业先花十分钟做这三件事第一把密码改掉。平台强制第一次登录修改密码如果你是通过网页端改的终端连接用的密码同步生效。改完新密码后如果配置了SSH密钥终端登录不受影响。第二查看用户使用手册。超算中心一般会在登录后的提示信息或网页端放一份用户手册里面写了详细的队列策略、计费规则、存储规定。建议通读一遍哪怕不细看也要知道哪些分区能用、哪些技术栈支持到什么版本。第三跑一个测试作业确认环境没问题。最简单的测试就是sinfo查看节点状态然后提交一个只输出主机名的作业确认调度器能正常接收你的作业。这一步能排查掉大部分账号权限和网络问题。4. 第一次提交作业Slurm调度系统实操4.1 Slurm是什么为什么要用它武汉大学超算平台使用的作业调度系统大概率是SlurmSimple Linux Utility for Resource Management。你把一个计算任务提交给SlurmSlurm会根据你申请的资源CPU核数、内存大小、GPU卡数、运行时长在所有计算节点中寻找合适的位置然后把任务安排上去执行。这里要理解一个核心逻辑登录节点和计算节点是分开的。你在登录节点上敲的所有命令都是在登录节点上执行的。这个节点是共享的几十上百个人同时在这里操作所以绝对不允许把大规模计算任务直接放在登录节点跑。你需要在登录节点编写作业脚本然后通过sbatch命令把作业提交给调度器由调度器分配到计算节点执行。类比一下日常场景登录节点就是一个公司前台处理各种事务性的沟通你不可能在前台办公区铺开摊子搞开发。计算节点才是你的工位Slurm就是工位分配系统你说你需要几把椅子CPU核数、多大的桌面内存、要不要独立办公室GPU节点它给你安排好了你坐下干活。4.2 一个最基础的Slurm作业脚本下面这个脚本是能跑通的最简SBATCH脚本实现的功能是申请一个CPU核运行一个Python脚本#!/bin/bash #SBATCH -J test_job # 作业名称 #SBATCH -p normal # 分区名称不同平台不一样 #SBATCH -N 1 # 申请节点数 #SBATCH -n 1 # 申请CPU总核数 #SBATCH --mem4G # 申请内存大小 #SBATCH -t 00:10:00 # 运行时间上限小时:分钟:秒 #SBATCH -o job_%j.out # 标准输出文件%j是作业ID #SBATCH -e job_%j.err # 标准错误输出文件 module load anaconda3 # 加载Python环境 python test.py # 运行脚本保存为test.sbatch用以下命令提交sbatch test.sbatch提交后会返回一个Job ID形如Submitted batch job 123456。用squeue -u 用户名查看任务排队和运行状态用sacct -j 123456查看任务的历史信息和资源使用情况。等任务跑完后job_123456.out文件里就是程序的标准输出。4.3 申请GPU节点跑深度学习任务跑深度学习时你需要的不是CPU核数而是GPU卡。脚本改成这样#!/bin/bash #SBATCH -J train_resnet #SBATCH -p gpu #SBATCH -N 1 #SBATCH --gresgpu:1 # 申请1张GPU卡 #SBATCH --mem32G #SBATCH -t 04:00:00 #SBATCH -o train_%j.out #SBATCH -e train_%j.err module load cuda/11.8 module load anaconda3 conda activate pytorch_env python train_resnet.py这里有两个关键点需要展开讲第一--gresgpu:1不一定适用于所有平台有些平台用--partitiongpu配合--gpus1有些用-G 1具体以超算中心的使用手册为准。提交前在登录节点跑scontrol show partition查看分区的详细参数是最保险的做法。第二module load是环境管理模块。超算平台通常用Environment Modules或Lmod管理不同版本的软件环境。你需要在脚本里主动加载需要的模块系统默认可能不会给你加载任何编译器、MPI、CUDA等环境。4.4 分配策略再好也架不住资源冲突提交作业之后你以为万事大吉但实际上资源请求和实际使用量是两个概念。有些人资源申请得很多实际用的很少就会拖慢整个队列的调度效率。反过来如果你申请了4G内存实际要跑10G作业会直接被杀掉输出日志里通常写着Out Of Memory。尽量不要在脚本里无脑写大内存和大核数够用就行。申请资源太夸张会降低你的优先级导致任务排队时间变长。5. 实用工具与模块加载让工作省力一倍5.1 module命令基础操作超算平台上安装了大量科学计算软件不可能全部放进环境变量里因为会冲突。解决办法就是module系统——你按需加载对应的模块加载后该软件的命令就自动加入PATH。最基本的几个命令module avail # 查看当前环境可用的所有软件模块 module list # 查看当前加载了哪些模块 module load gcc/9.3.0 # 加载指定版本的GCC编译器 module unload gcc/9.3.0 # 卸载指定模块 module purge # 清空所有已加载的模块在写作业脚本时尽量把需要的模块集中在脚本开头加载并且注意顺序。比如要用MPI编译的并行程序通常先加载编译器再加载MPI库最后加载其他依赖库。5.2 多版本环境管理的坑超算上的软件版本特别多python、gcc、cuda、cudnn都有多个版本并存。你本地调试得好好的代码到超算上一跑报“找不到某个库”十有八九是版本没配对。一个非常典型的场景本地用PyTorch 2.0写的代码到超算上加载的是默认PyTorch 1.10某些API的写法变了直接报错。解决方法很简单不要依赖默认环境用conda创建属于自己的虚拟环境module load anaconda3 conda create -n myenv python3.9 conda activate myenv conda install pytorch2.0.0 torchvision torchaudio pytorch-cuda11.8 -c pytorch -c nvidia每次提交作业前在脚本里加上module load anaconda3 conda activate myenv这样不管系统默认环境怎么变你的作业都能在可控的环境里运行排查问题也容易得多。5.3 在超算上跑Jupyter做交互式分析有时候你不想提交一个批处理作业而是想开着Jupyter Notebook一边看数据一边调代码。超算平台通常提供了交互式节点的申请方式srun -p gpu --gresgpu:1 --mem16G -t 02:00:00 --pty bash这个命令会给你开一个计算节点上的交互式shell你在里面加载环境、启动Jupytermodule load anaconda3 conda activate myenv jupyter notebook --no-browser --port8888此时Jupyter运行在计算节点的8888端口你需要用SSH隧道把远端的8888端口转发到本地。在本机另开一个终端执行ssh -N -L 8888:localhost:8888 用户名login.hpc.whu.edu.cn之后浏览器访问http://localhost:8888就能打开Notebook。这个方式特别适合数据探索和调试阶段因为交互式响应体验远好于提交批处理任务后干等输出。6. 跑通一个完整的入门算例矩阵乘法并行化这一节带大家走一遍完整的流程从把一台笔记本上串行的矩阵乘法代码改成能在超算上并行跑的版本。6.1 先写一个并行的MPI程序C语言假设我们要算两个1024x1024矩阵的乘法。单机单进程版本很容易但我们要演示的是多节点并行。用MPI把矩阵按行分块每个进程算自己的那一块。#include stdio.h #include stdlib.h #include mpi.h #define N 1024 int main(int argc, char** argv) { int rank, size; MPI_Init(argc, argv); MPI_Comm_rank(MPI_COMM_WORLD, rank); MPI_Comm_size(MPI_COMM_WORLD, size); double *a NULL, *b (double*)malloc(N*N*sizeof(double)); int rows_per_proc N / size; double *a_local (double*)malloc(rows_per_proc*N*sizeof(double)); double *c_local (double*)malloc(rows_per_proc*N*sizeof(double)); // 初始化矩阵B所有进程都有一份完整的B for (int i 0; i N*N; i) b[i] rand() % 100; if (rank 0) { a (double*)malloc(N*N*sizeof(double)); for (int i 0; i N*N; i) a[i] rand() % 100; } // 把矩阵A按行分块分发给各个进程 MPI_Scatter(a, rows_per_proc*N, MPI_DOUBLE, a_local, rows_per_proc*N, MPI_DOUBLE, 0, MPI_COMM_WORLD); // 每个进程计算自己那一块的乘积 for (int i 0; i rows_per_proc; i) { for (int j 0; j N; j) { c_local[i*N j] 0.0; for (int k 0; k N; k) { c_local[i*N j] a_local[i*N k] * b[k*N j]; } } } // 汇总结果 double *c NULL; if (rank 0) c (double*)malloc(N*N*sizeof(double)); MPI_Gather(c_local, rows_per_proc*N, MPI_DOUBLE, c, rows_per_proc*N, MPI_DOUBLE, 0, MPI_COMM_WORLD); if (rank 0) { printf(Matrix multiplication done. c[0][0] %f\n, c[0]); free(a); free(c); } free(b); free(a_local); free(c_local); MPI_Finalize(); return 0; }把代码保存为matmul.c。这段代码的逻辑是0号进程负责读入全量矩阵A通过MPI_Scatter把A的行分块发给所有进程每个进程手上有完整的矩阵B和A的一部分行算出自己负责的行块结果后再用MPI_Gather把结果收集回0号进程。6.2 编译和提交作业在超算登录节点上先加载MPI编译环境然后编译module load gcc/9.3.0 module load openmpi/4.1.1 mpicc -O2 -o matmul matmul.c编译成功后写一个作业脚本#!/bin/bash #SBATCH -J matmul_test #SBATCH -p normal #SBATCH -N 2 #SBATCH -n 16 #SBATCH --mem8G #SBATCH -t 00:10:00 #SBATCH -o matmul_%j.out module load gcc/9.3.0 module load openmpi/4.1.1 mpirun -np 16 ./matmul提交并等待sbatch matmul.sbatch squeue -u 你的用户名跑完后查看输出你应该能看到计算结果。这是最简单也最完整的并行计算流程写MPI代码、加载MPI环境、编译、通过Slurm调度多进程运行。6.3 运行结果的直观对比为了让你直观理解并行计算的收益我在实际测试中跑过同一份矩阵乘法代码分别用了1个、4个、16个进程。1024大小的矩阵乘法在单核上运行时间大概要几十秒4进程时缩到十几秒16进程时能压到几秒。但要注意并行加速不是线性的。进程数翻四倍运行时间不会严格缩到四分之一。原因有三点第一进程间通信有开销第二MPI_Scatter和MPI_Gather在数据量大的时候本身就是瓶颈第三矩阵乘法的问题是数据密集型内存带宽限制会制约加速比。这些都是在实际运行中才能体会到的经验光看书是学不来的。7. 超算使用中的常见问题与排查技巧7.1 作业一直排队状态显示PENDING这是初学者最常遇到的现象提交作业后squeue一看状态不是RUNNING而是PENDING心里就开始慌。其实PENDING不代表出问题了只是调度器还在等资源常见原因有分区资源已经满了没有空闲节点。你申请的GPU卡数量超过当前分区剩余量。你申请的--time太长调度器在寻找能一次性空出足够时长的窗口backfill调度的特点。你的账户有资源使用配额限制超额后新作业会被挂起。排查方法用squeue -u 用户名查看具体原因其中REASON列会显示Resources没资源、Priority优先级低、Dependency依赖未完成、AssociationJobLimit账户配额限制等信息。等待时间如果特别长可以考虑换分区、降低资源申请、或缩短运行时长。申请-t 00:30:00的任务通常比申请-t 48:00:00的任务更容易被调度器插入空档。7.2 作业被KILL日志里写OOMOOM全称Out Of Memory意思是程序运行过程中申请的内存超过了作业脚本里#SBATCH --mem指定的内存上限。超算平台的内存管理是硬性的一旦超限内核会直接杀掉你的进程不会给你商量余地。解决办法有几个方向在脚本里调大--mem参数但注意不要超过节点物理内存上限否则作业直接无法调度。检查代码是否有内存泄漏或者数组越界。C和C的代码尤其需要关注malloc了但没free或者越界修改了相邻内存都会导致内存增长异常。用sacct -j 作业ID --formatJobID,MaxRSS,MaxVMSize查看作业实际消耗的内存峰值。我遇到过一次很有趣的情况代码在本地跑得好好的上超算就OOM排查半天发现是因为超算节点CPU主频比本地高程序跑得太快一个本应在短时间内处理完的数组因为某个边界条件判断错误直接撑爆了内存。所以OOM不一定是资源不够也有可能是代码bug。7.3 作业失败但日志文件里没有任何报错这种情况最让人抓狂。提交作业后显示失败但job_xxx.err文件是空的或者只有几行系统日志。排查思路如下第一检查脚本格式。Windows下编辑的脚本会有CRLF换行符Linux系统识别异常导致脚本无法正常执行。用sed -i s/\r$// script.sbatch清理一下换行符。第二检查#SBATCH参数是否有拼写错误比如把--mem写成-mem把--gresgpu:1写成--gresGPU:1。这类错误在Slurm里通常不会报错而是当作非法参数忽略导致你的作业以极少的默认资源去运行大概率失败。第三检查指定运行路径。脚本里有没有cd到某个目录作业运行时的工作目录默认是提交作业时的目录但如果你在脚本里写了相对路径计算节点上执行时找不到文件就会静默失败。第四查看详细日志sacct -j 作业ID --formatJobID,JobName,State,ExitCode,Elapsed,TotalCPU,MaxRSS这个命令会给出作业的状态和退出码根据ExitCode可以进一步判断是程序本身错误还是系统级错误。7.4 GPU作业报CUDA错误跑深度学习时最常见的报错就是CUDA相关的比如CUDA out of memory或CUDA driver version is insufficient。第一个报错说明你的模型加batch size所需的显存超过了申请的GPU显存。调小batch size、换更小的输入分辨率、或者用梯度累积都可以缓解。如果你确认模型不大那可能是其他用户的进程占用了卡用nvidia-smi查看当前GPU的占用情况。第二个报错多半是CUDA版本和PyTorch等框架的CUDA版本不匹配。超算上会有多个CUDA版本共存module load cuda/11.8和module load cuda/12.1对应的驱动版本要求不同。建议创建conda环境时安装匹配的PyTorch版本即可不一定非要加载系统的CUDA模块——PyTorch自带的CUDA runtime和系统驱动通常就能跑起来。7.5 数据存储爆掉与清理技巧超算的家目录空间有限你训练出来的模型权重文件、中间检查点、数据集副本很容易把空间占满。占满后有个连锁反应新建文件失败、作业日志写不进去、甚至SSH登录都可能受到影响。推荐几个定期执行的清理命令du -sh * | sort -rh | head -20按目录大小排序查看哪些目录占空间最多。然后对可以删但不舍得删的文件建议打包压缩放到共享盘而不要放在家目录里占用配额。训练模型时如果每个epoch保存一个checkpoint动辄几百GB可以只保留最后一个epoch的权重文件或者用脚本定期清理find . -name checkpoint_*.pt -mtime 3 -delete这条命令会删除三天前的 checkpoint 文件。注意使用前先在测试目录试运行一次确认路径和匹配规则正确再正式执行。8. 进阶操作提升你在超算上的使用效率8.1 用sbatch提交多个任务的循环脚本真正跑科研项目时你不止跑一个算例而是要跑参数扫描。不同学习率、不同网络宽度、不同随机种子一跑就是几十上百个实验。逐个手动提交肯定不现实用循环脚本批量提交#!/bin/bash for lr in 0.001 0.0005 0.0001; do for seed in 1 2 3; do sbatch run_exp.sbatch --lr $lr --seed $seed done done然后在run_exp.sbatch里通过$接收这些参数#!/bin/bash #SBATCH -J exp_job #SBATCH -p gpu #SBATCH --gresgpu:1 #SBATCH --mem16G #SBATCH -t 02:00:00 python train.py $提交时sbatch run_exp.sbatch --lr 0.001 --seed 1会把--lr 0.001 --seed 1传给脚本内部的python train.py。这样既可以批量提交又能保证每个实验的日志文件相互独立。8.2 用数组任务更优雅地跑参数扫描除了循环提交Slurm还提供了一种更优雅的方式作业数组。适合几十个参数组合的场景一个脚本搞定#!/bin/bash #SBATCH -J grid_search #SBATCH -p gpu #SBATCH --gresgpu:1 #SBATCH --mem16G #SBATCH -t 02:00:00 #SBATCH --array1-9 # 提交9个子任务 python train.py --config config_${SLURM_ARRAY_TASK_ID}.yaml作业数组会把一个作业拆分成多个独立的子任务每个子任务有一个SLURM_ARRAY_TASK_ID从1到9。配合预先生成的九个不同配置文件就能实现参数扫描。查看状态时用squeue -u 用户名能看到多个jobID_taskID格式的作业日志文件也会自动加上任务ID后缀。这个功能我强烈推荐比写循环脚本更规范调度器会把子任务分散到不同的空闲节点负载均衡也更好。8.3 数据上传下载的稳定方案把本地大量数据传输到超算是每个人的头号难题。数据量小可以直接用scpscp -r local_data/ 用户名login.hpc.whu.edu.cn:/work/用户名/但数据量上GB甚至TB级别时scp容易断断了就从头再来。推荐用rsync支持断点续传rsync -avzP --partial local_data/ 用户名login.hpc.whu.edu.cn:/work/用户名/参数解释一下-a归档模式保留文件属性-v显示详细信息-z传输时压缩-P显示进度并支持断点续传--partial保留部分传输的文件。中断后重新执行同样的命令会从上次断点继续传。如果数据量特别大还有一个思路先传到共享目录然后在超算节点之间用高速互联拷贝速度比从你本地直接传快很多倍。8.4 用后台终端工具保住你的计算任务用sbatch提交的作业本身就是后台运行的不用担心SSH断开导致任务被终止。但如果你用srun开了交互式会话或者直接在登录节点跑长时间任务SSH断开任务就会终止。强烈建议你在本机使用tmux或screen来管理长任务tmux new -s mywork # 新建一个会话 # 在其中执行你想跑的长时间任务 tmux detach # 退出但保持会话运行 tmux attach -t mywork # 重新连接会话这样即使你电脑休眠或网络断了远端任务仍然在继续跑重连后可以随时看到状态。9. 总结把超算当成你的算力实验室我到现在还记得第一次在超算上跑通一个64核并行作业时的那种兴奋感。日志里每个进程打印出一行Hello from rank X十六行整整齐齐排在那里那一刻才真正理解了什么叫并行计算。它不是某个虚无缥缈的概念就是一行行真实跑在几十个核心上的代码。武大超算平台给大家提供了一个几乎零门槛接触高性能计算的机会。本科阶段就能把作业跑在真正的集群上这段经历对以后接触大规模计算、云计算、分布式系统都有极大的帮助。不管你是本科生、研究生还是刚进组的博士生如果手头有计算需求都值得花一个下午的时间把超算的入门流程走通。门槛不高收益很大。这篇文章看起来是写给超算新手的但我自己写下这些经验的时候也在复盘高效使用超算的核心其实就三条原则——清楚自己要算什么、知道要申请多少资源、严格把登录节点和计算节点分开。能做到这三点你就已经超过一半的用户了。最后再分享一个小技巧如果你不确定某个命令在超算环境下的行为先申请一个交互式会话在里面把命令试跑一遍再写进批处理脚本。在交互式环境里调试的成本远低于反复提交sbatch作业等待排队这个习惯能帮你节省大量时间。
返回列表