PixArt 把 UNet 换成了纯 Transformer 骨干,这一点决定了它的部署手感和 Stable Diffusion 系完全不同。PixArt-α(arXiv 2310.00426,ICLR 2024 Spotlight)用 675 个 A100 GPU day 训完,只有 Stable Diffusion v1.5 的 6250 GPU day 的 10.8%,训练开销从约 32 万美元降到约 2.6 万美元,碳排降低九成——它出名靠的就是这笔账。PixArt-δ(arXiv 2401.05252)加了 LCM 蒸馏和 ControlNet,PixArt-Σ(arXiv 2403.04692)则换上 SDXL VAE、把 T5 的可用 token 从 120 拉到 300,并引入压缩 Key/Value 的注意力模块,让 0.6B 的主干能直出 2K 乃至 4K。
所以自部署 PixArt 时,主干权重几乎不构成负担:0.6B 用 fp16 装载只有约 1.2GB。压在显存上的是那个冻结不动的 T5 v1.1-XXL 文本编码器,4.3B 参数、fp16 约 9GB,占了整条管线的绝大部分。官方 PixArt-α 仓库写得很直白:走原生 .pth 推理路径默认要 23GB 显存,改走 diffusers 只要 11GB,再上内存优化可以压到 8GB 以下。Diffusers 官方文档给的做法是用 bitsandbytes 把 T5 载成 8bit,先单独跑一遍 encode_prompt,把 text_encoder 释放掉再加载 transformer,全程低于 8GB;换成 4bit 还能进一步压到 7GB 以内。
这套模型今天的定位要说清楚:HuggingFace 上 PixArt-alpha 组织的权重最后一次更新停在 2024 年 5 月,主线研发已经转到同一批核心作者(Junsong Chen、Enze Xie 等)在 NVlabs 的 SANA 项目上,SANA-1.5 与 SANA-Sprint 在 2025 年 3 月发布。但 PixArt 依然是一份极好用的资产——代码 Apache-2.0,0.6B 的体量让微调和消融实验的成本低到可以随便试,2K 直出的能力在 0.6B 这一档几乎没有对手,做壁纸、海报、批量素材流水线时它的每张图成本非常难被打败。
01 —
PixArt 各变体与显存需求
主干都是 0.6B,差别在分辨率档位、VAE、T5 token 长度和蒸馏方式
| 版本 | 参数量 | 显存 | 上下文 | 说明 |
|---|---|---|---|---|
| PixArt-Sigma-XL-2-1024-MS | 0.6B 主干 + T5-XXL 4.3B + SDXL VAE | fp16 全管线权重 ~11GB,1024 出图实测峰值 ~17GB;T5 转 8bit < 8GB,4bit < 7GB | T5 token 300 | 最主流的一档,也是 HF 上下载量最高的 PixArt 权重。默认 20 步、guidance_scale 4.5,negative_prompt 应留空字符串而不是 SD 那种长串负面词。 |
| PixArt-Sigma-XL-2-2K-MS | 0.6B 主干(与 1024 档同参数量) | 权重与 1024 档相同,2048×2048 的注意力激活显著更重,建议 24GB 起步 | T5 token 300 | 直出 2048×2048 海报与壁纸,pipeline 通过 transformer.config.sample_size == 256 自动切到 ASPECT_RATIO_2048_BIN。注意它在 HuggingFace 上的 README 是空的,别指望模型卡给你答案。 |
| PixArt-Sigma-XL-2-512-MS | 0.6B 主干 | 4bit T5 路径 < 7GB;不量化时仍受 T5 的 ~9GB 主导 | T5 token 300 | 迭代和 LoRA 起步档。另有 PixArt-Sigma-XL-2-256x256 用于最廉价的验证跑。 |
| PixArt-XL-2-1024-MS(PixArt-α) | 0.6B 主干 + T5-XXL 4.3B + sd-vae-ft-ema 80M | 原生 .pth 路径 ≥ 23GB,diffusers fp16 约 11GB,优化后 < 8GB | T5 token 120 | 上一代。用的是 SD1.5 时代的 VAE,提示词只吃 120 token,复杂长 prompt 会被截断——这是升到 Σ 最直接的理由。 |
| PixArt-LCM-XL-2-1024-MS(PixArt-δ) | 0.6B 主干,LCM 蒸馏 | 与 α-1024 同档 | T5 token 120 | 官方数字:A100 上 4 步、0.5 秒生成一张 1024×1024。批量出图流水线首选。同代还有 0.9B 的 PixArt-ControlNet(512 / 1024)配 30M HED 编码器。 |
| PixArt-Alpha-DMD-XL-2-512x512 | 0.6B 主干,DMD 蒸馏 | 512 档,全系最轻 | T5 token 120 | 分布匹配蒸馏的一步出图版本,只有 diffusers 格式。适合做实时预览和交互式草图。 |
02 —
按场景选卡:NexGPU 实价对照
0.6B 的主干填不满大卡,别为用不上的显存付钱
不做任何量化,完整 fp16 管线跑 PixArt-Σ 1024 出图
Tesla V100 32GB$0.188/卡·时
官方示例本来就用 torch.float16,Volta 跑 fp16 没有任何问题,32GB 一口气装下 T5-XXL 加 0.6B 主干,把 ~17GB 的实测峰值和原生 .pth 路径要求的 23GB 都包在里面,而且是全站最便宜的一档。
2K 直出、ControlNet 引导、批量长跑
RTX 4090 24GB$0.540/卡·时
Ada 架构对 fp16/bf16 和 bitsandbytes 量化全都友好,2048×2048 的注意力激活比 1024 档重得多,24GB 加 8bit T5 是最稳的组合,单位时间吞吐也远高于老卡。
LoRA 或全量微调 0.6B DiT,且不想先做 T5 特征提取
RTX A6000 48GB$0.817/卡·时
PixArt-Σ 支持免特征提取直接训练,代价是训练时 T5 要常驻显存吃掉约 9GB,再加优化器状态和激活,48GB 让你不用为省显存去改训练流程。
LCM / DMD 秒级批量出图流水线
A100 PCIE 80GB$0.824/卡·时
官方那个「0.5 秒一张 1024×1024」的数字就是在 A100 上测的,用同款卡意味着你的产能预估能直接对账,不用自己重新标定基准。
03 —
四步把 PixArt-Σ 跑起来
官方加载方式有个坑:分辨率仓库里只有 transformer,T5 和 VAE 在另一个仓库
- 01
开一台带预置 PyTorch 镜像的实例
在 NexGPU 控制台选卡开机,直接用 2000+ 预置镜像里的 PyTorch 镜像,跳过 CUDA 与驱动配置。PixArt 官方 README 至今仍钉在 torch 2.0.1 + cu11.7 + Python 3.9,照抄那份 conda 命令在新驱动上大概率装不干净,用现成镜像更省事。开机后先确认卡型和显存。
nvidia-smi --query-gpu=name,memory.total --format=csv - 02
装依赖,别漏掉 clean_caption 的两个隐形依赖
diffusers 里的 PixArt pipeline 默认 clean_caption=True,而它需要 beautifulsoup4 和 ftfy;这两个包不在的话它不会报错,只会静默退回用原始 prompt 编码,出图风格莫名其妙地变化。sentencepiece 是 T5 tokenizer 必需,bitsandbytes 留给后面的 8bit 路径。
pip install -U "diffusers>=0.31.0" transformers accelerate safetensors sentencepiece bitsandbytes beautifulsoup4 ftfy - 03
两段式加载:transformer 单独取,T5 与 VAE 走共享仓库
这是 PixArt-Σ 最常见的翻车点。除 1024-MS 外的分辨率仓库只放 transformer 子目录,必须把它和 PixArt-alpha/pixart_sigma_sdxlvae_T5_diffusers 拼起来才是完整管线。另外 config 里写的类名是 Transformer2DModel、实际用的是 PixArtTransformer2DModel,diffusers 官方文档明说这个不匹配可以忽略,不用去改配置。
python -c "import torch;from diffusers import Transformer2DModel, PixArtSigmaPipeline;t=Transformer2DModel.from_pretrained('PixArt-alpha/PixArt-Sigma-XL-2-1024-MS',subfolder='transformer',torch_dtype=torch.float16,use_safetensors=True);p=PixArtSigmaPipeline.from_pretrained('PixArt-alpha/pixart_sigma_sdxlvae_T5_diffusers',transformer=t,torch_dtype=torch.float16,use_safetensors=True).to('cuda');p('A small cactus with a happy face in the Sahara desert.').images[0].save('out.png')" - 04
显存紧张就砍 T5,而不是砍主干
把 T5 载成 8bit,先单独调 encode_prompt 拿到 prompt_embeds 和 attention_mask,del text_encoder 后 gc.collect() + torch.cuda.empty_cache(),再用 text_encoder=None 加载 pipeline 跑 latent,最后单独调 VAE 解码——diffusers 文档给的这套流程能把 1024 出图压进 8GB 以内,改成 load_in_4bit 可到 7GB 以内。代价是 8bit 文本嵌入有信息损失,官方明确建议和全精度对比一次再决定。注意 Pascal 架构的卡(比如 Tesla P40)跑 bnb 4bit 容易出问题,要走这条路就别选 P40。
text_encoder = T5EncoderModel.from_pretrained("PixArt-alpha/PixArt-Sigma-XL-2-1024-MS", subfolder="text_encoder", load_in_8bit=True, device_map="auto")
一笔可以对账的成本
拿官方给过的唯一硬指标算:PixArt-δ-LCM 在 A100 上 4 步、0.5 秒出一张 1024×1024。NexGPU 的 A100 PCIE 80GB 是 $0.824/卡·时,折合每秒 $0.824 ÷ 3600 ≈ $0.000229。要出 1 万张图,10000 × 0.5 秒 = 5000 秒 ≈ 1.39 小时,算力费 1.39 × $0.824 ≈ $1.15;再给拉权重、装依赖和预热留半小时,整单约 1.9 小时 × $0.824 ≈ $1.57,单张成本落在万分之一美元级别。换成标准 PixArt-Σ 20 步并开 CFG,一张图要跑 40 次 transformer 前向,是 LCM 那条 4 步不开 CFG 路径的 10 倍前向量,时间与费用大体按这个比例放大——这时候把卡换成 RTX 4090 24GB($0.540/卡·时)通常更划算,因为 0.6B 的主干根本填不满 80GB。存储侧:T5-XXL fp16 约 9GB 加上 VAE 和 transformer,20GB 的卷按 $0.414/GB·月 median 计是 20 × 0.414 = $8.28/月;实例一停算力立刻停止计费,卷不销毁则继续计。出图回传按 $0.0081/GB median,1 万张按每张 1MB 估约 10GB,即 10 × 0.0081 ≈ $0.08。整条链路没有最低消费、没有开通费、不用提配额申请。
04 —
