Intel XPU reimplementation of comfy-aimdo's DynamicVRAM feature for ComfyUI, enabling large models on limited GPU memory without CUDA dependency.
Paketprofil
README
Intel XPU 版动态模型卸载器(comfy-aimdo XPU 替代实现)
本质是通过调整模型的加载方式,提高显存利用率,降低OOM发生的几率 简单来说:OFF(全量加载)是“空间换时间”,而 ON(DynamicVRAM / dyvram)是“时间换空间”。
English | 中文
comfy-aimdo(Rattus 著,v0.2.12)是 ComfyUI 的 DynamicVRAM 功能核心依赖,提供了两项硬件级能力:
Quellen
3 QuellenVerifiziert 12. Sept.
Quellenauszüge
1 AuszugSource context: Repo allanmeng/ComfyUI-AIMDO-XPU
aimdo.dll 注入 CUDA 虚拟地址基址寄存器(VBAR)cudaHostAlloc: pinned memory 用于 GPU-CPU 高效数据传输VirtualAlloc + CreateFileMapping:将大模型 checkpoint 文件映射到虚拟地址空间,避免一次性加载到内存原版完全依赖 NVIDIA CUDA API,在 Intel XPU(Arc B 系列)上无法运行。
[!NOTE] 这是本项目的一次新尝试:以预编译 DLL 的形式提供硬件级 DynamicVRAM 后端, 与下方原有的纯 Python 劫持方案互补。目前以 Release 试点 形式发布, 欢迎试用并反馈。
方案来源
xiangyuT/comfy-aimdo-xpu
(https://github.com/xiangyuT/comfy-aimdo-xpu)的 dev/xpu-level-zero-vbar 分支构建,
该分支提供 Intel Level Zero + oneAPI SYCL 的硬件级实现;aimdo_xpu.dll,并通过 Release 发布试点,
便于 Windows 用户直接下载使用。方案原理
site-packages 中的 comfy_aimdo 包生效,而不是 PYTHONPATH 劫持。[!CAUTION] 注意事项:会修改 / 替换官方 aimdo 文件
- 本方案会覆盖(替换)
site-packages/comfy_aimdo/下的官方文件 (control.py、torch.py等 6 个 py +aimdo_xpu.dll);deploy.bat会自动备份原包为comfy_aimdo.bak,可随时回退;- 该 DLL 方案与下方的 PYTHONPATH 劫持方案互斥,二者只能启用其一。
使用该方案需要准备的环境
| # | 环境要求 | 说明 |
|---|---|---|
| 1 | Intel Arc 显卡(B580 / A770 / A750 等) | 已安装最新 Intel 显卡驱动 |
| 2 | ComfyUI-aki 整合包(Intel ARC 版) | 内置 torch 2.13.0+xpu 等 XPU 环境 |
| 3 | Intel oneAPI 2026.1 | 必须与本包编译版本一致 |
| 4 | Windows 11 / 10(64 位) |
与劫持方案对比
| 维度 | Python 劫持方案(默认) | DLL 后端方案(试点) |
|---|---|---|
| 实现方式 | 纯 Python,零编译 | 预编译 C/C++(Level Zero + SYCL) |
| VBAR 机制 | LRU 缓存 + watermark 驱逐(软件模拟) | 真实虚拟地址预留 + 缺页换入(硬件级) |
| 部署方式 | custom_nodes + PYTHONPATH 劫持 | 部署到 site-packages(替换官方包) |
| 依赖 | 无编译依赖 | 需 oneAPI 2026.1(与编译版本一致) |
| 性能取向 | 轻量、易分享 | 更贴近原版 aimdo 性能 |
如何尝试 DLL 方案
[!TIP]
- 从 GitHub Releases 下载最新发布包(
comfy_aimdo_xpu_win_v*.zip);- 解压后按包内
README-DEPLOY-CN.md/README-DEPLOY-EN.md操作即可;- ⚠️ 如果你之前使用过本插件的劫持版,请先按部署文档开头的"升级提示"清理, 否则 DLL 不会生效。
原方案以相同的 Python API 接口,在 Intel XPU 上重新实现上述能力,无需修改 ComfyUI 官方代码。
官方 comfy-aimdo 安装在 site-packages/comfy_aimdo/,本项目在 custom_nodes 目录下放置同名 comfy_aimdo/ 包,通过启动脚本将项目路径加入 PYTHONPATH 最前面,使 import comfy_aimdo 优先命中本项目,实现透明替换。
为什么不用 custom_node init.py 做劫持?
main.py第 34 行的import comfy.aimdo.control早于 custom_nodes 加载,custom_nodes 的__init__.py介入时已经太晚了。
| 原版 CUDA 机制 | XPU 替代实现 |
|---|---|
| aimdo.dll VBAR 虚拟地址缺页 | torch.xpu LRU 张量缓存(model_vbar.py) |
CUDA page fault handler | 显式 fault() 换入/换出 |
cudaHostAlloc 固定内存 | torch.empty(pin_memory=True) |
VirtualAlloc + CreateFileMapping | Python mmap 模块 |
| CUDA 设备属性查询 | torch.xpu.get_device_properties() |
ComfyUI-AIMDO-XPU/
├── comfy_aimdo/ ← 劫持包(目录名必须与官方包相同)
│ ├── __init__.py ← torch.cuda 全局 shim;加载时一次性 patch
│ ├── control.py ← init/init_device/get_total_vram_usage
│ ├── model_vbar.py ← ModelVBAR + 全部模块级函数
│ ├── torch.py ← aimdo_to_tensor / hostbuf_to_tensor
│ ├── host_buffer.py ← HostBuffer(用 torch pin_memory 代替 CUDA)
│ └── model_mmap.py ← ModelMMAP(用 Python mmap 代替 aimdo.dll)
│ ├── vram_buffer.py ← VRAMBuffer(ComfyUI 新版接口)
├── __init__.py ← custom_node 入口;含 XPUAIMDOStatus 节点(开关 + debug)
└── README.md
cd f:\ComfyUI-aki-v3\ComfyUI\custom_nodes
git clone https://github.com/allanmeng/ComfyUI-AIMDO-XPU.git
Knoten in diesem Paket
1 KnotenVerifiziert 12. Sept.