两个人、2.1 万美元、一个能出图的模型:Linum 把权重放了出来,但它一个字也写不出来
3分钟看懂
11 月 4 日,一家只有两个人的研究实验室 Linum 发了一篇博文,标题朴素得不像新闻:《Training a Text-to-Image Model for $21K》。
内容不朴素:他们把一个 2B 参数的文生图模型,从头训到能出片,总计算成本 21,038 美元,然后把权重、代码全部按 Apache 2.0 放了出来。
模型叫 P-JiT 21K(Pyramid-JiT),作者是 Sahil Chopra 和 Manu Chopra 两兄弟。Hugging Face 仓库 11 月 3 日建好,博客 11 月 4 日发布,5 日冲上 Hacker News 首页,随后 Grafy、Emergent、AI Briefing 等一批站点各自复述了同一组数字——成本 21,038 美元、8,415 个 H100 小时、Apache 2.0。本文事实以官方博客、Hugging Face 模型卡和 GitHub 仓库三处原始材料为准,媒体转述仅用于交叉核对。
一句话结论:这不是「吊打大厂」的故事,是「把训练账本摊开给你看」的故事。它证明的是像素空间这条路能省掉一大笔钱,代价是这个模型连一个字母都写不出来。
这笔钱到底怎么花的
官方博客把账单拆到了小时级,这点比很多大厂的模型公告都实在:
- 预训练:20,348 美元,8,139 个 H100 小时,单价 2.50 美元
- 后训练:690 美元,276 个 H100 小时
- 合计:21,038 美元,8,415 个 H100 小时
预训练用的是 64 张 H100(8 个节点),8,139 ÷ 64 ≈ 127 小时,也就是五天多一点。这个数字里还包含了中途重启的浪费。
数据量是这样分配的:
- 512² 阶段:6.1027 亿个样本,29.8 万步
- 1024² 阶段:4,997 万个样本,2.44 万步
全局 batch size 一直是 2,048。图像不做缩放,五种原生尺寸按 20% 均分。
为什么能这么便宜? 不是因为用了什么廉价算力,是因为他们把「每个样本要算多少」压下来了。这才是真正值得看的部分。
省钱的真正来源:把 VAE 拿掉
现在绝大多数出图模型都是两步走:先用 VAE 把图片压成 latent,再在 latent 上做扩散。好处是 token 少,坏处是压缩率有天花板——官方博文里说得很直接:VAE 在重建任务上继续优化,反而会让下游扩散模型生成得更差。
Linum 的做法是整个跳过 VAE,直接在像素上做扩散。
关键在于他们怎么处理「像素太多」这个问题:
- 图片切成 32×32 的 patch,每个 patch 是 32×32×3 = 3,072 个数值
- 线性投影压到 1,024 维,压缩比 3:1
- 结果是:1024² 的图只有 1,024 个图像 token
对比一下:常规方案是 16×16 的 token 化,P-JiT 的粒度粗了 4 倍,注意力窗口直接缩到 1/4。注意力的复杂度是 O(n²),这一刀砍下去,训练和推理的成本是平方级下降。
但像素空间有个天然难点:低频结构好学,高频细节难学,而且网络浅层的梯度信号很弱。他们用了两个训练期的「脚手架」:
- 两个 readout 头,挂在第 10 和第 16 个 block 上,分别预测 1/4 和 1/2 分辨率的干净图。等于逼着网络中间层也要交出「整张图长什么样」的答案。
- PixelREPA(约 2.41 亿参数),把模型的隐空间对齐到 DINOv3-L 的特征。做法是遮掉 20% 的 token,让一个两层 transformer 去预测对应的 DINO 特征。
这两个东西在采样时全部丢掉。所以训练时约 2.42B 参数,实际推理只有 2.18B。这也是官方在模型卡里特意说明的一点——别看到 2.42B 就以为部署要那么多。
模型到底多大
- 主干:22 个单流 DiT block,宽度 2,944,23 个注意力头 × 128 维,SwiGLU 中间层 5,376
- 前置 refiner:2 个图像 block + 2 个文本 block
- 文本编码器:冻结的 Qwen3.5-4B,取第 7、15、27 层(它的三个全注意力层)拼接后投影,256 个 token
- 参数量:2.18B
- 权重文件:8.7GB(fp32)
- 文本编码器:8GB(bf16),首次运行自动从 Hugging Face 下载
位置编码用的是 3D RoPE,从 512² 切到 1024² 时把高宽位置乘 0.5 做位置插值——这是分辨率迁移的常规操作,但他们在附录里写清了 EMA 的起始点和噪声尺度翻倍的细节,复现的人能照着做。
采样默认是 50 步 Euler,自适应投影引导强度 15,对着空负提示,初始噪声 scale 4,bf16 autocast。五种原生尺寸:1024×1024、864×1216、1152×864、1248×832、1280×720。
它做得到 / 做不到什么
先说做不到的,因为官方自己在模型卡开头就用警示框标了出来:
它不能写字。 训练数据里所有带渲染文字的图——信息图、PDF、书页、幻灯片、海报——被主动过滤掉了。理由是这些数据对「做动画工具」这个目标没用。所以让它生成带字的招牌、logo、标题卡、海报,结果不会好,提示词增强器甚至会直接返回一个 text_requested 错误。
其余短板也是官方自己列的:
- 全身照:腿容易变形
- 多物体:六辆车、人群这种,容易糊
- 多人互动:人物之间的关系画不准
- 世界知识:吉他几根弦、骰子几点,会错
能做到的:近 1MP 的人像、动物、建筑、产品、风景、风格化插画。官方给了 249 张样图,按类目分开——人像 57、动物 42、建筑 20、产品 43、风景 19、风格化 68。看得出他们在人像和产品这两类上花了力气。
还有一条容易被忽略的:它吃的是 50~80 词的密集描述,短提示明显更差。这不是调参能解决的,是训练数据的形态决定的。
怎么用
三步,官方给的路径很清楚:
- 装环境:需要 CUDA GPU。
git clone仓库后pip install -e .,第一次跑要编译 Triton 的小型 CUDA 核。 - 直接跑:如果提示词本身就是一段详细描述,加
--no_upsample跳过增强,不需要任何 API key。 - 跑自己的短提示:默认会调一个提示词增强器,把短句改写成 50~80 词的描述——这一步走 OpenRouter,需要
OPENROUTER_API_KEY(用 Claude Opus 5.5 改写)。
```bash
python generate.py --prompt "oil painting of weathered fisherman smoking a pipe" \
--aspect_ratio square --seeds 0 --out_dir outputs
```
增强后的实际输入会打印出来,同时存到 outputs/prompt.json,方便你回看模型到底看到了什么。
适用场景
- 想自己训模型的小团队:这是目前少见的一份「完整账本 + 可复现代码 + 可对比权重」的样本。21,038 美元这个数字能不能推广另说,但口径是清楚的:8,415 H100 小时、2.50 美元单价、含重启。
- 研究像素空间路线的人:无 VAE、32×32 patch、双 readout 头、PixelREPA,这套组合是可直接改的起点。
- 只有一张卡、想本地出图的人:8.7GB fp32 加 8GB 文本编码器,显存需求比很多 9B 级出图模型友好,Apache 2.0 也能商用。
- 做动画/视频预研的:Linum 明说这是通往视频模型的垫脚石,读它的架构比读它的分数更有价值。
不适用场景
- 要出海报、带字图、电商主图:直接放弃,训练时就把这类数据删了。
- 要多人场景、群像、复杂交互:2B 的容量撑不住。
- 要 4K:训练最高的原生尺寸是 1280×720 这一档,往上靠插值,别指望。
- 要开箱即用的产品级质量:官方自己标注了「research checkpoint,不是生产模型,会有粗糙的地方」。
- 要中文提示词:文本编码器是英文语料为主的 Qwen3.5-4B,官方示例和评测全部是英文,中文效果没验证过。
避坑
- 别被「2 万美元」骗了。这是一次特定跑法的成本,不是「谁都能用 2 万块训出这个模型」。数据从哪来、清洗花多少人力、失败了重来几次,这些没算进 21,038 美元。
- 别把 2.42B 当成部署尺寸。训练期的 readout 头和 PixelREPA 全部丢弃,实际是 2.18B。
- 别忽略 fp32。8.7GB 是 fp32 的 DiT,想省显存要自己做量化,官方没提供。
- 短提示会翻车。不做增强直接喂「一只猫」,效果会明显差于官方样图;但增强要 OpenRouter key,等于多一个外部依赖。
- 许可证要看两层。P-JiT 自己是 Apache 2.0,但文本编码器 Qwen3.5-4B 有它自己的条款,商用前要分别确认。
- 仓库和模型卡是 Claude 写的。官方在博文末尾和 README 里都注明了:代码、模型卡、GitHub 仓库由 Claude Opus 5.5 从内部实验仓库提取整理,模型训练和审阅是 Linum 自己做的。这不影响权重可用性,但读代码时要多一分小心。
成本 / 时间
- 复现训练:官方口径 8,415 H100 小时。按 2.50 美元/小时算是 21,038 美元;按主流云价 3~4 美元/小时,实际会到 2.5 万~3.4 万美元。
- 自己微调:仓库没提供微调脚本,只有推理。要接着训得自己搭。
- 单张出图:官方没给单图延迟数字,只说默认 50 步 Euler。参考同级别 2B 模型在 H100 上的量级,是秒级而非分钟级,但这属于推算,不是实测。
- 上手时间:环境装好到跑出第一张图,官方给的示例命令是现成的,半小时内可以完成;卡在显存或 Triton 编译上的情况要预留时间。
行动建议
第一步别急着下载 8.7GB。先做这件事:
打开官方博客的 249 张样图,按你自己的业务场景翻一遍。 人像、产品、建筑、风景、风格化五类分开看,判断这个质量档位是不是你要的。这一步五分钟,能省掉后面几小时的折腾。
确认要用,再按这个顺序:
- 先跑官方给的那条人像命令(
--no_upsample,无需 key),验证环境和显存 - 换成你自己场景的短提示,开增强跑一次,对比差距
- 再决定是拿它当基线改架构,还是直接当出图工具用
如果要往「带字的商业图」方向走,这个模型帮不上忙——那是另一个技术分支,得回去看专门做过文字渲染的模型。
参考来源
- Linum 官方博客(2026-11-04):https://www.linum.ai/field-notes/pjit-21k
- Hugging Face 模型卡(Apache 2.0):https://huggingface.co/Linum-AI/pjit-21k
- GitHub 仓库(推理代码):https://github.com/Linum-AI/pjit-21k
- Hacker News 讨论(2026-11-05):https://news.ycombinator.com/item?id=50368208
- Grafy 报道(2026-11-05):https://grafy.ai/news/linum-trains-text-to-image-model-for-21k-releases-weights
- Emergent 报道(2026-11-06):https://emergent.sh/news/linum-trains-2b-text-image-model-21k-open
参考来源
- https://www.linum.ai/field-notes/pjit-21k
- https://huggingface.co/Linum-AI/pjit-21k
- https://github.com/Linum-AI/pjit-21k
- https://news.ycombinator.com/item?id=50368208
- https://grafy.ai/news/linum-trains-text-to-image-model-for-21k-releases-weights
- https://emergent.sh/news/linum-trains-2b-text-image-model-21k-open