From 1805c6ce3aea08f820d3a639bb3590e9f74a78c8 Mon Sep 17 00:00:00 2001 From: yibo Date: Thu, 3 Sep 2026 17:27:48 +0800 Subject: [PATCH] HANDOFF.md: 更新为 2026-09-03 状态,记录今天 raylight/h3-console 这轮改动 --- HANDOFF.md | 73 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 68 insertions(+), 5 deletions(-) diff --git a/HANDOFF.md b/HANDOFF.md index 23e51ab..3ebadb1 100644 --- a/HANDOFF.md +++ b/HANDOFF.md @@ -1,10 +1,73 @@ -# 交接文档 · 2026-08-20(夜,最新) +# 交接文档 · 2026-09-03(最新) > 给下次进来的人(或进程)。**先读这份,再读 `CLAUDE.md`。** -> 权威细节在 `llm-setup.md`(整机)、`minimax-h3/README.md`(视频线)、 -> `h3-console/README.md`(Web 管理台)。时间线在 `CHANGELOG.md`。 -> 这里只写「现在是什么状态、下一步该干什么」——下面 2026-08-18/19 那几节是历史记录, -> 仍有效的踩坑经验保留,但**状态类的表格/结论以这一节为准,不要用旧的**。 +> 权威细节在 `llm-setup.md`(整机)、`raylight/README.md`(视频线,2026-08-22起的生产 +> 后端)、`h3-console/README.md`(Web 管理台)。时间线在 `CHANGELOG.md`。 +> 这里只写「现在是什么状态、下一步该干什么」——下面 2026-08-20 及更早的几节是历史记录, +> 架构已经变了(minimax-h3 旧代码已删除,raylight 是现在的生产后端),仍有效的踩坑经验 +> 保留,但**状态类的表格/结论以这一节为准,不要用旧的**。 + +## 2026-09-03:现在是什么状态 + +**一句话**:生产 H3 后端是 `raylight/`(ComfyUI + Raylight 插件,4卡当一个 FSDP 集群, +详见 `CLAUDE.md`「当前负载」表),`minimax-h3/` 旧架构代码已经在 8/24 删除只剩权重。 +今天这轮会话围绕 raylight + h3-console 做了一批修复/功能,**全部已部署到服务器验证通过、 +已提交推送到 git**(最新 `46fa265`),细节见 `CHANGELOG.md` 2026-09-03 那两节: + +1. 修了一个真实 bug:参考图/参考视频文件名带中文时,`raylight/server.py` 的 + `_fetch_to_input()` 用 `urllib.request.urlopen` 直接崩 `UnicodeEncodeError` + (HTTP 请求行必须纯 ASCII,中文没 percent-encode)。 +2. **排队优先级/插队**:`Job` 加 `queue_seq`,`Q` 从 `queue.Queue()` 换成 + `queue.PriorityQueue()`,新增 `POST /v1/videos/{jid}/prioritize`,console 详情页/ + 列表菜单都加了"优先插队"按钮。 +3. **重启不再清空排队任务**:这是顺带发现的架构问题——`start.sh` 重启前,排队中的任务 + 会被无条件标记 `cancelled`(内存队列重启即空,sqlite 里的记录没有任何路径被重新入队)。 + 现在重启会把排队中的任务原样保留、按序重新入队,只有"正好卡在重启瞬间"那条真运行中的 + 任务救不回来(这个改不了,GPU 执行状态确实丢了)。**这条改动很重要**:以后改 + `raylight/server.py` 要重启,不用再担心把排队任务清空了,只需要挑当前没有任务在跑 + 的时机(或者接受损失那一条正在跑的)。 +4. 补回一个 8/24 提交过、但**从未真正部署到服务器**的 ComfyUI 存活探测(`_comfyui_alive`, + 修 `/health` 在 ComfyUI 进程崩溃后仍骗人报 ready 的监控盲区)。顺带把本地长期分叉的 + `raylight/server.py`(顶层)和 `raylight/scripts/server.py` 两份文件同步一致。 +5. `h3-console` 的 `GET /v1/models` 之前硬编码 3 档过期数据(模型文件名指向已删除的 + `api.py`/`gateway.py` 旧架构),改成实时问 raylight 新增的 `GET /v1/resolutions` + (`RESOLUTION_CEILINGS` 的镜像),现在正确返回全部 8 档。 +6. 任务详情页加了两个排查用字段(默认折叠):**原始参数**(`req` 原样 JSON)、 + **ComfyUI History**(懒加载,问 raylight 新增的 `GET /v1/videos/{jid}/comfy_history`, + 透传 ComfyUI 自己的 `/history/{prompt_id}`——这份数据在 ComfyUI 内存里,进程重启就没了, + 不是 bug)。生成结果视频从页面底部挪到了状态/操作按钮那一行下面。 + +### 当前各服务实际状态(2026-09-03 晚实测,不是文档推测) + +| 服务 | 状态 | 说明 | +|---|---|---| +| `raylight`(ComfyUI 8188 + server.py 8100) | **在跑**,4卡满载 100% | 16 条排队 + 1 条运行中(正常工作负载,不是卡住) | +| `h3-console`(8080,LAN) | **在跑** | `systemctl is-active` → active,今天带新代码重启过 | +| `h3-console`(8081,公网 `/console` 子路径) | **在跑** | 同上 | +| `llm38` / `whisper` / `m3e-embedding`(docker) | **停**(`Exited`,2周前) | 不是本次操作停的,沿用既有目标状态(这台机器当前只跑 H3) | +| GPU 显存 | 4×22528MiB 卡各用 ~11.5G,100% 利用率 | raylight 一直有任务在跑,正常 | +| 磁盘 `/` | 81% used,剩 43G | 没报警但在收紧,留意 | +| 磁盘 `/data` | 89% used,剩 199G | 同上 | + +### 下一步 / 需要留意的点 + +1. **没有阻塞性待办**——这轮改动都已验证上线,git 已推送。 +2. 排队积压 16 条是正常业务量(用户在批量提交任务测试),不是系统故障,仅供下次进来的人 + 了解上下文,别误判成"卡住了"。 +3. `h3-console` 的 `/v1/models` 里 `partitions` 字段的模型文件名这次顺手改成了 raylight + 现在实际用的(`minimax_h3_fl2va_pruned_int8_convrot.safetensors` 等),去掉了对不上号 + 的 `lora` 字段——这块用户没有明确要求改,只是顺手核实清楚了,如果有外部消费者依赖旧字段 + 形状需要留意。 +4. 磁盘两边都过 80% 了,暂时没影响什么,但没有余量报警,紧张起来会跟其它任务一样直接写 + 失败——跟 `llm-setup.md` 里旧的磁盘提醒是同一类风险,值得找时间清一次。 + +--- + +# 交接文档 · 2026-08-20(历史,状态类结论已过时,见上面最新一节) + +> ⚠️ 下面这节写的时候 `minimax-h3/gateway.py` 还是生产后端,`raylight/` 还没上线。 +> 2026-08-22 起 raylight 才是生产默认后端,minimax-h3 代码已在 8/24 删除。看这节纯为 +> 保留历史踩坑记录,不要照着下面的服务状态表操作。 ## 2026-08-20 夜:现在是什么状态 -- libgit2 0.21.4