跳到主要内容

文生图模型 · Diffusion Transformer

PixArt 本地部署:真正吃显存的不是 0.6B 的 DiT,是 4.3B 的 T5

PixArt-α / δ / Σ 是同一支团队(华为诺亚方舟实验室 × 大连理工 × 港大 × 港科大)三代 DiT 文生图模型,主干统统只有 0.6B 参数——比 SDXL 的 2.6B、SD Cascade 的 5.1B 小一个量级。显存账要算在文本编码器头上。

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-MS0.6B 主干 + T5-XXL 4.3B + SDXL VAEfp16 全管线权重 ~11GB,1024 出图实测峰值 ~17GB;T5 转 8bit < 8GB,4bit < 7GBT5 token 300最主流的一档,也是 HF 上下载量最高的 PixArt 权重。默认 20 步、guidance_scale 4.5,negative_prompt 应留空字符串而不是 SD 那种长串负面词。
PixArt-Sigma-XL-2-2K-MS0.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-MS0.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,优化后 < 8GBT5 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-512x5120.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 在另一个仓库

  1. 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
  2. 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
  3. 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')"
  4. 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 —

常见问题

PixArt 本地部署到底需要多大显存?8GB 卡能跑吗?

官方 PixArt-α 仓库给了三档口径:原生 .pth 推理路径默认 23GB,走 diffusers 是 11GB,加上内存优化可以低于 8GB。Diffusers 文档进一步说明,把 T5 用 bitsandbytes 载成 8bit 并分段释放显存,1024 出图能稳定在 8GB 以内,4bit 更可到 7GB 以内。所以 8GB 理论可行,但要接受两点:文本嵌入精度损失,以及分段加载卸载带来的额外延迟。真要图省心,NexGPU 的 Tesla V100 32GB 只要 $0.188/卡·时,不量化直接跑完整 fp16 管线,比在小卡上抠显存划算得多。

PixArt-Σ 和 PixArt-α 差在哪?该直接上 Σ 吗?

三处实打实的差别:VAE 从 SD1.5 时代的 sd-vae-ft-ema 换成 SDXL VAE;T5 可用 token 从 120 提到 300,长 prompt 不再被腰斩;新增压缩 Key/Value 的注意力模块,使 0.6B 主干能直出 2K/4K。主干参数量两代都是 0.6B,显存账几乎一样。除非你在复现 α 的论文结果或依赖 α 的 LCM/ControlNet 生态,否则直接上 PixArt-Sigma-XL-2-1024-MS。想两代都测一遍,NexGPU 按秒计费,各开一台跑完就停,费用是分钟级的。

PixArt 已经被 SANA 取代了吗?现在还值得部署吗?

研发主线确实转移了:HuggingFace 上 PixArt-alpha 组织的权重最后更新停在 2024 年 5 月,PixArt 的核心作者 Junsong Chen、Enze Xie 等人随后在 NVlabs 推出 SANA,2025 年 3 月发布 SANA-1.5 与 SANA-Sprint,官方称 SANA-0.6B 比 FLUX-dev 快 39.5 倍。但 PixArt 代码是 Apache-2.0、权重公开、结构简单,作为 DiT 教学、消融实验和低成本批量出图的底座依然非常好用,2K 直出在 0.6B 这一档几乎没有对手。想横向比一比 PixArt 和 SANA,NexGPU 有 75 种 GPU 型号、1175 个已验证可租节点,同一晚上把两条管线都跑一遍完全不是问题。

24GB 的 4090 能跑 PixArt-Σ 2K 吗?

能,但要注意分辨率分箱机制。pipeline 依据 transformer.config.sample_size 自动选桶:256 对应 ASPECT_RATIO_2048_BIN、128 对应 1024、64 对应 512、32 对应 256。也就是说你必须用 PixArt-Sigma-XL-2-2K-MS 这个权重,拿 512 档的权重去请求 2048 只会被静默分箱回 512 再拉伸。2048×2048 的激活开销比 1024 档重得多,24GB 配合 8bit T5 是稳妥组合。NexGPU 的 RTX 4090 24GB $0.540/卡·时,觉得紧就换 RTX A6000 48GB $0.817/卡·时,中途停机换卡不产生任何切换费用。

PixArt 可以商用吗?许可证是什么?

要分开看:GitHub 上 PixArt-alpha 和 PixArt-sigma 两个仓库的代码是 Apache License 2.0,商用无限制;但 HuggingFace 上的权重(PixArt-XL-2-1024-MS、PixArt-Sigma-XL-2-1024-MS 等)挂的是 CreativeML Open RAIL++-M,这是一份带使用限制条款的开放许可,商用前务必自己读一遍附录里的禁止用途清单。另外模型卡本身列了已知局限:无法渲染可读文字、手指等细节容易崩、复杂构图能力有限、VAE 有损。在 NexGPU 上你可以先租一小时把这些边界亲手测一遍,再决定要不要进产线。

按官方代码加载 PixArt-Σ,报缺 text_encoder 或 vae 怎么办?

这是设计如此,不是 bug。除 PixArt-Sigma-XL-2-1024-MS 之外的分辨率仓库只包含 transformer 子目录,T5 和 SDXL VAE 统一放在 PixArt-alpha/pixart_sigma_sdxlvae_T5_diffusers 这个约 4.5B 的共享仓库里。正确姿势是先 Transformer2DModel.from_pretrained(..., subfolder='transformer'),再把它作为 transformer= 参数传给以共享仓库为底的 PixArtSigmaPipeline。顺带一提,config 里类名写着 Transformer2DModel 而实际类是 PixArtTransformer2DModel,diffusers 官方文档明说可忽略。NexGPU 提供 SSH、Jupyter、网页终端、REST API 和 CLI 五种接入方式,配合 Telegram 上的中英双语支持,卡在这类细节上不用排队等工单。

开始使用 NexGPU

无论你是企业研发团队还是独立开发者,都可以在几分钟内跑起第一个任务。

注册即可浏览全网实时价格,无需绑定支付方式。