经验怪谈

故障复盘

RTX 5090 工作站:从 CUDA 到本机出图

2026-09-08

现象
驱动能看见 RTX 5090,旧 PyTorch / 整合包没有 sm_120,软件起不来或只能走 CPU。现场需要本机生成、训练、管模型都能用上这张卡。
环境
Windows 11 工作站 · NVIDIA RTX 5090 32GB · CUDA 12.8 Toolkit
排查
先用 nvidia-smi 确认驱动认卡,再在独立 Python 环境里检查 PyTorch 的 CUDA 架构列表。驱动里能读到设备名,不等于当前轮子带了 Blackwell 的 sm_120。
原因
RTX 5090 是 Blackwell,计算能力 12.0(sm_120)。旧 PyTorch / 整合包只编到更早架构,所以能看见卡却跑不了 GPU 算子。系统 nvcc、驱动申报的最高 CUDA、pip 包里的 cu128 / cu130 runtime 是三回事,混装会互相覆盖。
解决
用独立 cu128 环境先证明这张卡能算;ComfyUI、Forge Neo、kohya_ss 分环境安装,不要塞进同一个 venv。模型只放一份公共目录。用公开 SD1.5 Checkpoint 跑一次 512×512 文生图,确认 ComfyUI 真正调到了 5090。
总结
独立 cu128 环境验证 Capability (12,0) / sm_120;三套应用分环境启动;公共模型目录下 ComfyUI 实际出图通过。

现场是一台 Windows 11 + RTX 5090 的本地生成式工作站。目标不是「装好一个出图网页」,而是驱动、CUDA、PyTorch 和三套应用都能稳定认到同一张卡,并且用公共模型目录真正跑通一次文生图。

不含主机地址、账户口令、整机品牌清单和可识别的目录树。

排查

链路可以看成:

Windows 11
  → NVIDIA 驱动
  → CUDA Toolkit / cuDNN / PyTorch
  → ComfyUI / Forge Neo / kohya_ss
  → 数据盘公共模型目录
  → 文生图 / 视频工作流 / LoRA 训练

三套软件各自带 Python / PyTorch,不要塞进同一个 venv。系统里的 nvcc、驱动申报的最高 CUDA、pip 包里的 cu128 / cu130 runtime 是三回事。

  1. nvidia-smi 能看到 5090 和显存,再装别的。
  2. CUDA Toolkit 12.8 走 NVIDIA 默认位置,不把 Toolkit 挪盘。
  3. 安装匹配的 cuDNN,读版本头文件确认。
  4. 基础 Python(现场指定过 3.10)只当工具链:Git、VC++ Runtime、7-Zip、FFmpeg、uv。
  5. Hugging Face CLI 单独建环境,缓存指到数据盘,避免把模型堆在系统盘。
  6. 再单独建一个 PyTorch CUDA 12.8 验证环境,只做认卡,不拿它跑 ComfyUI。

原因

Blackwell 需要 sm_120(Compute Capability 12.0)。那是 GPU 架构编号,不是「CUDA 12.0」。驱动里能读到设备名,不等于当前 PyTorch 轮子带了这个架构。

在验证环境里跑:

python -c "import torch; print(torch.cuda.is_available(), torch.cuda.get_device_name(0), torch.cuda.get_device_capability(0), torch.cuda.get_arch_list())"

预期:True、设备名含 RTX 5090、capability 为 (12, 0)、arch list 含 sm_120。再做一次小矩阵 GPU 运算。过了再装应用。

本次现场独立环境:PyTorch 2.11.0+cu128,CUDA runtime 12.8,GPU TEST PASS。

解决

三套应用分环境安装

软件 用途 访问 现场验证
ComfyUI Desktop 节点式文生图 / 视频工作流 本机 Desktop Python 3.13 + PyTorch cu130,认到 5090 / sm_120,实际出图
Forge Neo 表单式快速出图 本机 127.0.0.1:7860 PyTorch cu130,cuda:0,WebUI 启动
kohya_ss LoRA / DreamBooth 训练 本机 127.0.0.1:7862 Python 3.11 + PyTorch cu128,认到 sm_120,GUI 启动

ComfyUI Desktop 选本地 NVIDIA 实例,首次安装让它自己拉 Python / PyTorch,不要在安装向导里下入门大模型,模型后面统一放到公共目录。

Forge 用独立 venv,启动脚本加上公共模型引用(例如 --model-ref 指向数据盘模型根目录)。RTX 50 系上未强行开 xformers,保持当时能启动的组合。

kohya 用 uv 拉独立环境,WebUI 绑在回环地址的固定端口,不默认监听到局域网以外。

Forge Neo 本机 WebUI 已启动

Forge Neo 本机 WebUI。装完要能打开出图表单,不要求这一步就出图。

kohya_ss 训练 GUI 已启动

kohya_ss 训练界面。装完要能打开,并确认环境认到同一张 5090。

模型只放一份

ComfyUI 与 Forge 指向同一套数据盘目录,避免三份 Checkpoint:

  • Checkpoint / 基础模型
  • LoRA
  • VAE
  • 放大 / ControlNet / embedding
  • Hugging Face 缓存

ComfyUI 用 extra_model_paths.yaml 把分类目录映射过去;Forge 用启动参数引用同一根目录。缺模型时先对目录、刷新列表,不要先重装 GPU 栈。

工作流模板若绑定另一类模型(特定 UNet / 视频模型),和 SD1.5 Checkpoint 不是同一套。对不上就换匹配模型或标准 SD1.5 工作流。

出图验证

用公开的 SD1.5 Checkpoint 做一次最小闭环,证明 ComfyUI 真正调到了 RTX 5090:

本次
模型 v1-5-pruned-emaonly.safetensors
分辨率 512 × 512
Steps 20
CFG 7.0
Sampler / Scheduler euler / simple

节点:Checkpoint → 正/负 CLIP 编码 → 空 Latent → KSampler → VAE Decode → Save Image。

ComfyUI 标准工作流完成 512×512 出图

Checkpoint 加载成功,采样、解码、保存都跑完,512×512 测试图落盘。这是「卡能算」到「应用能用」的验证点。

总结

常见坑:

现象 先查
ComfyUI 提示缺模型 公共目录对应分类里有没有文件,刷新后再选
模板报缺 UNet / CLIP 模板不是 SD1.5 这条链,换匹配模型
Forge 提示没有任何模型 Checkpoint 目录是空的
7860 / 7861 同时占着 起了两份 Forge,留下固定端口那份
Hugging Face 下载超时 现场代理策略,不要改成系统全局永久代理
PowerShell 禁止 Activate.ps1 直接用该 venv 的 python.exe 绝对路径

以后升级时,不要把三套软件的 PyTorch 互相覆盖。升驱动或 CUDA 前先备份工作流和配置,再在验证环境里确认 sm_120 仍在。常用 ComfyUI 工作流存成 JSON,下次直接加载。