西电超算GPU实战:从零到一,让RTX 3090为你加速
第一次登录西电超算,面对满屏的命令行和陌生的队列系统,是不是感觉有点无从下手?尤其是当你手头的项目需要用到GPU,比如那块性能强劲的RTX 3090时,如何正确配置环境、提交作业,就成了横在面前的第一道坎。别担心,这篇文章就是为你准备的。它不是一份冷冰冰的官方手册翻译,而是一个过来人踩过坑、趟过雷之后,为你梳理出的一条清晰路径。我们将聚焦于GPU环境的搭建,特别是针对RTX 3090这类高性能显卡,从最基础的队列选择讲起,到CUDA、cuDNN的配置,再到Conda环境的激活与依赖库的加载,最后完成作业的提交与监控。整个过程,我会穿插那些官方文档里可能没写,但实践中一定会遇到的“坑”和解决方案,目标是让你看完就能动手,一次配置成功。
1. 理解西电超算:资源、队列与你的第一份作业脚本
在开始敲命令之前,花几分钟理解超算的基本工作模式至关重要。西电超算是一个共享的高性能计算集群,这意味着所有用户共享计算资源(CPU、GPU、内存等)。为了公平、高效地调度这些资源,系统采用了作业调度系统。你的每一个计算任务,都需要通过编写一个“作业脚本”来向系统申请资源,然后由调度器(如LSF、Slurm或西电自研的JSUB)安排到合适的计算节点上执行。
对于新手来说,最容易混淆的就是**队列(Queue)**的概念。你可以把队列想象成不同类别的“服务窗口”。有的窗口专门处理CPU密集型任务(normal队列),有的窗口则配备了强大的GPU(gpu队列)。选择错误的队列,你的作业要么无法运行,要么无法调用到GPU资源。
1.1 作业脚本骨架:从Shebang到资源声明
一个最基本的作业脚本,通常以指定解释器的“Shebang”行开始。对于Bash脚本,就是:
#!/bin/bash
接下来是核心部分:通过特定的注释指令(以#JSUB开头)向调度器声明你需要的资源。这些指令必须在脚本的最前面,且在任何可执行命令之前。一个典型的GPU作业脚本头如下:
#!/bin/bash
#JSUB -q gpu # 指定使用GPU队列
#JSUB -gpgpu "1 type=NVIDIAGeForceRTX3090" # 申请1块RTX 3090显卡
#JSUB -app default # 指定应用类型,通常为default
#JSUB -n 16 # 申请16个CPU核心
#JSUB -e error.%J # 指定标准错误输出文件,%J会被替换为作业ID
#JSUB -o output.%J # 指定标准输出文件
#JSUB -J my_gpu_job # 给你的作业起个名字,便于识别
注意:
-gpgpu参数的格式非常关键。"1 type=NVIDIAGeForceRTX3090"中,数字1和显卡型号之间必须有一个空格,并且整个参数值用双引号括起来。写错会导致资源申请失败。
相比之下,一个CPU作业的脚本头就简单许多:
#!/bin/bash
#JSUB -q normal # 使用CPU队列
#JSUB -app default
#JSUB -n 32 # 可以申请更多的CPU核心,例如32个
#JSUB -e error.%J
#JSUB -o output.%J
#JSUB -J my_cpu_job
资源申请策略:
- CPU核心数(-n):并非越多越好。申请超过你任务实际所需的核数,会造成资源浪费,并可能因为等待更多空闲核心而延长排队时间。对于大多数机器学习训练任务,8-16个核心配合一块GPU通常已经足够。
- GPU类型:明确指定
NVIDIAGeForceRTX3090能确保你获得该型号显卡。如果不指定,系统可能会分配任意可用型号的GPU,可能导致CUDA兼容性问题。
1.2 环境配置的基石:Module系统
超算系统上通常安装了成百上千个软件的不同
731



被折叠的 条评论
为什么被折叠?



