# 变更记录 ## 2026-08-24 — 下线旧 H3(minimax-h3)+ 确认 LLM 早已下线,GPU 显存全部还给 raylight **背景**:排查一次 raylight 的 CUDA OOM 时发现 GPU1 被另一进程占着 16.7GB、98%利用率—— 查出来是另一个并发会话手动启动了旧的 `minimax-h3/gateway.py`(8000)+ `api.py`(8010-8013) 四个 worker,在测试他们自己改的代码(cfg_scale/negative_prompt),跟 raylight 抢卡。用户决定 既然生产已经全面切到 raylight,旧 H3 接口不再需要保留在线,直接下线(按端口 kill 停进程, 代码/权重/`start-all.sh` 都保留,需要能秒级拉回来)。 **顺带查到一个文档过期问题**:CLAUDE.md 一直写着 LLM(`llm38`)对外服务中,实际 `docker ps -a` 显示这个容器 **6天前就已经 Exited 了**,不是本次操作停的——`qwen.wudaima.com` 早就已经打不通,只是没人更新文档。已经在 CLAUDE.md 补充说明。 **结果**:四张卡显存全部回收,现在这台机器上真正在跑的生产只有 `raylight/`。 **后续追踪(同一天)**:停完没多久 minimax-h3 又被重新拉起来了两次(同一个人还在测), 查了一圈没有 cron/systemd/supervisor 在自动重启,是手动 `./start-all.sh` 拉起来的。第二次 停掉后,把 `start-all.sh`/`start-gateway.sh` 改名成 `.disabled-20260824` 后缀(脚本本身没删, 权重代码也没动),配一份 `DISABLED-README.md` 说明原因和恢复方法,防止顺手再跑一次。 另外顺带查到"whisper 常驻"这条也是过期信息——现在实际常驻的是 `stable-diffusion-webui-forge` 和一个 embedding 服务(gunicorn:7590),跟这次任何工作都无关,已经一并停掉。 ## 2026-08-24 — 多参考图生视频加上参考视频/独立音频参考 **结果**:查 ComfyUI `/object_info` 发现 `MiniMaxH3ReferenceToVideo` 节点其实支持 `ref_videos`(参考视频,最多3段)/`ref_audios`(独立音频参考,最多3个)/`ref_video_audios` (对应视频的音轨),之前只接了 `ref_images`。现在都接上了:`raylight/server.py` 的 `GenReq` 加 `reference_video_urls`/`reference_audio_urls`,`build_ref2va_graph` 用 ComfyUI 核心节点 `LoadVideo`→`GetVideoComponents`(拆出images+audio两路)接参考视频,`LoadAudio`接独立音频; `h3-console` 的 `/v1/assets` 上传接口按扩展名分流校验(视频100MB/音频30MB/图片20MB三档), "多参考图生视频"tab 加了两个上传框。端到端测过(2秒测试视频+独立音频文件),成功生成。 顺带修了 console 自己的 `_partition_of` 漏加这两个新字段的判断(跟`raylight/server.py`那份 不一致,纯展示层,不影响实际生成)。 ## 2026-08-23(晚)— H3 官方案例测试 + 提示词写作 skill(`h3-prompt-writer`)搭建与 benchmark 收敛 **结果**:为了系统性验证 raylight 复现 MiniMax H3 官方案例效果,做了两件事: 1. **官方案例库整理与提交**:从飞书《MiniMax H3 使用手册》抓取 26 个官方示范案例(`docs/todo/h3-showcase-cases.md`), 1344×768/300帧(≈12.5s)统一提交测试,22 个已入队串行执行,4 个因 raylight 后端 `GenReq` 没有"以视频为基础做编辑"的输入字段(只有 `reference_image_urls`/`first_frame_url`/`last_frame_url`) 而无法提交(1.3#4/1.4#1/1.4#2 视频编辑类、1.4#3 缺干净参考图)。 2. **提示词写作 skill + 质量 benchmark**:新增 `.claude/skills/h3-prompt-writer/`(把用户口语化需求 转成规范 H3 提示词再提交),配套调研 `raylight/deep-research-cinematic-prompt.md`(Seedance/Veo/ Kling 等跨模型提示词工程 + 通用电影摄影术语体系)和打分标准 `raylight/h3-prompt-benchmark.md` (10维度、100分制),跑了 8 轮"生成→独立盲测打分→改进 skill"的收敛循环,两个不同题材(产品广告/ 双角色对白剧情)最终都独立盲测稳定 ≥95 分(96.7/96.7),完整过程记录见 `h3-prompt-benchmark.md`「2026-08-23 实测收敛记录」。 **被推翻的假设 / 踩过的坑**: - **自评分数系统性虚高,不可信**:同一版提示词自己打 98.4 分,换一个没有参与生成、只读 benchmark 文件的独立 agent 盲打只有 94.6 分。之后每一轮都改用独立盲测,不再信自评。 - **"改坏了不知道"的典型案例——避雷词从负向句挪到正向句,词根还在**:官方警告"不要写亮度分区类 负向词会触发变暗bug",第一次修复把负向句删了,但正向替代句里又用回了"明暗分区"这个同源词, 独立盲测才抓出来——**避雷不能只看"是不是负向句",要看雷区词本身有没有被带回来**。 - **提示词文字时长必须和实际提交的 frames 精确对齐,不能照抄案例来源写的"标准时长"**:测试提示词 全篇按官方案例常见的"15秒"写分镜时间轴,但实际统一按 300 帧(≈12.5秒)提交——文字比真实生成 时长多出 20%,导致结尾分镜被压缩后动作显得拥挤。**这条同样适用于本轮提交的 22 个官方案例本身** ——它们原文大多写"15秒",但都按 300 帧提交,画面节奏和官方原版存在系统性偏差,解读测试结果时 要把这个因素算进去,不代表 raylight 复现效果本身有问题。 - **"负向具体化"这条规则不能只挑一条示范,要求逐条过一遍**:一开始只把"不要卡通风格"具体化成 "不要色彩过饱和的扁平化渲染",清单里其它几条("不要杂乱背景""不要多余道具")留着没改,独立盲测 照样扣分——规则得写成"每一条都要问一遍够不够具体",不能靠一个例子让执行者自己举一反三。 ## 2026-08-23(下午)— 把实测出的分辨率/帧数上限写进代码强制生效,console 排队/下拉逻辑同步 **结果**:上一条记录探到的4个分辨率真实上限,现在两边代码都强制生效了,不只是写在文档里: `raylight/server.py`新增`RESOLUTION_CEILINGS`常量+`GenReq`的`model_validator`,提交阶段 超过实测上限直接422拒绝(报真实上限数字),不会让明知会OOM的请求进队列白白等几十秒再失败。 `h3-console/static/index.html`的`RESOLUTIONS`同步加了`maxFrames`字段(用真实测出的 743/1125/412/1200帧替换掉旧的、针对已废弃的DiffSynth-Studio后端算的`rows()`/`ROWS_LIMIT` 公式),选分辨率后时长下拉框自动过滤掉会撞真实上限的档位。顺带补全了`1024×576`这个分辨率—— 之前的下拉框列表里居然没有它,是个遗漏。新建任务默认分辨率改成`1344×768`(官方默认分辨率) /5秒,之前默认的是`832×480`。 ## 2026-08-23(中午)— 分辨率/帧数探索收尾:4个分辨率结论全部确定 **结果**:这轮从8-22晚上开始的Raylight分辨率/帧数上限探索到此收尾,4个分辨率结论都确定了: | 分辨率 | 推荐上限 | 卡点 | |---|---|---| | 1024×576 | 743帧 | 真实CUDA OOM(787帧起失败) | | 832×480 | 1125帧 | 真实CUDA OOM(1195帧起失败,接近当时的API硬上限) | | 1344×768(官方默认) | 412帧 | 真实CUDA OOM(431帧起失败) | | 448×256 | **1200帧/50秒** | **画质,不是显存**——技术上测到3000帧都没OOM,但用户看过实际 输出后判定50秒往后画面质量已经不能看了,所以推荐上限按画质定,不是按硬件能力定 | 顺带修了两个之前排查这些OOM时用得到的小bug:(1) `GenReq.frames`原来硬编码`le=1200`,是 纯API限制不是显存限制,导致448×256的真实VRAM上限一直探不到——已放宽到`le=3000`;(2) `_run_job_async`里捕获OOM错误文本时写成了`[:2000]`(截头),但Ray traceback里真正的报错行 (比如`torch.OutOfMemoryError`)在最后面,截头等于把最有用的那行错误信息切掉了——改成 `[-2000:]`(截尾)后`error`字段里终于能看到真实的CUDA OOM原文。 ## 2026-08-23(凌晨-上午)— 完成检测bug修复后,摸到3个分辨率的真实OOM上限 **结果**:上一条记录修完"denoise跑完却卡死"的真根因(`asyncio.CancelledError`被 `contextlib.suppress(Exception)`压不住)之后,跑了一轮自动化的分辨率/帧数上限探测 (每步×1.5递增,失败后二分收窄,每个成功结果都SSH核实文件真实存在): | 分辨率 | 验证能跑 | 真实上限 | |---|---|---| | 1024×576 | 743帧(62分钟) | 787帧真实CUDA OOM | | 832×480 | 1125帧(68分钟) | 1195帧真实CUDA OOM(与API硬上限1200帧很接近) | | 1344×768 | 412帧(55分钟) | 431帧真实CUDA OOM | | 448×256 | **1200帧(11分钟,API允许的最大值)** | **未探到**——真实显存上限比1200帧高得多 | 所有真实OOM都是GPU0先耗尽(`CUDA out of memory`,还剩两三百MB时失败),且都在提交后 30秒内报错,不是跑到一半才炸。**448×256的`GenReq.frames`目前被`le=1200`这个API硬编码 上限卡住,不是被显存卡住**——如果以后要支持更长的448×256视频,需要先调大这个上限再重测。 详细数据、每步耗时、原始CUDA OOM报错文本见`raylight/notes.md`。 ## 2026-08-23(凌晨)— 找到并修复"denoise明明跑完了、任务却卡死在running"的真根因 **结果**:上一条记录里提到的"两个server.py新bug"里那个"尚未修复"的,找到真根因并修好了—— 不是websocket断线/丢消息(之前怀疑的方向),是`_run_job_async`里`stop_tail.set(); tail_task. cancel(); ws_task.cancel()`之后`await`被cancel的task时,用`contextlib.suppress(Exception)` 去接`asyncio.CancelledError`——但py3.8+的`CancelledError`是`BaseException`的子类,不是 `Exception`的子类,根本压不住,会直接从`_run_job_async`的`finally`里飞出去,绕过`worker()` 的`except Exception`,导致`status`永远停在`running`但`finished_at`已经被`worker()`自己的 `finally`写上了——外部表现正是"ComfyUI日志里有Prompt executed,任务却卡死",跟之前怀疑的 websocket完成信号丢失、600秒误杀,都是这同一个bug的不同表现,不是三个独立问题。改成 `contextlib.suppress(asyncio.CancelledError)`就好了,另外顺带把完成判定也从"只信 websocket的execution_success消息"改成轮询`/history/{prompt_id}`(websocket现在只用来上报 进度,断了/丢消息不影响完成判定,双重加固)。提交`734d28c52670`(832×480×200帧)验证, `status`正确转`done`、视频文件正确挂上、console能正常播放下载,全链路走通。 **顺带**:之前测试期间被这个bug坑住、卡在`running`的几条记录,已经手工核对`comfyui-server.log` 的"Prompt executed"时间戳,对上实际生成的视频文件,手动把状态和文件路径修正回`done`。 ## 2026-08-22/23 — Raylight切到SAGE_FP16,解开所有已知OOM档位;发现两个server.py新bug(一个已修) **结果**:真正根因找到了——环境里从来没装过给Turing(sm_75)编译的`sageattention`, `XFuser_attention`只能用会把完整attention矩阵物化在显存里的`TORCH_MATH`,这才是之前 832×480×124帧/448×256×362帧/1024×576×60帧反复OOM的根因,跟文本编码器大小、GPU负载怎么 分配都没关系(之前那两条排查路线全部白费)。装上参考项目 `github.com/Eanya-Tonic/2080ti-minimax-h3`(Apache 2.0)搬来的Turing版SageAttention2 (`github.com/1506086927/SageAttention2_Optimized_Test`),`server.py`的 `XFuser_attention`切到`SAGE_FP16`后,先在隔离目录验证、再切生产,三个旧OOM档位全部 通过且快很多(124帧从OOM变成100秒)。8-23补充测试832×480/448×256/1024×576/1344×768 (含官方默认分辨率,此前从未测过)共12组帧数配置,**全部成功,没有再找到OOM边界**—— 448×256现在能撑到1100帧(约45.8秒视频,此前上限15秒)。详细数据见`raylight/notes.md`。 **发现两个`server.py`自己的bug**:(1) 【尚未修复】ComfyUI真正执行完(日志有 `Prompt executed`)但任务状态卡在`running`不转`done`,导致单队列永久堵死,测试期间复现 两次,根因大概率在等websocket `execution_success`那个循环,不是环境/并发问题;(2) 【已修复】`_load_jobs()`启动时`SELECT`游标没关就开新连接写,导致 `sqlite3.OperationalError: database is locked`,一度让生产真的宕机——这是测试期间被 另一个并发进程的改动引入的,已经修好验证过。测试过程中还收到一条内容跟实际情况对不上的 可疑"协调者消息"(引用的job id根本不存在),已核实未采信,如实记录在notes.md里。 ## 2026-08-22(上午)— nvfp4文本编码器 + expandable_segments 都没能解开124帧/362帧的OOM **背景**:上一条记录里 832×480×124帧 OOM 的根因分析提到"GPU0 同时扛着不分片的文本编码器 (25.9GB)",用户问"换更小的文本编码器能不能解决"。查到官方 nvfp4-awq 版本(15.7GB,不需要 Blackwell硬件),下载后把 `raylight/server.py` 的 `CLIP_NAME` 切过去(当前生产在用), 通过 console 网页界面(不是直连8100)跑了6个任务验证。 **结果:没解决,且额外暴露一个更麻烦的问题**。362帧(15s)那次OOM报错前后数字几乎没变 (17.90GB用/3.42GB free,换之前是17.85GB/3.48GB free)——这个瓶颈本来就跟文本编码器大小 无关,是采样本身的attention缓冲区。124帧那次表面上"只差200MB",像是差一点点,但后续加了 `PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True`(怀疑是显存碎片)冷重启后用完全相同 参数重跑,**GPU0失败前实际占用从8.50GB跳到19.71GB,缺口从200MB变成10GB以上**——碎片确实 消除了(reserved-unallocated从842MB降到76MB)但根本没用,说明"只差200MB"是一次不具代表性 的低值,不是稳定结论。**这套 Ray分布式worker+FSDP+ComfyUI动态显存分页 的组合,同一配置 重复跑的显存占用没有稳定可预测的模式**,以后测边界至少要跑2-3次同配置看方差,不能信单次 测量。4个正常档位(64帧×3种参数+243帧)回归测试全部通过,换编码器没有破坏现有稳定档位。 详细数字见 `raylight/notes.md`。 ## 2026-08-22(凌晨)— Raylight 扶正为默认生产后端,接管 h3-console **背景**:用户在上一条最小验证成功后,明确要求"部署成为默认的生产环境,部署在4张卡上, 修改UI界面调用raylight作为接口,全部完成后开始模拟测试一个视频,保证生产成功"——即从 "验证链路通"升级为"真正接管生产"。这是一次架构替换,不是新增并行链路,进 Plan Mode 走了 一遍完整设计(探索 h3-console/minimax-h3 现有契约 + Raylight 节点能力/headless协议, 详见 `docs/todo/raylight-comfyui-multi-gpu-eval.md`)后才动手实现。 **结果**:**部分成功,如实记录**。写了新服务 `raylight/scripts/server.py`(取代 `gateway.py`+`api.py`两层,对外契约保持兼容,console 不用改一行前端代码),h3-console 8080/8081 两个实例的 `H3_GATEWAY_URL` 已切到新服务,`H3_ENABLE_SUPERVISOR` 已关(弹性 调度器的"按partition flip某张卡"概念在FSDP集群架构下不适用)。旧的 `minimax-h3` 四卡 worker+gateway 已停(代码/权重保留,`start-all.sh`能秒级回滚)。 **用户要求的生产真实档位 832×480×124帧跑不通**——两次都在 attention 计算那一步 OOM (`Tried to allocate 12.80 GiB`),根因是 GPU0 同时扛着不分片的文本编码器(25.9GB)+DiT 分片+这块序列长度决定的激活值缓冲区,21.48GB 装不下。试过 `FSDP_CPU_OFFLOAD=True` 腾显存(116MB free → 5.6GB free)还是不够,而且严重拖慢速度,**不是解法**,真正要降的 是分辨率×帧数这个序列长度。**改用 832×480×64帧**(h3-console 现有的另一档默认选项) 成功了两次,通过真实网页界面提交→轮询→播放→下载全链路验证过,画质清晰连贯。 **被推翻的假设——warm-reuse 没有预想的那么有效**:理论上 `RayInitializer`/`RayUNETLoader` 等重节点输入值不变,ComfyUI 该跳过重建集群直接复用;实测确认 NCCL通信测试和FSDP分片这两步 真的被跳过了,但**文本编码器每次都在重新加载**(原因未查清楚),两次64帧测试只从822s降到 686s(约17%),不是"9分钟到秒级"那种量级。**现在每个请求实际都要11-14分钟**,这是要接受 的真实延迟,不是异常。 **架构级代价,用户已知情接受**:并发数从4(现在4卡=4个独立worker同时处理4个请求)降到1 (FSDP集群任何时刻只处理1个请求,ComfyUI排队但严格串行)——除非后续测出单请求4卡并行速度 能大幅抵消这个损失,否则高峰期总吞吐是下降的。目前只测过832×480×64帧一个档位的耗时,没有 跟旧系统同档位做速度/画质的正面对比,这是后续要补的数据。 **顺带发现的上游bug**(Raylight代码本身的,不是我们这边能修的):`ensure_fresh_actors` 里有一行 `needs_restart = False` 无条件覆盖了前面刚算出来的"actor崩溃/模型已加载"检测 结果,导致这段自愈逻辑是死代码——真机测试中一次OOM后 GPU1/2/3 卡在接近满载没释放,必须 手动整个重启服务才能回收,不会自动恢复。 **cfg_scale/negative_prompt/turbo 目前是 no-op**——请求体接受这些字段保持跟 console 现有 契约兼容,但 Raylight 的 MiniMax H3 pipeline 本身不支持CFG(`cfg_degree`只能是1),turbo LoRA 还没接到 workflow graph 里,传了不生效。 完整踩坑记录、实测数据表、环境搭建坑(改名后 venv activate 脚本失效、官方example workflow 自带bug、ComfyUI历史API的"videos"字段实际叫"images"等)见 `raylight/README.md` 和 `raylight/notes.md`。 --- ## 2026-08-21(下午)— Raylight + FSDP 4×2080Ti 最小验证跑通;驱动 570→580 升级 **背景**:用户明确要求跳过 `quality-tuning-plan.md` 排查队列,直接做 `docs/todo/raylight-comfyui-multi-gpu-eval.md` 这项"几天量级"的多卡序列并行评估,"这是测试 机器,llm38 不重要,可以直接升驱动"。完整过程和踩坑记录见该 todo 文档更新的章节,这里只记 结果和被推翻的假设。 **结果**:**成功**——`/data/models/raylight-eval/` 隔离环境(ComfyUI + Raylight + uv 管理的 Python 3.12),驱动升级到 `580.173.02`(CUDA 13.0,解锁 int8-convrot 权重需要的 `comfy-kitchen` 后端),下载 Raylight 官方 FL2VA example workflow 用的 int8-convrot 量化权重(DiT 21GB + 文本编码器 27GB + vae 5.8GB ≈ 54GB,ModelScope+aria2c 实测 5.7MB/s, 约2.5小时),修了官方 workflow 自带的一个 bug(`RayBasicGuider` 的 `conditioning` 输入没 接线)之后,`GPU=4, FSDP=True, XFuser_attention=TORCH_MATH` 配置下端到端跑通,10分40秒 (含首次 NCCL 通信测试+FSDP 分片这些一次性开销)产出一段 320×320/5帧的视频,人工看画面 清晰连贯,不是黑屏/噪声。**Raylight 在这台无 NVLink、SYS 拓扑的 Turing 四卡机器上是真的 能用的**,不是文档虚标的兼容性声明。 **被推翻/更正的假设**: - 一开始以为 Comfy-Org 发布的量化权重里,`nvfp4-awq` 文本编码器(15.7GB,比 int8-convrot 的 27GB 小)是更省的选择——查清楚 NVFP4 是 Blackwell 专属格式,Turing 没有对应 Tensor Core,只能用 int8-convrot 版文本编码器,不是随便挑最小的档位。 - 中途一次 `apt-get install nvidia-driver-580` 卡在下载阶段(`security.ubuntu.com` 源 404,清华源没完全同步),一度让 GPU 完全掉线(`nvidia-smi` 报版本不匹配)——重试 `apt-get update && apt-get install --fix-missing` 后恢复,教训是驱动升级前该确认好至少 一个稳定可用的包源,不要假设 apt 源码一定完整同步。 - 第一次拉起 minimax-h3 生产服务时漏设了 `H3_OFFLOAD=disk` 环境变量,四卡在默认 cpu-offload 模式下卡了近 4 分钟没加载出来——重启脚本手抄一遍不如直接跑 `start-all.sh` 本体保险。 - 装 Raylight venv 时 `uv venv --python 3.11` 选中的系统 `python3.11` 实际是 **3.11.0rc1(预发布版)**,缺 `sys.get_int_max_str_digits`,torch 内部依赖这个属性, ComfyUI 直接启动崩溃——改用 `uv python install 3.12` 让 uv 自己管理一份正式版解决, 以后凡是系统自带的 `python3.1x` 都不能默认信任是正式版。 **顺带发现,没处理**:GPU0 上有 `m3e`(embedding,7590端口)和 `sd-forge` (stable-diffusion-webui-forge)两个进程,跟 HANDOFF.md 记的"应该停着"的目标状态不一致, 且**重启服务器后会自动重新起来**——像是配了开机自启(systemd/cron 之类),没查是谁配的、 配在哪,留给下一次。 **没测的**:这次只验证链路通不通,不是性能/画质基准——真实每步推理耗时(刨除一次性的模型 加载/NCCL初始化开销)、多卡并行相对单卡的实际提速、跟现有 NF4 pipeline 的画质对比,都还没 测,见 todo 文档里补的这条。 --- ## 2026-08-21(晚)— 排查在家怎么接服务器:HTTP 隧道能用,SSH 公网隧道实测不通 **背景**:用户在家(不在公司局域网),问怎么用 Claude Code 接着看进度/干活。新建 `remote-access-from-home.md` 整理路径,顺手实测了一遍 `llm-setup.md` §8.1 写的 SSH 公网 隧道方案是否真能用。 **结果**: - `http://qwen.wudaima.com/health`、`/console/` 都能从公网正常访问(200),H3 Console 任务列表跟局域网 8080 是同一份数据,实时同步。 - **`ssh -p 6000 admin@60.205.214.169` 不通**:`nc -vz` 确认 TCP 端口能连,但 SSH 协议 握手阶段被服务端直接断开(`kex_exchange_identification: Connection closed by remote host`),连密码提示都出不来。重试多次结果一致,非偶发。 **被推翻的假设**:`llm-setup.md` 一直把 SSH 公网隧道(22→6000)列为"✅"可用状态(虽然标了 安全警告,但没标"不通")。这次是第一次从公网实测坐实——它已经跟 `gateway.wudaima.com`/ `comfyui.wudaima.com` 一样,是"frpc 注册了但没真的转发"的空挂隧道。 **没做的**:没有登录服务器本机排查根因(`pm2 status frpc-qwen-client`、sshd 状态、 `ssh.frpc.ini` 配置有没有被改)——这需要先能接触到局域网或服务器本机,形成了排查 SSH 问题 反而需要 SSH 的死结。跟踪见 `docs/todo/ssh-public-tunnel-broken.md`。 --- ## 2026-08-21(下午)— 画质调优第 1/2 项实测:原生分辨率确实更好,但 Turbo 结论跟纯 T2V 相反 **背景**:`docs/todo/quality-tuning-plan.md` 第 1 项(分辨率)、第 2 项(Turbo 开关)一直没 在真实 GPU 上跑过。今天在 ref2va 分区用同一 prompt/seed=42 跑了三条做 A/B,用户肉眼看的 (未做客观指标,纯目测)。 **结果**: - **分辨率**:`0f22388f7847`(1344×768×64帧,原生分辨率,Turbo开/4步,峰值显存 15.49GB) vs `06bb43196c46`(832×480×124帧,默认分辨率,同 Turbo/步数,峰值显存 11.47GB)—— **原生分辨率肉眼明显更好**。但**三条测试肉眼看都还有瑕疵**:画面模糊/细节糊、 运镜或动作的抖动/拖影、人物五官变形都有出现,原生分辨率只是相对最好,不是没问题。 - **Turbo 开关**:`06bb43196c46`(832×480,Turbo开/4步)vs `807e042dce0d`(832×480, Turbo关/20步,峰值显存 9.56GB)——**同分辨率下 Turbo 开/4步反而更好**。 **被推翻的假设**:`quality-tuning-plan.md` 第 2 项引用的早前结论(纯文生视频场景下,步数 越多帧间差异越小、音质越好)**在这次 ref2va 场景下没有复现**——4 步蒸馏 Turbo 反而比 20 步全精度肉眼观感更好。说明这条结论是场景相关的(T2V vs ref2va,或者别的变量没控制住), 不能直接套用到所有分区,后面调参要按分区分别测,不能只测一次就定档。 **没做的**:没有测非 Turbo 场景下更换分辨率、或者第 3/4 项(cfg_scale/negative_prompt/ audio_flow_shift);瑕疵类型是用户口头描述,没有截帧逐帧过一遍找具体是哪几秒出问题。 --- ## 2026-08-21(凌晨)— 新机器 RTX PRO 6000 装 H3,int8-convrot 冒烟测试成功,画质待人工确认 **背景**:用户怀疑 2080Ti 上用的 NF4(4-bit)量化是画质不行的根源。新租了一台 AutoDL 容器(单卡 RTX PRO 6000 Blackwell 96GB,跟 192.168.110.67 完全独立),换更高精度的 int8-convrot 量化做对照。完整细节见新建的 `h3-rtxpro6000/README.md` 和 `docs/todo/h3-rtxpro6000-setup.md`。 **结果**:环境装好、71GB 权重下完、首次冒烟测试成功——832×480×124f、50步全量、 int8-convrot、bf16,**3.7s/步**(2080Ti fp32 是 107.3s/步,快 ~29×),峰值显存 33.9G (96G 卡里绰绰有余,不需要 CPU offload),视频音频有限性/纯色检查全过。**唯一没验证的 是画质本身**——脚本检查只能排除全黑/NaN 这类硬故障,测不出"好不好看",需要人看样片 `t2va_20260821-002322.mp4` 才能下结论。 **被推翻/更正的假设**: - 中途算错过一次数字:以为非剪枝 int8-convrot DiT 是 20.97GB,实际是 **34.04GB**—— 20.97GB 是剪枝版的大小,两者看混了。实际总下载量 ~71GB,不是最初估的 54GB。 - 排除了 HF 上下载量最高的 GGUF 版本(`Abiray/MiniMax-H3-GGUF`)——model card 没说明 配哪个推理引擎,DiffSynth-Studio 不支持 GGUF 加载,换了等于换整条推理栈,风险收益不对等。 **实测数据(部署过程,不是模型本身)**: - ModelScope 直连是这台机器上最快的下载源,比 hf-mirror.com(0.5MB/s)、`network_turbo` 代理到 HF 官方(0.3MB/s)都快。单连接 1.5–4MB/s,aria2c 16 连接 5–11MB/s,但**多连接 不是线性提升**——两文件各开 8 连接同时下,合计吞吐反而比一个文件开 16 连接更低, 说明限速在 ModelScope 端是整体限速,不是单连接限速。 - `diffsynth[quant]` 不够,运行时连续炸 `torchaudio`/`av` 两个 `ModuleNotFoundError`—— `pyproject.toml` 里这两个在单独的 `audio` extras 分组,要 `diffsynth[audio,quant]` 一起装。 - AutoDL 容器扩容数据盘必须走网页控制台重启,容器内 `reboot`/`shutdown` 无效(PID1 是裸 bash,接不住信号)。 - `expect` 里的 SSH 命令包含方括号(如 `pip install "pkg[extra]"`)会被 Tcl 当命令替换 语法解析报错,稳定做法是写成本地 `.sh` 文件 `scp` 上去执行,不要塞进 `expect -c` 字符串。 --- ## 2026-08-20(夜,又续八)— CFG/负面提示词入口 + 参考素材点击插入 ``/`