FramePack for ComfyUI工作流Sage-Attention优化效率测试

1,620 阅读8分钟

背景

基于FramePack在ComfyUI工作流和相关插件,进过测试发现KJ大神的默认用统一文件大模型运行Sage-Attention无效果,让我产生的浓厚的测试兴趣,于是恢复用默认大模型文件模式进行了如下测试。

wechat_2025-04-21_235703_050.png 本文讨论的视频生成工作流利用了 Hunyuan Video Transformer 模型,通过四个潜在分区(total_latent_sections: 4)处理潜在表示,生成高质量视频帧。工作流涉及多个模型,包括 AutoencoderKLCLIPVisionModelProjectionHunyuanVideoClipModel_,并使用 --normalvram 模式最大化 GPU 显存使用。

比较了两种注意力机制:

  • Sage-Attention:一种优化的注意力机制(sageattention==1.0.6),专为视频生成任务设计,通过高级内存管理和优化的矩阵运算降低计算开销。
  • SDPA:PyTorch 的默认 Scaled Dot-Product Attention 机制,在未指定特定注意力优化时使用,稳健但对大规模视频模型的优化不足。

比较在 NVIDIA RTX 5090(32GB 显存)上进行,ComfyUI 配置为高性能视频生成。结果显示出显著的性能差异,为优化 ComfyUI 工作流提供了宝贵经验。

比较目标

比较的主要目标包括:

  1. 性能:测量视频生成工作流的总执行时间和每步时间。
  2. 资源利用率:分析 GPU 利用率和显存消耗,了解效率和可扩展性。
  3. 稳定性:确保工作流无错误运行(例如 ConnectionResetError[WinError 5]),利用 flow2-wan-videoComfyUI-Manager 等自定义节点。
  4. 实用性:提供清晰的命令行指令,便于他人复现结果。

比较原因

注意力机制的选择对扩散模型视频生成的性能有重大影响,原因如下:

  • 计算复杂性:视频模型处理大型潜在张量(例如 torch.Size([1, 16, 1, 96, 64])),需要高效的注意力机制处理空间和时间依赖。
  • 内存管理:显存接近 32GB 限制时,优化的注意力机制可减少内存开销,避免内存不足错误。
  • 优化技术:Sage-Attention 使用高级技术(例如优化矩阵乘法、减少内存碎片),而 SDPA 依赖 PyTorch 默认实现,可能不适合视频任务。
  • 工作流效率:更快的执行时间可提高迭代速度,对创意和研究工作流至关重要。

命令行指令

以下是运行 ComfyUI 工作流的命令行,以及用于收集性能数据的显存监控命令。

Sage-Attention 模式

  • 命令

    python.exe -s ComfyUI\main.py --windows-standalone-build --normalvram --input-directory "E:\AI\Input" --output-directory "E:\AI\Output" --verbose DEBUG --use-sage-attention --fast
    
  • 显存监控

    nvidia-smi --query-gpu=utilization.gpu,utilization.memory,memory.total,memory.free,memory.used --format=csv -l 1 > gpu_usage_sage_workflow.csv
    
  • 说明

    • --use-sage-attention 启用 Sage-Attention 机制。

    • --fast 激活优化,如 fp16_accumulationfp8_matrix_multcublas_ops

    • 确保安装 sageattention==1.0.6

      pip install sageattention==1.0.6
      

SDPA 模式

  • 命令

    python.exe -s ComfyUI\main.py --windows-standalone-build --normalvram --input-directory "E:\AI\Input" --output-directory "E:\AI\Output" --verbose DEBUG --fast
    
  • 显存监控

    nvidia-smi --query-gpu=utilization.gpu,utilization.memory,memory.total,memory.free,memory.used --format=csv -l 1 > gpu_usage_sdpa_workflow.csv
    
  • 说明

    • 未指定 --use-sage-attention 时,默认使用 PyTorch 的 SDPA。
    • --fast 应用与 Sage-Attention 相同的优化,确保比较公平。

性能结果

