超算平台 GPU 使用指南(A100 40G 实测版)

记录当前超算平台上 A100 40G GPU 的申请、环境激活、任务查看与取消等常用命令。

在超算(HPC)环境中,登录节点(Login Node) 只能用来修改代码或简单编译,绝对不能直接运行深度学习训练。一旦你开始 import torch 并进行计算,就必须申请计算节点(Compute Node)

提示:这篇笔记记录了在当前超算平台上使用 GPU 的常用命令,方便随时查阅。 目前已实测成功的核心命令是:

1
srun --gres=gpu:2 --pty bash

成功进入计算节点后,用 nvidia-smi 可以看到 2 张 NVIDIA A100-PCIE-40GB


一、平台已知情况

根据当前实际测试,该平台具有以下特点:

  1. 可以不手动指定分区
  2. 直接使用 srun --gres=gpu:2 --pty bash 就能成功申请 GPU。
  3. 申请成功后会进入计算节点,不再占用登录节点资源。
  4. 通过 nvidia-smi 可以确认 GPU 型号为 NVIDIA A100-PCIE-40GB
  5. 不允许手动额外指定 --mem,否则会报错(内存由系统自动分配)。

二、交互式申请 GPU

交互式申请非常适合:调试代码、测试环境、检查 CUDA/PyTorch 识别情况 以及 小规模实验

1. 申请 2 张 GPU(实测成功)

1
srun --gres=gpu:2 --pty bash

成功后,终端提示符一般会从登录节点变为计算节点,例如: [scx7784@paraai-n32-h-01-agent-9 ~]$ 这说明已经进入实际的 GPU 节点了。

2. 其他申请规模与参数

  • 申请 1 张 GPUsrun --gres=gpu:1 --pty bash
  • 申请 4 张 GPUsrun --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 状态

成功申请并进入节点后,建议第一时间运行:

1
nvidia-smi

实测输出应包含类似如下信息:

  • GPU 0: NVIDIA A100-PCIE-40GB
  • GPU 1: NVIDIA A100-PCIE-40GB

四、加载系统模块

超算环境的软件(如 CUDA、Anaconda)通常不是默认全局可用的,需要通过 module 系统加载。

1. 常用查看与清理命令

1
2
3
module avail       # 查看所有可用模块
module list        # 查看当前已加载的模块
module purge       # 清空已有模块(环境乱了时非常好用)

2. 常见依赖加载

不同平台命名可能略有区别,以下为常见写法:

1
2
3
4
5
6
7
8
# 加载 Anaconda
module load anaconda3

# 加载 CUDA
module load cuda/11.8

# 加载 cuDNN
module load cudnn/8.8.1.3_cuda11.x

五、激活 Conda 环境

通常的顺序是:进入计算节点 -> 加载 Anaconda 模块 -> 激活环境。

1
2
3
conda env list            # 查看所有 Conda 环境
conda activate myenv      # 激活目标环境
conda deactivate          # 退出环境

提示:如果 conda activate 报错,可以尝试先执行 source ~/.bashrc,或者先确认是否已经 module load anaconda3


六、完整交互式工作流示例

适合在正式跑 WSI 处理或训练模型前,先检查环境和代码是否能跑通:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# 1. 申请计算节点
srun --gres=gpu:2 --pty bash

# 2. 清理并加载环境
module purge
module load anaconda3
module load cuda/11.8

# 3. 激活 Conda 并检查 GPU
conda activate myenv
nvidia-smi

# 4. 运行训练脚本
python train_mclam.py

如果你只是想测试 PyTorch 状态,可以进入 Python 交互界面执行:

1
2
3
4
import torch
print(torch.cuda.is_available())
print(torch.cuda.device_count())
print(torch.cuda.get_device_name(0))

测试完毕后,输入 exit 即可退出计算节点并释放 GPU。


七、批处理提交任务 (sbatch)

如果是正式训练(比如跑几十个 Epoch 的生存分析模型),不建议一直开着交互式终端。更推荐写成脚本后用 sbatch 提交后台运行。

1. 新建任务脚本 (train_a100.sh)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
#!/bin/bash
#SBATCH -J train_mclam
#SBATCH --gres=gpu:2
#SBATCH -o %j.out
#SBATCH -e %j.err

module purge
module load anaconda3
module load cuda/11.8

conda activate myenv
nvidia-smi

python train_mclam.py

2. 提交与管理任务

  • 提交任务sbatch train_a100.sh (会返回一个任务号,如 123456)
  • 查看个人任务squeue -u $USER
  • 查看任务详情scontrol show job 123456
  • 取消某个任务scancel 123456

3. 查看后台日志

任务运行时的输出会重定向到脚本中定义的 .out.err 文件:

1
2
3
4
5
# 实时查看标准输出日志
tail -f 123456.out

# 实时查看报错日志
tail -f 123456.err

八、总结与最佳实践

交互式 (srun) 适合排障和测试,批处理 (sbatch) 适合长时间计算。对我当前这个平台来说,最成熟的流程是:

  1. 先用 srun --gres=gpu:2 --pty bash 拿到节点,把数据读取、Loss 计算等流程跑通。
  2. 确认无误后 exit 释放资源。
  3. 编写 train_a100.sh,使用 sbatch 提交正式跑批。
  4. 使用 tail -f 监控日志,或用 squeue -u $USER 观察状态。
1
2
3
4

***

你可以直接把上面的代码块复制到你 Hugo 博客的 `.md` 文件中。需要我帮你排查或者写一份针对多模态网络专属的 `sbatch` 启动脚本吗?
使用 Hugo 构建
主题 StackJimmy 设计