在Mac上使用高级Core ML量化的Stable Diffusion XL

Hugging Face 和 Apple 发布了 Stable Diffusion XL 的 Core ML 移植版,使得在 Apple Silicon Mac 上可以生成高质量的 1024x1024 像素图像。该版本引入了混合位调色板量化技术,这是一种压缩技术,能够显著降低模型大小和内存需求,而不会像均匀量化那样造成严重的质量损失。

Core ML 实现与性能

Stable Diffusion XL 现在以 Core ML 格式提供,使其能够在运行 macOS 14 公开测试版的 Apple Silicon Mac 上的 Swift 应用中原生运行。该实现目前使用了专为 CPU 和 GPU 计算单元设计的 ORIGINAL 注意力实现。请注意,细化阶段尚未移植。

硬件性能基准

在使用 CPU_AND_GPU 计算单元和 ORIGINAL 注意力实现时,端到端延迟和扩散速度会因设备而异:

设备 端到端延迟 (秒) 扩散速度 (迭代/秒)
MacBook Pro (M1 Max) 46 0.46
MacBook Pro (M2 Max) 37 0.57
Mac Studio (M1 Ultra) 25 0.89
Mac Studio (M2 Ultra) 20 1.11

混合位调色板技术

混合位调色板是一种后训练量化方法,通过根据各层对输出质量的影响分配不同的位深度来优化模型大小。与标准的 6 位调色板不同,后者采用统一的位深度,混合位调色板确定每层的最优位数以最小化质量下降。

混合位调色板的工作原理

该过程包括两个主要阶段:

  1. 分析阶段:系统检查每一层并测试各种位深度(1、2、4、8 位)。通过使用一组输入将量化模型与原始 float16 模型的峰值信噪比(PSNR)进行比较来衡量质量下降。目标是找到每层能够使 PSNR 高于特定阈值的最低位深度。
  2. 应用阶段:在分析过程中生成一个“配方”(指定每层位深度的 JSON 字典),然后将其应用于模型权重。

压缩结果

将 4.5 位平均配方应用于 Stable Diffusion XL 的 UNet 后,模型大小减少了 71%,从 4.8 GB 减少到 1.4 GB。

技术分析表明,在相同模型大小下,混合位调色板优于线性 8 位量化(1 位量化除外)。虽然高压缩(例如 3.41 位)可能导致特定提示细节的丢失——比如在“冲浪狗”提示中冲浪板的消失——但 4.50 位和 6.55 位版本在真实感方面仍与原始 16 位质量保持接近。

部署与转换资源

用户和开发者可以通过以下提供的资源在 Mac 上部署 Stable Diffusion XL:

  • 预转换模型:Hugging Face 提供了全精度流水线(apple/coreml-stable-diffusion-xl-base)和混合位调色板流水线(apple/coreml-stable-diffusion-mixed-bit-palettization)。
  • 转换工具:Apple 的 ml-stable-diffusion 仓库允许用户转换他们自己的微调模型。对于 XL 模型,用户必须使用 --attention-implementation ORIGINAL 标志。
  • 自定义量化:提供了用于生成和应用自定义量化配方的脚本 mixed_bit_compression_pre_analysis.pymixed_bit_compression_apply.py
  • 预计算配方:为了避免漫长的分析阶段,Stable Diffusion 1.5、2.1 和 XL 1.0 基础版的预计算配方可供社区使用。

Sources