工作流在相同设置(--normalvram--fast)下于 NVIDIA RTX 5090 上执行,处理视频生成任务,包含四个潜在分区(total_latent_sections: 4)。以下是各模式的性能指标。

Sage-Attention 模式

  • 总执行时间:389.16 秒(约 6.49 分钟)

  • 每步时间(每分区 30 步):

    • 分区 1(latent_padding: 3):85 秒(约 2.85 秒/步)
    • 分区 2(latent_padding: 2):83 秒(约 2.80 秒/步)
    • 分区 3(latent_padding: 1):81 秒(约 2.71 秒/步)
    • 分区 4(latent_padding: 0):80 秒(约 2.69 秒/步)
  • 稳定性:无错误报告,尽管显存使用率高,执行流畅。

SDPA 模式

  • 总执行时间:686.61 秒(约 11.44 分钟)

  • 每步时间(每分区 30 步):

    • 分区 1(latent_padding: 3):158 秒(约 5.30 秒/步)
    • 分区 2(latent_padding: 2):156 秒(约 5.23 秒/步)
    • 分区 3(latent_padding: 1):158 秒(约 5.28 秒/步)
    • 分区 4(latent_padding: 0):156 秒(约 5.22 秒/步)
  • 稳定性:无错误,但因注意力计算效率较低,速度明显较慢。

性能洞察

  • 速度优势:Sage-Attention 比 SDPA 快约 43.3%(389.16 秒 vs. 686.61 秒),每步时间减少约 2.4-2.6 秒。
  • 一致性:Sage-Attention 在各分区的时间略有下降(2.85 秒/步 到 2.69 秒/步),可能得益于缓存或优化效果。
  • 适用场景:Sage-Attention 适合迭代视频生成工作流(如使用 Video Combine 处理帧序列),显著提高生产效率。

显存监控数据

使用 nvidia-smi 监控工作流执行期间的显存使用情况。RTX 5090 总显存为 32607 MiB(约 32GB)。以下是各模式的关键指标。

