Commit e4edb075ea6311309b45878ae1fd094e653ff752

Authored by yibo
1 parent 6b3f5a6a

补 docs/todo:RTX PRO 6000 int8-convrot 调研 + Raylight/ComfyUI 多卡评估

补齐 h3-rtxpro6000-setup.md(另一线程的调研,之前只在磁盘上没提交)。
新增 raylight-comfyui-multi-gpu-eval.md:2K 分辨率外推显示 2080Ti 显存
需求随 rows 超线性增长,DiffSynth-Studio 现有架构不支持多卡拆分单次生成;
调研到 Raylight(ComfyUI 插件)支持 Turing+PCIe+MiniMax-H3 的序列并行,
但要换整套推理引擎,是独立迁移项目。建议先做 quality-tuning-plan.md
里不用下载东西的两项,排除画质问题不是量化精度导致的,再决定要不要推进。

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
docs/README.md
... ... @@ -10,6 +10,14 @@
10 10 参考视频功能(2026-08-20 本地写的,没有 GPU 没测过),明天回服务器第一件事要验证
11 11 - [quality-tuning-plan.md](todo/quality-tuning-plan.md) — 为什么生成视频画质比 ComfyUI 官方
12 12 演示差很多:分辨率/Turbo步数/CFG/negative prompt 几个待实测方向,按优先级排好了
  13 +- [h3-rtxpro6000-setup.md](todo/h3-rtxpro6000-setup.md) — 新租的 RTX PRO 6000(Blackwell
  14 + 96GB)装 H3 的调研:为什么不用 GGUF、精度选型对比(NF4/int8-convrot/fp8/bf16 实测文件大小)、
  15 + uv 环境搭建方式,还没开始下权重
  16 +- [raylight-comfyui-multi-gpu-eval.md](todo/raylight-comfyui-multi-gpu-eval.md) — 评估要不要把
  17 + 2080Ti 那套换成 ComfyUI + Raylight 做序列并行,把 4×22G 当一个显存池用来跑更高分辨率/更长
  18 + 时长——调研阶段,确认现有 DiffSynth-Studio 架构不支持多卡拆分;Raylight 确认支持 Turing+PCIe+
  19 + MiniMax-H3,但要换整套推理引擎,是独立迁移项目不是顺手能试的,建议先做完
  20 + quality-tuning-plan.md 里不用下载东西的两项再决定要不要推进
