Commit ccf5db19a73328e1391a3b2a20e429bb97fcebfd

Authored by yibo
1 parent 47cf8fbd

raylight: 记录"1344×768撑412帧不OOM"结论只对0参考图成立

排查用户重跑的ref2va任务(1344×768×362帧×3参考图)时发现同一配置当天5次提交4次失败,
查到已有的分辨率/帧数安全上限sweep表全部是0参考图(partition:text)测出来的,从没验证过
带参考图时是否成立。这次任务的真实失败根因是FSDP初始化阶段GPU2/GPU3 OOM(不是一直以来
"GPU0先炸"的老结论),证实带参考图的conditioning张量广播到每个FSDP rank后显存开销明显
更高。写进 raylight/README.md 已知限制第1条、raylight/notes.md、CHANGELOG.md。

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
CHANGELOG.md
1 1 # 变更记录
2 2  
  3 +## 2026-08-24(晚,续2)— 【发现】"1344×768撑412帧不OOM"结论只对0参考图成立,带参考图会OOM
  4 +
  5 +**背景**:用户重启了一个卡住/报错的任务(`task.html/b659b60c6cbc`,1344×768×362帧、ref2va
  6 +3张参考图),让盯着看会不会再报错。查`console.sqlite3`任务历史发现同一个精确配置当天5次
  7 +提交4次失败(1次成功是`d71c09a38248`),远不是稳定档位。
  8 +
  9 +**结果**:确认根因是显存不够,但不是老结论"GPU0先炸"那种模式——这次是FSDP/USP初始化阶段
  10 +`rank2`/`rank3`(物理GPU2/GPU3)先报`CUDACachingAllocator`OOM(只剩8-10MB free时还要申请
  11 +20MB),Ray actor被SIGTERM杀死,任务标记`failed`。`raylight/README.md`已知限制第1条那份
  12 +"1344×768能撑412帧"的sweep表,提交时用的是`partition: text`(0张参考图)——**从没验证过
  13 +带参考图时是否成立,这次实测证明不成立**:参考图的conditioning张量会广播到每张FSDP rank,
  14 +显存开销明显更高,且压力点可能落在GPU0以外的卡。已把这条补充记录写进`raylight/README.md`
  15 +已知限制第1条和`raylight/notes.md`。
  16 +
  17 +**被推翻的假设**:不能把"文生视频(0参考图)测出的分辨率/帧数安全上限"直接套用到带参考图
  18 +的ref2va/fl2va请求上,两者显存开销结构不一样。目前没有专门针对参考图数量×帧数做过sweep,
  19 +这是文档空白,以后要单独测。**当前建议**:1344×768 + 3张参考图时,362帧不安全,想稳定跑
  20 +建议降到200-250帧或减少参考图数量。
  21 +
3 22 ## 2026-08-24(晚,续)— 更正:不是"另一个并发会话",真凶是 PM2 自动重启 + 找到彻底止血办法
4 23  
5 24 **更正上面那条记录里"另一个并发会话手动启动/又手动拉起来"的归因是错的**——用户明确说这台机器
... ...
raylight/README.md
... ... @@ -64,6 +64,13 @@ ssh admin@192.168.110.67 &#39;cd /data/models/minimax-h3 &amp;&amp; export H3_OFFLOAD=disk &amp;
64 64 | 1024×576 | 743帧(约62分钟) | 787帧真实CUDA OOM |
65 65 | 1344×768(官方默认分辨率) | 412帧(约55分钟) | 431帧真实CUDA OOM |
66 66  
  67 + ⚠️ **【2026-08-24补充,重要】上面这张表全部是0张参考图(`partition: text`)测出来的,
  68 + 带参考图(ref2va/fl2va)不能直接套用**——参考图的conditioning张量会广播到每个FSDP
  69 + rank,显存开销明显更高。实测"1344×768×362帧×3参考图"这个精确配置当天5次尝试4次失败
  70 + (1次OOM在GPU0,1次OOM在FSDP初始化阶段的GPU2/GPU3,不再是"只有GPU0会先炸"),完整
  71 + 证据见`notes.md`「2026-08-24(晚)」一节。**带参考图时别直接信这张表的帧数上限**,
  72 + 目前没有专门测过参考图数量×帧数的边界,这是个空白。
  73 +
