核心报错摘要
plaintext
[ERROR] aimdo: src/hostbuf.c:283:ERROR:hostbuf_read_file_slice: device copy failed result=2
RuntimeError: HostBuffer.read_file_slice failed
CUDA error: out of memory
Model MiniMaxH3 prepared for dynamic VRAM loading. 19995MB Staged.
- 根因:MiniMax H3 使用 AIMDO 动态 VRAM 分块加载(dynamic VRAM loading),预调度要搬运 19995MB 权重,你的显卡显存不足以支撑模型 + 采样时中间张量,发生设备拷贝 OOM;
HostBuffer.read_file_slice是 OOM 之后的次级报错,不是根源,是显存耗尽后显存拷贝 API 直接失败。 - 内存日志:GPU reserved 5984MiB,峰值 5603MiB,说明你的显卡总显存大约 6GB,而 H3 模型动态加载就预分配接近 20GB 的 staged 权重,6G 显存硬件不足以完整跑通。
注意:日志里
CUDA OOMs:0是 PyTorch 统计,OOM 发生在aimdo hostbuf 底层 CUDA 拷贝,不在 PyTorch 分配器统计内,所以计数器为 0,属于 AIMDO 后端典型现象。
完整修复方案(按优先级从上到下尝试)
1. 降低模型动态加载预算,强制更激进的 VRAM 卸载(最关键)
MiniMaxH3 的 aimdo 动态加载会预申请很大 staged 缓冲区,6G 显卡扛不住 19995MB staged。
启动 ComfyUI 时增加环境变量,修改 run_nvidia_gpu.bat,在 python 之前加入:
bat
set AIMDO_MAX_GPU_MEM=4096
set AIMDO_DISABLE_ASYNC_PREFETCH=1
set COMFYUI_VRAM_MODE=GPU_ONLY
AIMDO_MAX_GPU_MEM=4096:限制 AIMDO 最多使用 4G 显存,强制更多权重留在系统内存,减少 GPU 侧同时驻留块;
AIMDO_DISABLE_ASYNC_PREFETCH=1:关闭异步预取,避免后台偷偷往 GPU 塞权重导致瞬间爆显存,代价速度变慢。
修改后完整 bat 片段示例:
bat
@echo off
set AIMDO_MAX_GPU_MEM=4096
set AIMDO_DISABLE_ASYNC_PREFETCH=1
set COMFYUI_VRAM_MODE=GPU_ONLY
python main.py
pause
保存,完全关闭现有 ComfyUI 进程,重新双击 bat 启动。
2. ComfyUI 模型内存策略设置
WebUI 设置 → Settings → Memory
- 模型加载策略:
CPU fallback/Normal不要选Speed(更多VRAM) - 勾选:
Always offload from GPU after generating gpu vram reserve预留调大到 1024MB- 关闭:
Enable fast model prefetch(这个就是 aimdo 异步预取,和上面环境变量对应) 保存设置,重启 ComfyUI。
3. 降低生成分辨率 & batch size
你虽然模型是动态加载,但采样阶段 latent、cond、controlnet 中间张量依然吃显存。
- 分辨率:优先不要超过
1024×1024;6G 卡建议 768‑768 以内测试 - batch size=1,不要做多图 batch;关闭任何 ControlNet、IP‑Adapter 先做最小复现测试。
4. 系统层面:增大 Windows 虚拟内存
AIMDO 动态加载大量依赖系统 RAM 做权重缓冲:
- Win 设置 → 系统 → 高级系统设置 → 高级 → 性能设置 → 高级 → 虚拟内存更改
- 取消自动管理;给 SSD 盘设置自定义大小:初始 16384,最大 32768(16‑32G)
- 设置后重启电脑。
必须 SSD,机械硬盘会极慢甚至 IO 报错。
5. 排查冲突:ComfyUI‑llama‑cpp 干扰
日志末尾:
plaintext
File "ComfyUI‑llama‑cpp\nodes.py", line 296, in patched_unload_all_models
ComfyUI‑llama‑cpp打补丁劫持了模型卸载逻辑,OOM 崩溃清理阶段会二次调用 cuda 同步,加重报错。
- 临时测试:把
custom_nodes/ComfyUI‑llama‑cpp改名备份,重启 ComfyUI 跑 H3 工作流,确认是否改善。
很多 H3 + llama‑cpp 共存场景会出现卸载逻辑冲突。
6. 降级备选:关闭 AIMDO 动态 VRAM(会非常吃内存)
如果上面依旧报错,直接禁用 aimdo 动态加载,全部走 Comfy 原生 CPU‑GPU 卸载:
bat
set AIMDO_DISABLE=1
副作用:加载模型极慢,需要很大系统内存(32G+),但可以绕开 hostbuf 拷贝代码路径。
调试手段,定位问题
在 bat 增加调试环境变量,复现问题看详细 aimdo 日志:
bat
set CUDA_LAUNCH_BLOCKING=1
set AIMDO_LOG_LEVEL=debug
CUDA_LAUNCH_BLOCKING=1会把异步 CUDA 错误变成同步,报错栈会精准定位是哪一步拷贝 OOM,用于进一步排查。
硬件现实说明
MiniMax H3 完整权重动态加载 staged 就需要接近 20GB 缓冲,6GB 物理显存属于硬件下限,很难跑高分辨率,会频繁触发 hostbuf 拷贝失败 OOM。
- 稳定运行建议显卡 ≥12GB VRAM;6G 显卡只能小分辨率 + 关闭预取 + 严格限制 aimdo 显存上限使用。
排错顺序总结
- 修改 bat 加入
AIMDO_MAX_GPU_MEM=4096+AIMDO_DISABLE_ASYNC_PREFETCH=1,重启 ComfyUI - ComfyUI 设置关闭 fast model prefetch,预留 1024MB vram
- 测试小分辨率 768×768,不加载 ControlNet/IP‑Adapter
- 增大 SSD 虚拟内存 16‑32G,重启电脑
- 临时移除 ComfyUI‑llama‑cpp custom node 做排除测试
- 依旧失败:设置
AIMDO_DISABLE=1绕开 aimdo 后端