在超算(HPC)环境中,登录节点(Login Node) 只能用来修改代码或简单编译,绝对不能直接运行深度学习训练。一旦你开始 import torch 并进行计算,就必须申请计算节点(Compute Node)。
提示:这篇笔记记录了在当前超算平台上使用 GPU 的常用命令,方便随时查阅。 目前已实测成功的核心命令是:
1srun --gres=gpu:2 --pty bash成功进入计算节点后,用
nvidia-smi可以看到 2 张 NVIDIA A100-PCIE-40GB。
一、平台已知情况
根据当前实际测试,该平台具有以下特点:
- 可以不手动指定分区。
- 直接使用
srun --gres=gpu:2 --pty bash就能成功申请 GPU。 - 申请成功后会进入计算节点,不再占用登录节点资源。
- 通过
nvidia-smi可以确认 GPU 型号为 NVIDIA A100-PCIE-40GB。 - 不允许手动额外指定
--mem,否则会报错(内存由系统自动分配)。
二、交互式申请 GPU
交互式申请非常适合:调试代码、测试环境、检查 CUDA/PyTorch 识别情况 以及 小规模实验。
1. 申请 2 张 GPU(实测成功)
|
|
成功后,终端提示符一般会从登录节点变为计算节点,例如:
[scx7784@paraai-n32-h-01-agent-9 ~]$
这说明已经进入实际的 GPU 节点了。
2. 其他申请规模与参数
- 申请 1 张 GPU:
srun --gres=gpu:1 --pty bash - 申请 4 张 GPU:
srun --gres=gpu:4 --pty bash(取决于平台资源和配额) - 增加 CPU 核心数:
srun --gres=gpu:2 --cpus-per-task=8 --pty bash
⚠️ 注意:不要手动写
--mem这个平台之前已经出现过报错,说明内存不是自由申请的。不要使用类似srun --gres=gpu:2 --mem=32G --pty bash的写法。
三、检查 GPU 状态
成功申请并进入节点后,建议第一时间运行:
|
|
实测输出应包含类似如下信息:
GPU 0: NVIDIA A100-PCIE-40GBGPU 1: NVIDIA A100-PCIE-40GB
四、加载系统模块
超算环境的软件(如 CUDA、Anaconda)通常不是默认全局可用的,需要通过 module 系统加载。
1. 常用查看与清理命令
|
|
2. 常见依赖加载
不同平台命名可能略有区别,以下为常见写法:
|
|
五、激活 Conda 环境
通常的顺序是:进入计算节点 -> 加载 Anaconda 模块 -> 激活环境。
|
|
提示:如果
conda activate报错,可以尝试先执行source ~/.bashrc,或者先确认是否已经module load anaconda3。
六、完整交互式工作流示例
适合在正式跑 WSI 处理或训练模型前,先检查环境和代码是否能跑通:
|
|
如果你只是想测试 PyTorch 状态,可以进入 Python 交互界面执行:
|
|
测试完毕后,输入 exit 即可退出计算节点并释放 GPU。
七、批处理提交任务 (sbatch)
如果是正式训练(比如跑几十个 Epoch 的生存分析模型),不建议一直开着交互式终端。更推荐写成脚本后用 sbatch 提交后台运行。
1. 新建任务脚本 (train_a100.sh)
|
|
2. 提交与管理任务
- 提交任务:
sbatch train_a100.sh(会返回一个任务号,如 123456) - 查看个人任务:
squeue -u $USER - 查看任务详情:
scontrol show job 123456 - 取消某个任务:
scancel 123456
3. 查看后台日志
任务运行时的输出会重定向到脚本中定义的 .out 和 .err 文件:
|
|
八、总结与最佳实践
交互式 (srun) 适合排障和测试,批处理 (sbatch) 适合长时间计算。对我当前这个平台来说,最成熟的流程是:
- 先用
srun --gres=gpu:2 --pty bash拿到节点,把数据读取、Loss 计算等流程跑通。 - 确认无误后
exit释放资源。 - 编写
train_a100.sh,使用sbatch提交正式跑批。 - 使用
tail -f监控日志,或用squeue -u $USER观察状态。
|
|