在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、2、4、8 位)。通过使用一组输入将量化模型与原始
float16模型的峰值信噪比(PSNR)进行比较来衡量质量下降。目标是找到每层能够使 PSNR 高于特定阈值的最低位深度。 - 应用阶段:在分析过程中生成一个“配方”(指定每层位深度的 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.py和mixed_bit_compression_apply.py。 - 预计算配方:为了避免漫长的分析阶段,Stable Diffusion 1.5、2.1 和 XL 1.0 基础版的预计算配方可供社区使用。