RTX 5090 的 32GB 显存可作为许多单卡论文复现、7B/8B 推理与 QLoRA、常见视觉训练的候选;全参数大模型训练、FP64 密集计算和超大样本不应只看显存下结论。
本地没有对应硬件时,也可以先租用同规格 GPU 做小规模验证。截至 2026-09-30,算家云专业版 RTX 5090 32GB 按量价格为 2.68 元/卡时;具体库存和计费信息可能变化,应以创建实例页面的实时展示为准。
- 更新日期:2026-09-30
- 资料核验:NVIDIA、PyTorch、Hugging Face 官方资料及算家云当前资源信息
一、先别问"能不能跑",先判断四件事
判断一张 RTX 5090 是否够用,至少要同时满足四个条件:
- 模型、输入、激活和临时张量能放入显存。
- 单步运行速度能在实验截止时间内完成。
- FP16、BF16、TF32 或 FP32 精度符合实验要求。
- 长任务中断后能够从 Checkpoint 恢复。
只满足第一项,只能说明"程序暂时没有 OOM",不能说明这张卡适合整个科研任务。
NVIDIA 公布的 RTX 5090 规格包括 32GB GDDR7 显存、CUDA Capability 12.0,同时不支持 NVLink。它适合单卡 CUDA 和 AI 工作负载,但不能仅凭显存容量替代专业计算卡或多卡系统。NVIDIA RTX 5090 规格
二、哪些任务一张 RTX 5090 值得优先尝试
| 科研任务 | 单卡判断 | 主要限制 |
|---|---|---|
| 图像分类、目标检测、普通二维分割 | 建议评估 | 分辨率、batch size、数据增强 |
| 3D 医学影像、体数据训练 | 必须实测 | 三维输入和中间特征会快速占满显存 |
| 7B/8B 模型 BF16/FP16 推理 | 通常值得尝试 | 长上下文、KV Cache、并发数 |
| 7B/8B 模型 QLoRA 微调 | 建议评估 | 序列长度、LoRA 配置、激活与优化器 |
| 14B 模型 QLoRA | 必须实测 | 长序列或较大 batch 容易 OOM |
| 32B 模型四位量化推理 | 有条件尝试 | 权重能装入不代表 KV Cache 和临时张量能装入 |
| 扩散模型、LoRA 训练 | 建议评估 | 分辨率、是否训练文本编码器、缓存策略 |
| 视频生成、长序列 Transformer | 谨慎评估 | 时序维度会显著增加激活显存 |
| CUDA 加速的 FP32 数值计算 | 取决于工作集 | 数据能否常驻显存、CPU/GPU 传输开销 |
| FP64 密集型仿真 | 通常不优先推荐 | 双精度吞吐和专业计算需求 |
| 7B 以上模型全参数 AdamW 微调 | 不建议按单卡规划 | 权重、梯度、优化器状态和激活远超 32GB |
| 依赖 NVLink 的多卡任务 | 不适合 | RTX 5090 官方规格不支持 NVLink |
为什么 7B 模型全参数微调也可能远超 32GB
不能只按"70 亿参数 × 2 字节≈14GB"计算训练显存。
以常规混合精度 AdamW 为例,Hugging Face 文档给出的估算包括:
- 混合精度模型权重:约 6 字节/参数
- Adam 优化器状态:约 8 字节/参数
- 梯度:约 4 字节/参数
- 另外还有激活、临时张量和框架开销
也就是约 18 字节/参数再加激活。按这种常规配置计算,7B 模型仅上述部分就接近 126GB,因此不能在 32GB 显存上进行普通全参数微调。GPU memory usage
QLoRA 能把基础模型量化到四位,并只训练适配器,所以它与全参数微调是两种完全不同的显存问题。QLoRA 论文
三、参考环境与版本记录
下面是本文建议使用的参考环境,不代表所有镜像必须完全一致。
| 项目 | 参考值 |
|---|---|
| GPU | NVIDIA GeForce RTX 5090 32GB |
| Compute Capability | 12.0 |
| 操作系统 | Ubuntu Linux |
| Python | 3.11 |
| PyTorch | 2.14.0 |
| CUDA Runtime | PyTorch 2.14 默认 CUDA 13.0 构建,或与驱动匹配的受支持版本 |
| 测量工具 | nvidia-smi、PyTorch CUDA Memory API |
PyTorch 2.14 于 2026 年 9 月发布,官方默认 CUDA wheel 为 CUDA 13.0。实际复现时不要只抄版本号,应把驱动、PyTorch 构建版本和 CUDA Runtime 一起记录。PyTorch 2.14 发布说明
先执行:
bash
nvidia-smi --query-gpu=name,memory.total,driver_version,compute_cap \
--format=csv
python - <<'PY'
import torch
print("torch_version =", torch.__version__)
print("torch_cuda =", torch.version.cuda)
print("cuda_available =", torch.cuda.is_available())
if torch.cuda.is_available():
print("gpu =", torch.cuda.get_device_name(0))
print("compute_capability =", torch.cuda.get_device_capability(0))
PY
验收结果至少应满足:
text
cuda_available = True
compute_capability = (12, 0)
如果出现 no kernel image is available for execution on the device,通常不是显存不足,而是某个 CUDA 扩展没有包含适用于 sm_120 的代码。
四、用真实任务测峰值显存
显存估算只能用于初筛,最后应使用真实数据、真实输入尺寸和真实训练参数测量。
创建 gpu_probe.py:
python
import argparse
import statistics
import subprocess
import time
parser = argparse.ArgumentParser()
parser.add_argument("--gpu", type=int, default=0)
parser.add_argument("--interval", type=float, default=0.2)
parser.add_argument("command", nargs=argparse.REMAINDER)
args = parser.parse_args()
command = args.command
if command and command[0] == "--":
command = command[1:]
if not command:
raise SystemExit(
"用法:python gpu_probe.py -- python train.py --batch_size 4"
)
query = [
"nvidia-smi",
"-i", str(args.gpu),
"--query-gpu=memory.used,memory.total,utilization.gpu",
"--format=csv,noheader,nounits",
]
def read_gpu():
output = subprocess.check_output(query, text=True).strip()
used, total, utilization = output.splitlines()[0].split(",")
return int(used.strip()), int(total.strip()), int(utilization.strip())
process = subprocess.Popen(command)
samples = []
while process.poll() is None:
try:
samples.append(read_gpu())
except (subprocess.SubprocessError, ValueError):
pass
time.sleep(args.interval)
exit_code = process.wait()
if not samples:
raise SystemExit("没有取得 GPU 监控数据,请检查 nvidia-smi。")
peak_used = max(item[0] for item in samples)
total_memory = samples[0][1]
mean_utilization = statistics.fmean(item[2] for item in samples)
print(f"exit_code={exit_code}")
print(f"peak_used_mib={peak_used}")
print(f"total_mib={total_memory}")
print(f"peak_ratio={peak_used / total_memory:.2%}")
print(f"mean_gpu_utilization={mean_utilization:.1f}%")
用它包装真实命令:
bash
python gpu_probe.py -- \
python train.py \
--batch_size 2 \
--gradient_accumulation_steps 8
正常情况下会输出:
text
exit_code=0
peak_used_mib=<实际峰值>
total_mib=<设备可见总显存>
peak_ratio=<实际比例>
mean_gpu_utilization=<采样期间平均利用率>
这里的"峰值不超过总显存 85%"是工程上的保守线,不是官方硬性标准。保留余量是为了应对验证阶段、保存权重、临时张量以及输入长度波动。
如果运行环境还包含其他 GPU 进程,nvidia-smi 的结果会把它们一起计算。此时可在 PyTorch 训练循环内部补充:
python
import torch
torch.cuda.reset_peak_memory_stats()
# 在这里运行若干个具有代表性的训练或推理步骤
torch.cuda.synchronize()
allocated = torch.cuda.max_memory_allocated() / 1024**3
reserved = torch.cuda.max_memory_reserved() / 1024**3
print(f"peak_allocated_gib={allocated:.2f}")
print(f"peak_reserved_gib={reserved:.2f}")
max_memory_allocated() 统计的是 PyTorch 张量占用,不一定包括第三方 CUDA 库直接申请的显存,因此最好同时保留两组数据。PyTorch CUDA 显存分析文档
五、什么结果才算"单卡够用"
建议至少完成下面四项验收:
| 验收项 | 建议标准 |
|---|---|
| 功能 | 真实数据能完成前向、反向和优化器更新 |
| 显存 | 代表性负载峰值不超过总显存约 85% |
| 稳定性 | 连续运行至少 50 个训练 step,不出现 OOM 或非法内存访问 |
| 时间 | 根据平均 step 时间估算,总训练时长满足实验期限 |
| 恢复 | 保存 Checkpoint 后能从下一 step 或 epoch 恢复 |
例如,单步需要 20 秒、每个 epoch 有 4000 step、计划训练 10 个 epoch,则理想情况下也需要:
text
20 × 4000 × 10 ÷ 3600 ≈ 222 小时
此时显存虽然够用,但单卡未必满足时间要求。应该考虑减少实验规模、多卡并行,或者调整研究计划,而不是只继续压缩显存。
六、CUDA OOM 的调整顺序
遇到 CUDA out of memory,建议按下面顺序调整,每次只改变一个变量:
- 降低单卡 batch size。
- 降低序列长度、图像分辨率或三维 patch 大小。
- 使用 BF16/FP16 混合精度。
- 用梯度累积恢复目标有效 batch。
- 开启 gradient checkpointing。
- 对大模型使用 LoRA、QLoRA 或量化推理。
- 再考虑 CPU offload、多卡或更大显存 GPU。
不要一开始就执行 torch.cuda.empty_cache() 并认为问题已经解决。它只能释放缓存分配器中未使用的块,不能减少仍被模型、激活或优化器引用的张量。
排查时可以打印:
python
print(torch.cuda.memory_summary())
如果 reserved 明显高于 allocated,再分析缓存和碎片;如果两者都接近总显存,通常应直接降低任务规模。
七、Blackwell 环境能识别显卡,但程序仍然报错怎么办
1. no kernel image is available
常见原因是第三方扩展只编译了旧架构。
如果该扩展支持源码重编译,可尝试:
bash
TORCH_CUDA_ARCH_LIST="12.0+PTX" \
pip install --no-cache-dir --force-reinstall .
不能源码重编译时,应升级到明确支持 Blackwell 的包或镜像,不要反复更换随机 CUDA 版本。
2. 显存够,但 GPU 利用率很低
优先检查:
- 数据是否放在慢速网络盘;
DataLoader的num_workers是否过小;- CPU 数据预处理是否成为瓶颈;
- 是否频繁在 CPU 和 GPU 间复制小张量;
- 是否每一步都同步日志或保存文件。
3. 推理能运行,训练却 OOM
推理没有梯度和优化器状态,训练还需要保存激活。两者不能使用同一套显存估算。
4. 小输入正常,真实数据 OOM
说明测试样本没有覆盖最大输入。应使用最长文本、最大图像或最大体数据重复测试,而不是使用平均样本验收。
八、长任务必须先验证 Checkpoint
建议使用临时文件写入完成后再原子替换,避免中断时留下不完整 Checkpoint:
python
import os
import torch
payload = {
"epoch": epoch,
"global_step": global_step,
"model": model.state_dict(),
"optimizer": optimizer.state_dict(),
"cpu_rng_state": torch.get_rng_state(),
"cuda_rng_state": torch.cuda.get_rng_state_all(),
}
temporary_path = "checkpoint.tmp"
final_path = "checkpoint.pt"
torch.save(payload, temporary_path)
os.replace(temporary_path, final_path)
恢复时:
python
checkpoint = torch.load("checkpoint.pt", map_location="cpu")
model.load_state_dict(checkpoint["model"])
optimizer.load_state_dict(checkpoint["optimizer"])
start_epoch = checkpoint["epoch"]
global_step = checkpoint["global_step"]
torch.set_rng_state(checkpoint["cpu_rng_state"])
torch.cuda.set_rng_state_all(checkpoint["cuda_rng_state"])
只加载可信来源的 Checkpoint。恢复验收不能只检查文件存在,还要真正启动下一步训练并确认 loss、学习率和 global step 连续。
九、哪些科研任务不应优先选择 RTX 5090
FP64 密集型数值计算
NVIDIA 的 Blackwell 架构资料显示,相关 GeForce GPU 的 FP64 吞吐相对 FP32 为 1/64。若任务依赖双精度线性代数、数值模拟或严格误差控制,应比较实际 FP64 吞吐、库支持和正确性要求,而不能仅比较显存。NVIDIA RTX Blackwell 架构资料
超过 32GB 的单进程工作集
CPU offload 可以避免直接 OOM,但会增加 PCIe 数据搬运和延迟。若大部分计算时间都在等待权重换入换出,更大显存 GPU 通常比强行 offload 更合理。
强依赖多卡互联的任务
RTX 5090 官方规格不支持 NVLink。如果实验依赖高带宽卡间通信,应先核对节点拓扑、PCIe 带宽和分布式框架,而不是默认两张消费级 GPU 能线性加速。
需要专业可靠性要求的任务
如果项目明确要求特定 ECC、认证驱动、长期支持或服务等级,应按这些条件筛选专业卡或数据中心 GPU。
十、以算家云(suanjiayun.com) 为例操作演示
对于实验室 GPU 排队、需要临时验证单卡边界的科研用户,算家云专业版 RTX 5090 32GB 可以作为 PoC 候选,¥2.68/小时/卡,性价比很高。但应先验证环境、库存和任务适配,不宜直接启动长周期正式训练。

