前言
Stability AI 发布的 Stable Diffusion 3.5 (SD3.5) 系列模型,特别是 SD3.5 Large (8B 参数),在图像质量、提示词依从性(Prompt Adherence)和文字生成能力上都达到了开源模型的顶峰。然而,随之而来的是巨大的显存开销。
在传统的 BF16/FP16 精度下,运行 SD3.5 Large 加上庞大的 T5 文本编码器,往往需要 24GB 甚至更高的显存,这让持有 8GB/12GB 显存的广大开发者望洋兴叹。
本文将深入探讨如何利用 FP8 精度 和 Hugging Face Diffusers 库,在消费级显卡上流畅运行 SD3.5 Large,实现显存优化的实战部署。
技术解析:为什么是 FP8?
在深度学习推理中,显存主要被模型权重(Weights)和激活值(Activations)占用。
- FP16/BF16:每个参数占用 2 字节(16 bits)。
- FP8:每个参数仅占用 1 字节(8 bits)。
理论上,FP8 能将模型权重的显存占用直接砍半。与传统的 INT8(整型量化)不同,FP8 是浮点格式,更适合处理神经网络中动态范围较大的数据。
在 SD3.5 中,我们主要使用 FP8 E4M3FN 格式(4 位指数,3 位尾数),它在保持动态范围和精度之间取得了极佳的平衡,对于文生图任务,其生成的图像与 BF16 原版在肉眼上几乎无法区分,但对硬件的门槛却大大降低。
环境准备与 Diffusers 部署实战
我们将使用 Python 和 Hugging Face 的 diffusers 库进行部署。相比于 WebUI,代码部署能让我们更灵活地集成到自己的应用中。
依赖安装
首先,确保你的环境支持 CUDA,并安装最新版的依赖库。accelerate 和 bitsandbytes 是实现量化加载的关键。
pip install --upgrade torch torchvision
pip install --upgrade diffusers transformers accelerate sentencepiece protobuf bitsandbytes
加载 FP8 模型 (核心代码)
我们将直接加载 Stability AI 官方提供的 FP8 量化版模型。
import torch
from diffusers import StableDiffusion3Pipeline
# 定义模型 ID
model_id = "stabilityai/stable-diffusion-3.5-large-turbo"
# 或者使用非 Turbo 版本:"stabilityai/stable-diffusion-3.5-large"
# 核心优化 1:指定 torch_dtype 为 float16,但加载 FP8 权重
# 注意:这里我们利用 Diffusers 的自动映射功能
pipe = StableDiffusion3Pipeline.from_pretrained(
model_id,
torch_dtype=torch.bfloat16, # 推理计算时使用 BF16 (30 系 + 显卡) 或 FP16
text_encoder_3=None, # 暂时不加载巨大的 T5,后面单独处理优化
tokenizer_3=None
)
# 核心优化 2:开启 CPU Offload (显存不足的神器)
# 这会将不计算的模型部分暂时移到内存,极大降低峰值显存
pipe.enable_model_cpu_offload()
()


