DCU技术达人
新人贴
海光 DCU K100-AI 单卡部署 ComfyUI Wan2.2 INT8跑通图生视频
2026-07-13 15:51:53
174
## 一、项目概述 本次测试目标是在海光 DCU K100-AI 单卡环境下,使用 ComfyUI 跑通 Wan2.2 图生视频工作流,并验证 INT8 权重加载、LightX2V LoRA 加速、以及第二轮热启动后的生成耗时。 **单卡 797 秒**流程,对应日志中的结果为: ``` Prompt executed in 00:13:17 ``` 也就是约797秒 这条路线是: ``` ComfyUI 原生 Wan 节点 + wan_offline_int8_loader + Wan2.2 INT8 high/low noise 权重 + LightX2V 4-step LoRA + 单卡 K100-AI ``` ## 二、测试环境 ### 2.1 机器与容器 | 项目 | 配置 | | ------------ | ------------------------------ | | 节点 | `192.168.217.66` | | 容器 ID | `9b4637fb8077` | | 加速卡 | 海光 DCU K100-AI | | 测试卡数 | 单卡 | | 使用设备 | `cuda:0 K100_AI : native` | | 显存 | `65520 MB` | | 主机内存 | `193093 MB` | | PyTorch | `2.9.0` | | ROCm | `(6, 3)` | | ComfyUI | `0.3.56` | | ComfyUI 路径 | `/root/ComfyUI_DEMO/ComfyUI` | | 数据路径 | `/data` | | 日志路径 | `/data/profiles` | 日志中确认的信息: ``` Total VRAM 65520 MB, total RAM 193093 MB pytorch version: 2.9.0 AMD arch: gfx928:sramecc+:xnack- ROCm version: (6, 3) Device: cuda:0 K100_AI : native ComfyUI version: 0.3.56 ``` ## 三、使用的工作流 本次 797 秒对应的 UI 工作流是: ``` /data/图生视频(video_wan2_2_14B_i2v)_modi_int8_optim.json ``` 实际 API prompt 记录文件是: ``` /data/profiles/wan22_int8_optim_r2_prompt.json ``` 对应运行日志: ``` /data/profiles/comfy_8189_int8_optim_timing.log ``` 对应运行记录: ``` /data/profiles/wan22_int8_optim_r2_run.json ``` ## 四、模型文件准备 ### 4.1 INT8 high / low noise 权重 本次使用两份 Wan2.2 INT8 权重: ``` wan2.2_i2v_high_noise_14B_int8_lightx2v.safetensors wan2.2_i2v_low_noise_14B_int8_lightx2v.safetensors ``` 容器中的路径为: ``` /root/ComfyUI_DEMO/ComfyUI/models/diffusion_models/wan2.2_i2v_high_noise_14B_int8_lightx2v.safetensors /root/ComfyUI_DEMO/ComfyUI/models/diffusion_models/wan2.2_i2v_low_noise_14B_int8_lightx2v.safetensors ``` 这两个文件实际是 `/data` 下权重的软链接: ``` /root/ComfyUI_DEMO/ComfyUI/models/diffusion_models/wan2.2_i2v_high_noise_14B_int8_lightx2v.safetensors -> /data/wan2.2_i2v_high_noise_14B_int8_lightx2v.safetensors /root/ComfyUI_DEMO/ComfyUI/models/diffusion_models/wan2.2_i2v_low_noise_14B_int8_lightx2v.safetensors -> /data/wan2.2_i2v_low_noise_14B_int8_lightx2v.safetensors ``` 如果需要重新创建软链接,可以执行: ``` ln -sf /data/wan2.2_i2v_high_noise_14B_int8_lightx2v.safetensors \ /root/ComfyUI_DEMO/ComfyUI/models/diffusion_models/wan2.2_i2v_high_noise_14B_int8_lightx2v.safetensors ln -sf /data/wan2.2_i2v_low_noise_14B_int8_lightx2v.safetensors \ /root/ComfyUI_DEMO/ComfyUI/models/diffusion_models/wan2.2_i2v_low_noise_14B_int8_lightx2v.safetensors ``` ### 4.2 LightX2V 4-step LoRA 本次工作流还使用了 high / low noise 两个 LoRA: ``` /root/ComfyUI_DEMO/ComfyUI/models/loras/wan2.2_i2v_lightx2v_4steps_lora_v1_high_noise.safetensors /root/ComfyUI_DEMO/ComfyUI/models/loras/wan2.2_i2v_lightx2v_4steps_lora_v1_low_noise.safetensors ``` 工作流中 LoRA 强度为: ``` strength_model = 1.0 ``` ### 4.3 VAE 使用 VAE: ``` wan_2.1_vae.safetensors ``` 节点配置: ``` "vae_name": "wan_2.1_vae.safetensors" ``` ### 4.4 文本编码器 使用文本编码器: ``` umt5_xxl_fp8_e4m3fn_scaled.safetensors ``` 节点配置: ``` "clip_name": "umt5_xxl_fp8_e4m3fn_scaled.safetensors", "type": "wan", "device": "default" ``` ## 五、INT8 Loader 安装 这条路线依赖: ``` wan_offline_int8_loader ``` 自定义节点安装位置: ``` /root/ComfyUI_DEMO/ComfyUI/custom_nodes/wan_offline_int8_loader ``` 启动日志里可以看到: ``` Wan offline INT8 loader custom node installed. ``` 在运行时,loader 成功替换了 Wan 模型里的 Linear 层: ``` Wan offline INT8 loader: replaced 400 Linear layers. ``` 这是这条单卡 INT8 路线的关键点。 ## 六、启动 ComfyUI 服务 进入容器后,建议先加载环境: ``` source /opt/dtk/env.sh ``` 如果只跑单卡,可以指定: ``` export HIP_VISIBLE_DEVICES=0 ``` 然后启动 ComfyUI: ``` cd /root/ComfyUI_DEMO python ComfyUI/main.py \ --disable-cuda-malloc \ --use-pytorch-cross-attention \ --port 8189 \ --listen 0.0.0.0 \ > /data/profiles/comfy_8189_int8_optim_timing.log 2>&1 ``` 如果要后台启动: ``` cd /root/ComfyUI_DEMO nohup python ComfyUI/main.py \ --disable-cuda-malloc \ --use-pytorch-cross-attention \ --port 8189 \ --listen 0.0.0.0 \ > /data/profiles/comfy_8189_int8_optim_timing.log 2>&1 & ``` 服务启动后检查: ``` curl http://127.0.0.1:8189/system_stats ``` 浏览器访问: ``` http://服务器IP:8189 ``` ## 七、工作流关键参数 ### 7.1 基础图生视频参数 工作流中图生视频节点: ``` "width": 640, "height": 640, "batch_size": 1 ``` 帧数由表达式计算: ``` "expression": "floor (a * b + 1)" ``` 其中: ``` a = 5 b = 16 ``` 所以: ``` floor(5 * 16 + 1) = 81 帧 ``` 也就是说本次是: ``` 640 x 640 81 帧 16 FPS ``` ### 7.2 采样参数 工作流里使用两个 `KSamplerAdvanced`,分别对应 high noise 和 low noise 阶段。 总 steps: ``` 20 ``` 切分点: ``` 10 ``` 所以实际表现为两段采样: ``` high noise:0 -> 10 low noise:10 -> 20 ``` 日志中能看到两段进度条,每段都是 `10/10`。 采样器: ``` euler ``` 调度器: ``` simple ``` CFG: ``` 3.5 ``` shift: ``` 5.0 ``` seed: ``` 766384517380855 ``` ### 7.3 high noise 模型节点 ``` "unet_name": "wan2.2_i2v_high_noise_14B_int8_lightx2v.safetensors", "weight_dtype": "default" ``` 对应 LoRA: ``` "lora_name": "wan2.2_i2v_lightx2v_4steps_lora_v1_high_noise.safetensors", "strength_model": 1.0 ``` ### 7.4 low noise 模型节点 ``` "unet_name": "wan2.2_i2v_low_noise_14B_int8_lightx2v.safetensors", "weight_dtype": "default" ``` 对应 LoRA: ``` "lora_name": "wan2.2_i2v_lightx2v_4steps_lora_v1_low_noise.safetensors", "strength_model": 1.0 ``` ## 八、提交工作流 如果通过 Web UI 操作,可以在 ComfyUI 页面里导入: ``` /data/图生视频(video_wan2_2_14B_i2v)_modi_int8_optim.json ``` 然后点击运行。 如果通过 API 提交,可以使用导出的 API prompt: ``` /data/profiles/wan22_int8_optim_r2_prompt.json ``` 提交方式大致如下: ``` curl -X POST http://127.0.0.1:8189/prompt \ -H "Content-Type: application/json" \ -d @/data/profiles/wan22_int8_optim_r2_prompt.json ``` 如果需要标准 ComfyUI API 格式,可以包装成: ``` { "prompt": { "...": "这里是 workflow prompt 内容" }, "client_id": "your-client-id" } ``` ## 九、实测结果 ### 9.1 第一轮结果 第一轮日志: ``` Prompt executed in 00:14:32 ``` 也就是: ``` 872 秒 ``` 第一轮里包含较多加载和初始化开销,例如: ``` VAE load device: cuda:0, offload device: cpu, dtype: torch.bfloat16 CLIP/text encoder model load device: cuda:0, offload device: cpu, current: cpu, dtype: torch.float16 Wan offline INT8 loader: replaced 400 Linear layers. ``` 第一轮采样日志中能看到两段 10 step: ``` 100%|██████████| 10/10 [06:36<00:00, 39.67s/it] 100%|██████████| 10/10 [05:53<00:00, 35.39s/it] Prompt executed in 00:14:32 ``` ### 9.2 第二轮结果,也就是 797 秒 第二轮在不关闭服务的情况下继续提交。模型、VAE、文本编码器已经热起来,因此总耗时下降。 日志结果: ``` Prompt executed in 00:13:17 ``` 换算为: ``` 797 秒 ``` 第二轮采样日志: ``` 100%|██████████| 10/10 [05:54<00:00, 35.47s/it] 100%|██████████| 10/10 [05:53<00:00, 35.39s/it] Prompt executed in 00:13:17 ``` 可以看到第二轮两段采样都稳定在 35 秒左右一段平均 step 时间。 ### 9.3 结果汇总 | 轮次 | 状态 | 耗时 | | ------ | ---- | --------------------------- | | 第一轮 | 成功 | `00:14:32`,约 `872 秒` | | 第二轮 | 成功 | `00:13:17`,约 `797 秒` | 对应日志: ``` /data/profiles/comfy_8189_int8_optim_timing.log ``` 对应第二轮 prompt: ``` /data/profiles/wan22_int8_optim_r2_prompt.json ``` 对应第二轮 run 记录: ``` /data/profiles/wan22_int8_optim_r2_run.json ``` ## 十、关键日志说明 ### 10.1 单卡确认 日志里显示: ``` Device: cuda:0 K100_AI : native ``` 说明本次是单卡。 ### 10.2 INT8 loader 生效 日志里显示: ``` Wan offline INT8 loader custom node installed. Wan offline INT8 loader: replaced 400 Linear layers. ``` 说明 INT8 权重加载和 Linear 替换生效。 ### 10.3 注意 Flash Attention 日志 日志里有: ``` Warning: sdpa adopt the new interface of flash-attn ``` 以及: ``` Using pytorch attention ``` 说明这条路线里 attention 相关实现和当时安装的 FA 包有关,但本次 797 秒结果主要对应的是 INT8 optim 工作流本身。 ## 十一、常见问题 ### 11.1 这条路线用了几张卡? 单卡。 日志中设备是: ``` cuda:0 K100_AI ``` 如果要强制单卡,启动前设置: ``` export HIP_VISIBLE_DEVICES=0 ``` ### 11.2 为什么第二轮更快? 第一轮会加载 VAE、CLIP、模型权重,并执行 INT8 Linear 替换。第二轮复用已加载的模型与缓存,所以总耗时更低。 ### 11.3 为什么进度条是两段 10/10? Wan2.2 I2V 有 high noise 和 low noise 两个模型阶段。工作流里总 steps 是 20,切分点是 10,所以日志上表现为两段: ``` high noise: 10 steps low noise: 10 steps ``` ## 十二、结论 本次在海光 DCU K100-AI 单卡上,使用 ComfyUI 原生 Wan2.2 图生视频工作流,加载 INT8 high/low noise 权重,并通过 `wan_offline_int8_loader` 替换 400 个 Linear 层,成功完成 640x640、81 帧、20 steps 的图生视频生成。 最终单卡第二轮热启动耗时: ``` 00:13:17 ``` 整体流程稳定,适合作为单卡 INT8 路线的部署参考。
全部评论(0)
只看楼主
暂无数据
--
楼主
Level.3
0 帖子
楼主热帖
暂无数据