建议流程:
- 在创建实例页确认 RTX 5090 32GB 的实时可用情况。
- 选择与项目依赖匹配的 PyTorch/CUDA 环境。
- 执行本文的驱动、PyTorch和 Compute Capability 检查。
- 上传小规模真实数据,而不是随机样本。
- 用
gpu_probe.py跑 30~60 分钟。 - 验证峰值显存、平均 step 时间和 Checkpoint 恢复。
- 验收通过后再扩大数据集或训练轮数。
需要特别注意数据生命周期:
- 按量实例关机会结束实例算力计费;
- 本地扩容数据盘关机后仍可能继续计费;
- 实例持续关机满 7 天后,系统盘和本地数据盘会被释放;
- 释放后的系统盘和本地数据盘数据不可恢复;
- 保存项目镜像不会包含本地数据盘内容;
- 长任务的代码、数据索引和 Checkpoint 应同步至项目网盘或外部仓库。
如果项目必须使用 FP64、显存需求超过 32GB、依赖 NVLink,或者需要明确的专业可靠性条件,就不应仅因为 RTX 5090 单卡价格较低而选择它。
十一、结论
RTX 5090 32GB 适合的核心场景,是能够单卡完成、主要依赖 FP16/BF16/FP32,并且工作集和激活显存可控制的科研任务。
比较稳妥的决策顺序是:
text
确认精度要求
→ 估算权重与训练状态
→ 用真实输入测峰值显存
→ 估算总训练时间
→ 验证 Checkpoint 恢复
→ 再决定单卡、量化、多卡或更大显存
不要把"模型成功加载"当成任务可完成,也不要把"32GB"当成适用于所有科研计算的通行证。
FAQ
RTX 5090 32GB 一定比 24GB 显卡多跑三分之一规模的模型吗?
不一定。模型权重可能近似线性增长,但激活、KV Cache、注意力矩阵和临时张量还受序列长度、batch size、分辨率和实现方式影响。
32GB 能直接运行 32B 大模型吗?
四位量化权重可能具备装入条件,但还要为量化元数据、KV Cache、CUDA 临时张量和框架开销留出空间。长上下文和高并发尤其需要实测。
RTX 5090 适合 7B/8B 模型 QLoRA 吗?
通常值得作为候选。建议从 batch size 1、较短序列、梯度累积和 gradient checkpointing 开始,再用峰值显存数据逐步放大。
显存没占满,为什么训练还是很慢?
瓶颈可能在 CPU 数据预处理、磁盘读取、网络存储、小算子调度或频繁同步。需要同时观察 GPU 利用率、数据加载时间和单步耗时。
什么时候适合用算家云(suanjiayun.com) 的 RTX 5090?
适合本机没有对应 GPU、实验室资源排队,且希望先验证单卡显存和训练时间的场景。若需要 FP64、超过 32GB 显存或高速多卡互联,应先评估其他 GPU 方案。