13 21  
14 22 ## done
15 23  
... ...
docs/todo/h3-rtxpro6000-setup.md 0 → 100644
  1 +# 新机器:RTX PRO 6000 装 H3(调研阶段,还没跑通)
  2 +
  3 +**背景**:新租了一台 AutoDL 容器(`connect.westd.seetacloud.com:17473`),单卡 RTX PRO 6000
  4 +Blackwell 96GB,跟 2080Ti 那套完全不共享环境。这篇记 2026-08-20 的调研结论和待办,
  5 +真正装完跑通后按顶层 `CLAUDE.md` 的目录约定建 `h3-rtxpro6000/` workload 目录 + CHANGELOG 一节。
  6 +
  7 +## 机器情况
  8 +
  9 +| 项 | 值 |
  10 +|---|---|
  11 +| GPU | RTX PRO 6000 Blackwell,96GB(`nvidia-smi` 显示 97887MiB),**compute cap 12.0(sm_120)** |
  12 +| 驱动/CUDA | 595.58.03 / CUDA 13.2 |
  13 +| CPU/内存 | 208 核 / 1TB |
  14 +| 系统盘 | 30GB,**容器重启会重置,别往这儿装东西** |
  15 +| 数据盘 | `/root/autodl-tmp`,已从免费 50GB 扩到 **100GB**(扩容需在 AutoDL 网页控制台点重启才生效,容器内 `reboot` 没用——PID1 是裸 bash 不是 init,见下) |
  16 +| 系统 | Ubuntu 22.04,容器化(`/.dockerenv` 存在),预装 miniconda3 + torch 2.12.1+cu130 |
  17 +| 网络 | ModelScope **直连**(`no_proxy` 已含 `modelscope.com`),HuggingFace/GitHub 需 `source /etc/network_turbo`(AutoDL 学术加速,仅限这两个域名+相关 CDN,见 https://www.autodl.com/docs/network_turbo/ ) |
  18 +
  19 +## 环境搭建方式(按用户要求)
  20 +
  21 +不用 conda 装依赖,改用 **uv**(比 pip 快几十倍,包解析方式不同):
  22 +
  23 +```bash
  24 +source /root/miniconda3/etc/profile.d/conda.sh && conda activate base # 只为了拿到 uv 这个二进制
  25 +pip install -q uv # /etc/pip.conf 已配好 aliyun 源
  26 +mkdir -p /root/autodl-tmp/minimax-h3 && cd /root/autodl-tmp/minimax-h3
  27 +export UV_INDEX_URL=http://mirrors.aliyun.com/pypi/simple
  28 +uv venv --python 3.12 .venv && source .venv/bin/activate
  29 +uv pip install torch # 走 aliyun 镜像,几十秒装完 2.13.0+cu130
  30 +```
  31 +
  32 +阿里云源本身就镜像了 PyPI 官方的 cu130 捆绑 wheel,不需要单独配 pytorch.org 的 index。
  33 +
  34 +## 精度选型(这是本次调研的主要产出)
  35 +
  36 +用户原话:"主要是 DiffSynth-Studio + NF4 safetensors 这个模型的质量不行,我担心是模型量化不行导致的"。
  37 +
  38 +### 排除项:不要用 GGUF(`Abiray/MiniMax-H3-GGUF` 等)
  39 +
  40 +HF 上搜到的 GGUF 版本下载量最高,但 model card **没有说明配哪个推理引擎**。H3 是 DiT 扩散模型
  41 +不是标准 LLM,GGUF 在这类模型上依赖专门的 loader(比如 ComfyUI-GGUF 自定义节点),
  42 +需要有人专门写过 H3 这个架构的支持。我们已验证能跑通的是 DiffSynth-Studio,它不支持 GGUF 加载。
  43 +换 GGUF=换整条推理栈,风险和收益不对等,放弃。
  44 +
  45 +### 各精度组合实测文件大小(HF API 直查,非猜测)
  46 +
  47 +| 组件 | NF4(2080Ti 在用) | int8-convrot(本次选定) | fp8 剪枝 | bf16 原精度 |
  48 +|---|---|---|---|---|
  49 +| DiT (FL2VA) | 16.0 GB | **20.97 GB** | 20.96 GB(剪枝版) | 66.28 GB |
  50 +| 文本编码器 (Qwen3-VL 32B) | 14.3 GB | **27.14 GB** | — | 51.51 GB |
  51 +| video_vae | 1.5 GB | 5.21 GB (fp16) | 同左 | 同左 |
  52 +| audio_vae | 0.26 GB | 0.61 GB (fp32) | 同左 | 同左 |
  53 +| **合计** | 33.3 GB | **53.93 GB** | ~47GB(DiT剪枝+bf16文本编码器需另算)| 123.6 GB |
  54 +
  55 +bf16 全精度超过 100GB 数据盘,且两个大件同时常驻显存需 117GB>96GB 显存,暂不选。
  56 +
  57 +### 关键发现:DiffSynth-Studio 官方文档明确支持 Comfy-Org 的 int8/fp8 权重
  58 +
  59 +不是只支持自家 NF4。文档原话:"The int8-quantized weights released by Comfy-Org are
  60 +supported as well, via the comfy-kitchen backend, which requires `pip install "diffsynth[quant]"`"。
  61 +官方示例代码(`examples/minimax_h3/model_inference/MiniMax-H3-Int8-ConvRot-FL2VA.py`):
  62 +
  63 +```python
  64 +vram_config = {
  65 + "offload_dtype": torch.bfloat16, "offload_device": "cpu",
  66 + "onload_dtype": torch.bfloat16, "onload_device": "cpu",
  67 + "preparing_dtype": torch.bfloat16, "preparing_device": "cuda",
  68 + "computation_dtype": torch.bfloat16, "computation_device": "cuda",
  69 +}
  70 +pipe = MiniMaxH3Pipeline.from_pretrained(
  71 + torch_dtype=torch.bfloat16, device="cuda",
  72 + model_configs=[
  73 + ModelConfig(model_id="Comfy-Org/MiniMax-H3", origin_file_pattern="diffusion_models/minimax_h3_fl2va_int8_convrot.safetensors", **vram_config),
  74 + ModelConfig(model_id="Comfy-Org/MiniMax-H3", origin_file_pattern="text_encoders/qwen3vl_32b_minimax_h3_int8_convrot.safetensors", **vram_config),
  75 + ModelConfig(model_id="MiniMax/MiniMax-H3", origin_file_pattern="FL2VA/video_vae/source/model.safetensors", **vram_config),
  76 + ModelConfig(model_id="MiniMax/MiniMax-H3", origin_file_pattern="FL2VA/audio_vae/model.safetensors", **vram_config),
  77 + ],
  78 + processor_config=ModelConfig(model_id="MiniMax/MiniMax-H3", origin_file_pattern="FL2VA/processor/"),
  79 + vram_limit=torch.cuda.mem_get_info("cuda")[1] / (1024 ** 3) - 2, # 单卡独占,直接按总显存留 2G
  80 +)
  81 +```
  82 +
  83 +`Comfy-Org/MiniMax-H3` 和 `MiniMax/MiniMax-H3` 在 ModelScope 上都有镜像(表格链接确认),
  84 +预计能直连下载,不用挂 `network_turbo`。
  85 +
  86 +**用户已选定**:DiT + 文本编码器都用 int8-convrot(~54GB),不用 fp8/bf16 混合方案。
  87 +理由:比 NF4 的 4-bit 精度高一倍,比全 bf16 省一半+盘,100GB 数据盘和 96GB 显存都留有余量。
  88 +
  89 +### 与 2080Ti 版本的关键差异(Blackwell sm_120 vs Turing sm_75)
  90 +
  91 +- **官方示例直接用 bf16**,不是 2080Ti 那套 fp32/fp16 折腾。2080Ti 的 `t2va.py` 里那堆
  92 + `_force_fp32_linear` / `_patch_dit_residual_fp32` patch 都是 Turing 无 bf16 attention kernel
  93 + 逼出来的补丁,**这张卡上不需要**,直接抄官方示例的 bf16 配置即可。
  94 +- **不需要 CPU offload**:2080Ti 4×22G 靠 `offload_device="cpu"` 来回倒腾权重;这张卡 96GB
  95 + 单卡独占,54GB 权重能常驻显存,理论上更快(具体要不要照抄官方 vram_config 里的 cpu offload
  96 + 字段留到实测时再定,反正显存够大不会是瓶颈)。
  97 +- `t2va.py` 里 `assert prop.major == 7` 这行到这张卡上会直接炸,不能照搬脚本,得照官方
  98 + int8-convrot 示例重写。
  99 +
  100 +## 相关:`quality-tuning-plan.md` 里没提过量化精度
  101 +
  102 +同目录 [quality-tuning-plan.md](quality-tuning-plan.md) 是 2080Ti 那边的画质排查清单,
  103 +列了分辨率/Turbo步数/CFG/negative prompt 四个方向,**没有把 NF4 量化本身列为嫌疑对象**。
  104 +这次新机器的 int8-convrot 选型算是补了这一项;如果换精度后画质明显变好,说明 2080Ti 那份
  105 +清单该加一条「量化精度」;如果没变化,说明那份清单列的四个方向才是真正的瓶颈,量化本身不是。
  106 +
  107 +## 还没做的事
  108 +
  109 +1. `uv pip install "diffsynth[quant]"` + clone DiffSynth-Studio 源码
  110 +2. 确认 `Comfy-Org/MiniMax-H3` / `MiniMax/MiniMax-H3` 在 ModelScope 直连能下(还没实测,只是表格链接看到有镜像)
  111 +3. 照官方 int8-convrot 示例写这张卡专用的 `t2va.py`(去掉 2080Ti 的 fp32 patch 和 sm_75 assert)
  112 +4. 下载 ~54GB 权重,实测出片,跟 2080Ti 上的验收样本对比画质
... ...
docs/todo/raylight-comfyui-multi-gpu-eval.md 0 → 100644
  1 +# 评估:把 2080Ti 那套换成 ComfyUI + Raylight,试试能不能把 4×22G 当一个显存池用
  2 +
  3 +**背景**:用户想知道 2K 分辨率能不能跑(`quality-tuning-plan.md` 排查画质差距的同时,也有人在问
  4 +分辨率能不能往上提)。按 `api.py` 现成的 `_rows()` 公式外推:2K×15s 需要的 rows 是现在安全上限
  5 +(`ROWS_LIMIT=20000`)的十几倍,且从已实测数据看显存需求在 rows 越过约 2 万这个区间之后是**加速
  6 +增长**(不是线性)——根因是 Turing 没有高效 attention kernel,PyTorch 静默退化到 MATH 后端,
  7 +把完整的 N×N 注意力矩阵摊在显存里。粗略外推:2K 分辨率下这批卡大概只能撑 1-2 秒,不是能用的档位。
  8 +详细推导见跟用户的对话记录(还没搬进 CHANGELOG,这个文件先占个位)。
  9 +
  10 +**这不是"缺显存"能一次性解决的问题**——4 张卡合计 88G,但现在的架构(DiffSynth-Studio 的
  11 +MiniMax-H3 pipeline)**不支持把一次生成拆到多张卡上算**,四卡只能是四个独立 worker 各跑各的
  12 +(`gateway.py` 做的路由/并发,不是显存池化)。查过 DiffSynth-Studio 最新文档,H3 pipeline 里
  13 +确认零序列并行/张量并行支持,这条路走不通,是架构级的,不是配置项。
  14 +
  15 +## 调研到的方案:Raylight(ComfyUI 插件)
  16 +
  17 +真正做**序列并行**(把一次生成的注意力计算拆到多卡上并行算,不是简单地把不同模块分到不同卡)。
  18 +查到的关键点,都对我们有利:
  19 +
  20 +- **官方支持列表明确写了 Turing 架构**("Volta and Turing: use latest Yunchang libs")——
  21 + 不是没测过,是真的适配过老卡这一档。
  22 +- **不需要 NVLink,走 PCIe 就行**——benchmark 里专门提过消费级卡"P2P 走 SYS 路径(无 NVLink),
  23 + 带宽降低但能用",说的就是我们这种没有 NVLink 桥的机器。
  24 +- **支持列表里明确写了 MiniMax-H3**(USP + FSDP,CFG 暂不支持)。
  25 +- 通信走 NCCL(`nvidia-nccl-cu12==2.28.9`),Ray 管 worker 进程。
  26 +
  27 +对比之下,HuggingFace `diffusers` 库那个"多GPU"文档示例是假的——只是把文本编码器和 DiT
  28 +分别扔到不同卡(组件级放置),不解决 DiT 自己在高分辨率下显存超限的问题,而且这功能现在
  29 +还有 bug(CUDA 设备不匹配没修),官方示例还是照 2×80G A100 写的,跟我们的场景不是一回事,
  30 +排除。
  31 +
  32 +## 代价:这是换引擎,不是装个包
  33 +
  34 +Raylight 是 **ComfyUI 的插件**,不是能塞进现在这套 `api.py`/`gateway.py`/`h3-console` 架构里的
  35 +东西。真要用意味着:
  36 +
  37 +1. 整套换成 ComfyUI 做推理引擎——现在这套 FastAPI 队列+轮询的服务(`api.py`/`gateway.py`/
  38 + `console`)得重新对接 ComfyUI 的 API,或者两套并存一段时间
  39 +2. 新依赖一整套:PyTorch 2.8.1、NCCL 2.28.9……版本跟现在这个 venv 里为 Turing 精调过的
  40 + torch/bitsandbytes 组合不是一回事,得单独起环境,不能直接装进现有 venv(会跟 NF4 那条线
  41 + 互相踩版本)
  42 +3. 工作流从现在的"prompt+参数"变成 ComfyUI 的节点图 workflow,console 前端这套三个 tab
  43 + 的表单得重新设计怎么对接
  44 +4. Flash Attention 2 官方标"可选但推荐"——Turing 没有 FA2 支持(这条本项目已经反复实测确认过,
  45 + 见 `README.md`/`turing-bf16-attention-dead` 记忆),Raylight 在 Turing 上到底是用 Yunchang
  46 + 的哪条 fallback 路径、还吃不吃得动 MATH 后端那套,**必须先小规模实测才能确认**,不能假设
  47 + "支持 Turing"就等于"跟现在一样快甚至更快"。
  48 +
  49 +**这是一个要投入几天的独立迁移项目,不是明天顺手能试完的东西**——跟 `quality-tuning-plan.md`
  50 +里那几项(不用下载任何文件、改几个参数就能测)完全不是一个量级。
  51 +
  52 +## 建议的顺序(不要跳过前面直接冲这个)
  53 +
  54 +1. **先做 `quality-tuning-plan.md` 里的 1、2 两项**(分辨率提到接近原生 1344×768 但控制在
  55 + `ROWS_LIMIT` 内、Turbo开关对比)——不用下载任何东西,不用改代码,最快出结果。如果画质问题
  56 + 主要是这两项导致的,可能根本不需要 Raylight 这条重路。
  57 +2. 参考 RTX PRO 6000 那边的 int8-convrot 实测结果(见 `h3-rtxpro6000-setup.md`)——如果换更高
  58 + 精度对画质有明显提升,说明量化精度也是真嫌疑,但那条路线(在 96GB 单卡上跑 int8)跟
  59 + Raylight(多卡序列并行)解决的是两个不同问题(画质 vs 能跑多大分辨率/多长时长),不要混着评估。
  60 +3. 如果 1、2 都做完发现画质本来就没问题,纯粹是想要更高分辨率/更长时长——才轮到评估 Raylight。
  61 + 第一步只做**最小验证**:单独起一个隔离环境(不动现在生产用的 venv),装 ComfyUI + Raylight,
  62 + 用一个小 workflow 跑通 MiniMax-H3 最低配置(比如 448×256×8f)确认链路通,再谈要不要真迁移。
  63 +
  64 +## 还没做的事
  65 +
  66 +1. 明天到公司先确认服务器驱动/CUDA 版本(`nvidia-smi` 看驱动号,`nvcc --version`)——Raylight
  67 + 要 NCCL 2.28.9,跟 RTX PRO 6000 那边 int8-convrot 依赖的 `comfy-kitchen`(要 CUDA Runtime
  68 + ≥13.0、驱动 ≥r580)**共享同一个风险点**,两条线都得先摸清这台机器的驱动版本能不能满足,
  69 + 不满足要么升驱动(这台机器还跑着 Qwen LLM 生产服务,升驱动有风险)要么放弃这两条路线。
  70 +2. 按上面「建议的顺序」,先把 `quality-tuning-plan.md` 的 1、2 两项测完再决定要不要往下推进。
  71 +3. 如果决定推进:找一台干净的验证环境(不要污染现在的生产 venv),装 ComfyUI + Raylight,
  72 + 跑最小 workflow 验证链路。
... ...