67 74 所有真实OOM都是GPU0先炸(跟之前"GPU0同时扛文本编码器+DiT分片"的结论一致),且都在提交后
68 75 30秒内报错(采样刚开始分配显存就失败,不会跑到一半才炸)。每个`done`结果都额外SSH核实过
69 76 视频文件真实存在、大小合理,不是只信API的`status`字段。
... ...
raylight/notes.md
1 1 # 踩坑记录 / 被推翻的假设
2 2  
  3 +## 2026-08-24(晚)— 【被推翻】"1344×768 撑到412帧不OOM"这份结论不适用于带参考图的请求
  4 +
  5 +### 背景
  6 +
  7 +`README.md`已知限制第1条、本文件下方"2026-08-23(凌晨)"那份sweep表里"1344×768 412帧done/
  8 +431帧OOM"的结论,提交时用的是`partition: text`(纯文生视频,**0张参考图**,跟
  9 +`task.html/29a99dc412b2`同款prompt,`reference_image_urls`为空)。这份表被当成"1344×768
  10 +撑到412帧都安全"的通用结论在用,但**从没验证过带参考图(ref2va)时是否成立**。
  11 +
  12 +### 实测:同一个"1344×768×362帧×3参考图"配置,今天5次尝试4次失败
  13 +
  14 +查`console.sqlite3`的`jobs`表按时间排:
  15 +
  16 +| job id | 提交时间 | 结果 | 报错 |
  17 +|---|---|---|---|
  18 +| `d71c09a38248` | 16:12 | **成功** | — |
  19 +| `c53f8d3ad7e2` | 18:57 | **OOM** | `CUDA out of memory`,GPU0 21.48GB只剩几MB free |
  20 +| `1a764bc79895` | 19:17 | **OOM** | `Tried to allocate 148.00 MiB. GPU 0 ... 14.25 MiB is free` |
  21 +| `642b82111d28` | 19:24 | **失败** | `ncclUnhandledCudaError`(这次是重启服务时把它硬杀掉导致的次生错误,不算独立样本) |
  22 +| `b659b60c6cbc` | 19:38(服务`bash start.sh`重启后,干净状态重新提交) | **失败** | 见下,FSDP初始化阶段OOM,非GPU0 |
  23 +
  24 +同一个精确配置,5次里1次成功4次失败(其中3次是独立的、非连锁的失败)——不是稳定档位,是在
  25 +显存边界反复横跳,成功靠运气。
  26 +
  27 +### `b659b60c6cbc`失败的完整根因(从`comfyui-server.log`拿到真实traceback,不是靠DB里
  28 +### 被截断的错误字段——那个字段这次存的是一坨裸tensor dump,看不出真实原因)
  29 +
  30 +失败发生在**FSDP/USP初始化阶段**("Model Initializing"进度条,不是采样阶段),而且这次是
  31 +**rank2/rank3(物理GPU2/GPU3)先炸,不是一直以来"GPU0最先顶到天花板"的老结论**:
  32 +
  33 +```
  34 +[rank2]:[W824 19:41:48...] CUDACachingAllocator.cpp:508] expandable_segments: memory mapping
  35 +failed with OOM on device 0 while trying to map 20971520 bytes (free: 10813440, total: 23068868608).
  36 +[rank3]:[W824 19:41:48...] 同上,free: 8716288
  37 +```
  38 +
  39 +只想再扩20MB显存池,但两张卡分别只剩~10MB/~8.7MB free。卡在初始化15%两分多钟后,
  40 +`RayWorker:2`被SIGTERM杀掉退出,Ray判定actor已死(`ActorDiedError`),任务整体标记`failed`。
  41 +
  42 +### 结论
  43 +
  44 +带参考图(ref2va/fl2va)时,参考图的conditioning张量会广播/复制到每个FSDP rank,显存开销
  45 +比纯文生视频高一截,且压力点可能落在GPU0以外的卡(这次是GPU2/GPU3)。**"1344×768能撑412帧"
  46 +这条结论只对0参考图成立,不能套用到带参考图的请求上**——目前没有专门针对ref2va做过参考图
  47 +数量×帧数的sweep,这是个空白,以后要单独测。**当前建议**:1344×768 + 3张参考图时,362帧
  48 +不是安全档位,想稳定跑建议降帧数(如200-250帧)或减参考图数量。
  49 +
3 50 ## 2026-08-22/23:切换到 SAGE_FP16,彻底解开旧的OOM边界;三个新bug(两个查清一个修复)
4 51  
5 52 ### 根因:不是显存不够,是环境里从来没装过Turing版SageAttention
... ...