Sage-Attention 模式(gpu_usage_sage_workflow.csv

  • 峰值显存使用量:30768 MiB(约 30.0GB)

  • 平均显存使用量:22877 MiB(约 22.3GB)

  • 最小可用显存:1334 MiB(约 1.3GB)

  • 显存波动(标准差) :8417 MiB(约 8.2GB)

  • GPU 利用率

    • 平均:41%
    • 峰值:100%
  • 显存控制器利用率

    • 平均:15%
    • 峰值:38%
  • 使用阶段

    • 初始阶段(0-30 秒) :约 4.9-6.8GB(加载 AutoencoderKL)。
    • 模型加载(30-60 秒) :约 6.8-15.3GB(HunyuanVideoClipModel_)。
    • 工作流执行(60-360 秒) :约 29.5-30.0GB(DynamicSwap_HunyuanVideoTransformer3DModelPacked)。
    • 模型卸载(360-370 秒) :约 30.0-20.2GB。
    • 解码阶段(370-390 秒) :约 5.1-5.4GB(重新加载 AutoencoderKL)。

SDPA 模式(gpu_usage_sdpa_workflow.csv

  • 峰值显存使用量:30224 MiB(约 29.5GB)

  • 平均显存使用量:20818 MiB(约 20.3GB)

  • 最小可用显存:1865 MiB(约 1.8GB)

  • 显存波动(标准差) :9968 MiB(约 9.7GB)

  • GPU 利用率

    • 平均:67%
    • 峰值:100%
  • 显存控制器利用率

    • 平均:13%
    • 峰值:22%
  • 使用阶段

    • 初始阶段(0-30 秒) :约 5.1-7.5GB(加载 AutoencoderKL)。
    • 模型加载(30-60 秒) :约 7.5-15.4GB(HunyuanVideoClipModel_)。
    • 工作流执行(60-650 秒) :约 29.7-30.0GB(DynamicSwap_HunyuanVideoTransformer3DModelPacked)。
    • 模型卸载(650-660 秒) :约 30.0-5.5GB。
    • 解码阶段(660-686 秒) :约 5.5-6.1GB(重新加载 AutoencoderKL)。

显存洞察

  • 峰值使用量:两种模式均接近 RTX 5090 的显存上限(约 30.0GB),反映视频模型的高内存需求。
  • 平均使用量:Sage-Attention 的平均显存使用量略高(约 22.3GB vs. 20.3GB),可能因其内存分配策略不同。
  • 稳定性:Sage-Attention 的显存波动较小(8.2GB vs. 9.7GB),表明其内存管理更优。
  • GPU 利用率:SDPA 的平均 GPU 利用率更高(67% vs. 41%),但性能未提升,反映计算效率较低。
  • 显存控制器:Sage-Attention 的峰值显存控制器利用率更高(38% vs. 22%),表明其内存访问模式更密集但效率更高。

表格比较

指标Sage-AttentionSDPA
总执行时间389.16 秒(约 6.49 分钟)686.61 秒(约 11.44 分钟)
平均每步时间2.76 秒/步5.26 秒/步
分区时间85秒, 83秒, 81秒, 80秒158秒, 156秒, 158秒, 156秒
峰值显存使用量30768 MiB(约 30.0GB)30224 MiB(约 29.5GB)
平均显存使用量22877 MiB(约 22.3GB)20818 MiB(约 20.3GB)
最小可用显存1334 MiB(约 1.3GB)1865 MiB(约 1.8GB)
显存波动(标准差)8417 MiB(约 8.2GB)9968 MiB(约 9.7GB)
平均 GPU 利用率41%67%
峰值 GPU 利用率100%100%
平均显存控制器利用率15%13%
峰值显存控制器利用率38%22%
命令行python.exe -s ComfyUI\main.py --normalvram --use-sage-attention --fastpython.exe -s ComfyUI\main.py --normalvram --fast
稳定性高(无错误)高(无错误)

给从业者的建议

  1. 选择 Sage-Attention 用于视频工作流

    • 其 43.3% 的速度提升使其成为迭代视频生成任务的理想选择,例如使用 Video Combine 处理帧序列。
    • 安装 sageattention==1.0.6 并使用 --use-sage-attention 以获得最佳效果。
  2. 监控显存使用

    • 两种模式均将显存推至约 30GB。使用 nvidia-smi 监控,并定期清理缓存以避免内存问题:

      rmdir /s /q E:\AI\ComfyUI\ComfyUI.cache
      
  3. 优化工作流

    • 通过调整工作流节点减少模型卸载(例如 AutoencoderKL),将模型保留在显存中。
    • 尝试 --fast 的子选项(例如 fp8_matrix_mult)以进一步降低显存和时间开销。
    • 考虑降低工作流中的帧分辨率或帧数以减轻显存压力。
  4. 确保稳定性

    • 禁用可能引发问题的自定义节点,如 ComfyUI-Managerflow2-wan-video

      move E:\AI\ComfyUI\ComfyUI\custom_nodes\ComfyUI-Manager E:\AI\ComfyUI\ComfyUI\custom_nodes\ComfyUI-Manager.bak
      move E:\AI\ComfyUI\ComfyUI\custom_nodes\flow2-wan-video E:\AI\ComfyUI\ComfyUI\custom_nodes\flow2-wan-video.bak
      
    • 添加 Windows 事件循环兼容性:

      import asyncio
      import sys
      if sys.platform == "win32":
          asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy())
      
  5. 验证依赖版本

    • 确保兼容版本:

      pip install aiohttp==3.10.11 numpy==2.0.0 opencv-python sageattention==1.0.6
      

结论

Sage-Attention 在 ComfyUI 的视频生成工作流中显著优于 SDPA,执行时间减少约 43.3%(389.16 秒 vs. 686.61 秒),显存使用量相当(约 30.0GB)。其优化的内存管理和计算效率使其成为 RTX 5090 等高性能 GPU 上视频生成的首选。通过遵循提供的命令和建议,从业者可以复现这些结果,优化工作流,实现更快、更高效的视频生成。

如果有同学用KJ的插件和工作流用一体大数据模型也能加速成功的话欢迎分享经验哈!