- 大模型
- 人工智能
- 媒体生成
- 计算机视觉
- 基础模型
- 本地部署
【免费下载链接】Nanosaur2-670M
Nanosaur2-670M 是一个仅花 600 美元算力训练出的670M 参数插画文生图 DiT(Diffusion Transformer)模型。本文带你拆解它最值得学习的四个设计:SPRINT 稀疏块、2D RoPE、QK-norm 和极致精简的参数哲学,帮你理解小模型如何逼近大模型的出图效果。
📦 项目概览:670M 参数的三大组件
Nanosaur2 由三个文件组成,各司其职:
| 组件 | 说明 | 模型文件 |
|---|---|---|
| 扩散模型 | 670M 参数 DiT,adaLN-single + 2D RoPE + SwiGLU + QK-norm + SPRINT 稀疏块 | nanosaur2_diffusion_model.safetensors |
| 文本编码器 | 冻结的 Gemma3-270M,取倒数第二层输出 | nanosaur2_text_encoder.safetensors |
| VAE | 基于 DINOv2 的语义 VAE(129M),64 通道 latent、16 倍下采样 | nanosaur2_vae.safetensors |
核心结构定义在 model.py 的Nanosaur2Transformer2DModel中:hidden_size=1536、16 个注意力头、18 个 DiT 块、MLP 隐层 4096。推理时用 nanosaur2_workflow.json 拖入 ComfyUI 即可运行,效果大致如下:
PNG 文件内嵌了 ComfyUI 工作流,拖入 ComfyUI 即可加载。
⚡ SPRINT 稀疏块:让中间 14 层"省着算"
SPRINT(Sparse-Dense Residual Fusion)是这个模型最核心的加速手段。18 个 DiT 块被切成三段:
- 前 2 个块:常规稠密前向;
- 中间 14 个块(
SPRINT_NUM_F=2到倒数第 2 块):走一条"稀疏路径"; - 后 2 个块:常规稠密前向。
稀疏路径的实现见 model.py 的sparse_path:中间块的输出g与输入x相减,再经一个轻量投影加回主干——x + sprint_out_proj(g - x)。也就是说,中间层只负责"修正残差",主干信息始终直通,计算被大幅摊薄。
更妙的是它与采样的配合:sparse_skip参数(model.py)允许某一批次整体跳过中间 14 块。训练时,文本被丢弃的无条件样本有 50% 概率跳过稀疏块,条件样本只有 5% 概率跳过——模型因此学会了一条"无文本、无中间块"的廉价前向路径,供推理时做 path-drop guidance。采样阶段 CFG 与 path-drop 交替使用(alternate模式,推荐),奇数步直接省掉一半计算。三种模式在 nodes.py 的GUIDANCE_MODES中定义。
🧭 2D RoPE:给图像 token 装上"平面坐标系"
文本 token 是一维序列,但图像 latent 是二维网格。model.py 的rope_2d把 head_dim 拆成两半:一半编码 x 方向频率,一半编码 y 方向频率,且坐标以图像中心为原点(arange - (size - 1) / 2)。
配合 split-half 旋转配对(model.py 的rope_split_half),每个 token 在注意力中天然携带"我位于图像哪个方位"的信息。以图像中心为原点的做法让 RoPE 对任意 aspect bucket(512x2048 到 2048x512)都保持对称性,这也是模型能直接支持多种宽高比、无需位置插值的原因。
🛡️ QK-norm:小模型的注意力稳定器
Attention 模块中,q_norm和k_norm是作用于每个注意力头的 RMSNorm,在 RoPE 旋转之前对 Q、K 归一化(见 model.py 的norm_rope)。
QK-norm 能防止注意力 logits 随训练发散,是 ViT-22B 等大规模视觉 Transformer 验证过的技巧。对 670M 这样的小模型尤其重要:它让短训练预算下的注意力分布更平稳,减少后期"画风漂移"。另外注意一个细节:文本 key 同样过k_norm但不做旋转(model.py),因为文本 token 没有空间位置。
🎯 670M 参数设计哲学:每一分算力都花在刀刃上
小模型的哲学不是"少而精地堆模块",而是把成熟设计组合到最简:
- adaLN-single 条件注入:全模型只有一条共享的 adaLN 线性层,每块用可学习偏移
encoder_adaLN_offsets区分(model.py)。相比每块独立的调制层,参数几乎不增,时间步与文本池化条件(condition = silu(t + pooled))仍能有效注入。 - 文本自注意力精修:2 个
TextRefineBlock先让文本 token 做自注意力,再进入图像块做交叉注意力,小预算下提升提示词遵循度。 - 自定义提示词加权:
(artist:4)这类权重不是放大 embedding,而是转换为对数偏置加在交叉注意力的 mask 上(txt_bias,model.py),解析逻辑见 text_encoder.py 的parse_prompt_emphasis。 - x-prediction 输出:最后一层直接预测干净图像
x0,再由(x - x0) / t换算成速度场(model.py),配合 logit-normal 时间步采样与 10% caption dropout,训练更稳。 - 语义 VAE 打配合:VAE 编码端是 DINOv2-B,64 维 latent 瓶颈、无像素损失(vae.py)。语义化的 latent 收敛更快,670M 的扩散模型"学起来更容易",这是小总预算下质量的关键。
训练总成本:4M 插画数据集 + 11 个 H100 天,全程 256→512→1024 渐进式分辨率(见 README.md 的 Training 部分)。
🚀 快速上手:LoRA 微调与推荐参数
- 推理参数:Euler simple、50 steps、CFG 4、shift 3(内置于模型配置 nodes.py),正提示词前缀
newest, masterpiece,负提示词前缀oldest, low quality。 - LoRA 训练:准备一个带同名
.txt描述的文件夹,运行:
uv run python custom_nodes/nanosaur2_support/train_lora.py /path/to/images脚本 train_lora.py 默认 rank 64,覆盖qkv_x、kv_y、proj等层(train_lora.py),并复刻了基础训练的 5%/50% 稀疏块丢弃策略,产出models/loras/<folder name>.safetensors。
📚 总结
Nanosaur2-670M 证明了:在语义 VAE + 稀疏块 + 稳定化技巧的加持下,670M 参数 + 600 美元的训练预算也能产出可用的插画文生图模型。它的每个设计选择——SPRINT 残差融合、以中心为原点的 2D RoPE、注意力头级 QK-norm、adaLN-single——都是"低成本、高收益"的经典组合,值得所有做小模型 DiT 的实践者研读 nanosaur2_support/ 源码。
- 大模型
- 人工智能
- 媒体生成
- 计算机视觉
- 基础模型
- 本地部署
【免费下载链接】Nanosaur2-670M
相关推荐
Nanosaur2-670M推理加速内幕:SPRINT稀疏-稠密残差融合与path-drop引导如何省算力?
Nanosaur2 670M推理加速内幕:SPRINT稀疏 稠密残差融合与path drop引导如何省算力? Nanosaur2 670M 是一个 670M 参
大模型人工智能媒体生成计算机视觉基础模型本地部署如何只用600美元训练670M文生图DiT模型:Nanosaur2-670M Rectified Flow训练方案完整复盘
如何只用600美元训练670M文生图DiT模型:Nanosaur2 670M Rectified Flow训练方案完整复盘 Nanosaur2 670M 是一个
大模型人工智能媒体生成计算机视觉基础模型本地部署670M参数能做什么、做不到什么?Nanosaur2-670M能力与局限全盘点,2B版未来可期
670M参数能做什么、做不到什么?Nanosaur2 670M能力与局限全盘点,2B版未来可期 Nanosaur2 670M 是一款仅用约 600 美元算力训练
大模型人工智能媒体生成计算机视觉基础模型本地部署
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考