一、引言:内容平台的一次战略转身
2026年8月14日,小红书dots模型实验室(dots studio)正式发布了dots3-note preview——这是dots3系列的首个开源版本,也是国内内容平台首次公开进入开源大模型赛道。这一动作的意义远不止于"又多了一款开源模型",它标志着小红书正从AI应用层玩家向底层模型能力建设者转型。
dots3 note preview采用MoE(Mixture of Experts)架构,总参数量280B,每token激活参数仅16B,支持512K超长上下文窗口,具备文本、视觉与语音的全模态理解能力。更令人瞩目的是,该模型同系列的一个分支版本在IMO 2026(国际数学奥林匹克竞赛)中斩获了官方认证的42/42满分成绩。
本文将从架构设计、MoE路由机制、注意力机制、多模态处理、训练方法论、部署实践、评测表现与行业影响等多个维度,对dots3 note preview进行全方位技术深度解析。
二、整体架构概览
dots3 note preview的整体架构可拆解为三个核心子系统:语言主干网络(Language Backbone)、视觉编码器(Vision Encoder)和音频编码器(Audio Encoder)。三者协同工作,实现文本、图像、视频和音频的统一输入理解。
2.1 架构参数总览
| 组件 | 参数 |
|---|---|
| 语言主干总参数 | 280B |
| 语言主干激活参数 | 16B(MoE) |
| 解码器层数 | 1个Dense层 + 45个MoE层 |
| 隐藏维度 | 5,120 |
| 专家网络 | 256个路由专家 + 1个共享专家,Top-8路由 |
| 注意力层 | 13层DSA + 33层滑动窗口注意力(SWA) |
| DSA选择Top-k | 2,048 |
| 上下文长度 | 512K token |
| 词表大小 | 152K |
| 视觉编码器 | MoE ViT,7B总参数,1.2B激活 |
| 音频编码器 | Dense,800M参数 |
| 多token预测(MTP) | 1个共享层,1.13B参数 |
| 支持精度 | BF16 / FP8 |
2.2 架构总览图
┌─────────────────────────────────────────────────────────────┐
│ dots3-note preview 整体架构 │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────────────┐ ┌──────────────────┐ │
│ │ 视觉编码器 │ │ 音频编码器 │ │
│ │ MoE ViT │ │ Dense Encoder │ │
│ │ 7B总/1.2B激活 │ │ 800M参数 │ │
│ │ 图像+视频帧输入 │ │ 16kHz语音输入 │ │
│ └────────┬─────────┘ └────────┬─────────┘ │
│ │ │ │
│ ▼ ▼ │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ 多模态投影对齐层 │ │
│ │ (Visual/Audio Projector → LLM Embedding Space) │ │
│ └──────────────────────┬───────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ 语言主干 (Language Backbone) │ │
│ │ │ │
│ │ ┌───────┐ ┌───────┐ ┌───────┐ ┌───────┐ │ │
│ │ │ Dense │ │ MoE 1 │ │ MoE 2 │ ... │ MoE 45│ │ │
│ │ │ Layer │ │ Layer │ │ Layer │ │ Layer │ │ │
│ │ └───┬───┘ └───┬───┘ └───┬───┘ └───┬───┘ │ │
│ │ │ │ │ │ │ │
│ │ ▼ ▼ ▼ ▼ │ │
│ │ ┌──────────────────────────────────────────────┐ │ │
│ │ │ MTP Head (1.13B, 共享多token预测层) │ │ │
│ │ └──────────────────────────────────────────────┘ │ │
│ └──────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ 输出层 (文本生成) │ │
│ └──────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘
三、MoE架构深度解析
3.1 专家路由机制
dots3 note的MoE层采用256个路由专家(routed experts)加1个共享专家(shared expert)的设计,每个token通过Top-8路由机制选择8个最相关的专家激活。
核心路由计算流程如下:
import torch
import torch.nn.functional as F
class Dots3MoELayer(torch.nn.Module):
"""dots3-note MoE层简化实现"""
def __init__(self, hidden_dim=5120, n_experts=256, n_shared_experts=1,
top_k=8, expert_dim=1536):
super().__init__()
self.hidden_dim = hidden_dim
self.n_experts = n_experts
self.top_k = top_k
# 路由网络(Gate)
self.gate = torch.nn.Linear(hidden_dim, n_experts, bias=False)
# 共享专家
self.shared_expert = torch.nn.Sequential(
torch.nn.Linear(hidden_dim, expert_dim * 4),
torch.nn.SiLU(),
torch.nn.Linear(expert_dim * 4, hidden_dim),
)
# 路由专家(示意:实际使用分组矩阵乘优化)
self.experts = torch.nn.ModuleList([
torch.nn.Sequential(
torch.nn.Linear(hidden_dim, expert_dim * 4),
torch.nn.SiLU(),
torch.nn.Linear(expert_dim * 4, hidden_dim),
)
for _ in range(n_experts)
])
def forward(self, x):
# x: [batch_size, seq_len, hidden_dim]
batch_size, seq_len, _ = x.shape
# 1. 计算路由分数
gate_logits = self.gate(x) # [B, S, 256]
gate_scores = F.softmax(gate_logits, dim=-1, dtype=torch.float32)
# 2. Top-8 选择
topk_scores, topk_indices = torch.topk(gate_scores, self.top_k, dim=-1)
topk_scores = topk_scores / topk_scores.sum(dim=-1, keepdim=True)
# 3. 共享专家输出(始终激活)
shared_out = self.shared_expert(x)
# 4. 路由专家输出(仅对选中的专家计算)
# 简化:实际实现使用分组GEMM + 分散/聚合
final_hidden = shared_out # 从共享专家开始
final_hidden = final_hidden.to(x.dtype)
# 实际推理框架会使用dispatch/combine融合算子
# 这里仅展示路由逻辑
routed_output = torch.zeros_like(x)
for i in range(self.n_experts):
mask = (topk_indices == i).any(dim=-1)
if mask.any():
expert_out = self.experts[i](x[mask])
# 加权求和
expert_weight = topk_scores[mask][topk_indices[mask] == i]
routed_output[mask] += expert_out * expert_weight.unsqueeze(-1)
return final_hidden + routed_output
3.2 激活参数的经济学
280B总参数 / 16B激活参数的组合是dots3 note最核心的设计决策。这背后的经济学非常清晰:
- 知识容量:280B的稠密权重提供了充足的知识表征空间,让模型在各种领域都有足够的"见识"
- 推理成本:每token仅激活16B参数,计算量和显存需求接近16B稠密模型
- 部署友好:在H100 80GB x 8的节点上,使用FP8量化即可完成单机部署
对比同期的其他开源模型:
| 模型 | 总参数 | 激活参数 | 架构 | 上下文 |
|---|---|---|---|---|
| dots3 note preview | 280B | 16B | MoE (256/8) | 512K |
| DeepSeek-v4-flash | 284B | 13B | MoE | 128K |
| GLM-5.2 | 743B | 39B | MoE | 256K |
| Hy3 | 295B | 21B | MoE | 256K |
3.3 MoE路由与注意力混合架构图
┌──────────────────────────────────────────────────────────────┐
│ dots3-note 单层Transformer结构 │
├──────────────────────────────────────────────────────────────┤
│ │
│ 输入 x (hidden_dim=5120) │
│ │ │
│ ▼ │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ RMSNorm │ │
│ └──────────────────────┬───────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ 注意力层 (每层二选一) │ │
│ │ │ │
│ │ ┌─────────────────┐ 或 ┌──────────────────────┐ │ │
│ │ │ DSA (13层) │ │ SWA (33层) │ │ │
│ │ │ Top-2048稀疏 │ │ 滑动窗口 size=513 │ │ │
│ │ │ MLA + Indexer │ │ MLA + 窗口掩码 │ │ │
│ │ └─────────────────┘ └──────────────────────┘ │ │
│ └──────────────────────┬───────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ 残差连接 + RMSNorm │ │
│ └──────────────────────┬───────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ MoE FFN 层 │ │
│ │ │ │
│ │ ┌──────────────────────────────────────────────┐ │ │
│ │ │ Gate (Linear 5120→256) │ │ │
│ │ │ │ Top-8 路由 │ │ │
│ │ │ ▼ │ │ │
│ │ │ ┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐ │ │ │
│ │ │ │Exp 1│ │Exp 2│ │Exp 3│ ... │Exp 8│ │ │ │
│ │ │ └──┬──┘ └──┬──┘ └──┬──┘ └──┬──┘ │ │ │
│ │ │ │ │ │ │ │ │ │
│ │ │ └────────┴────────┴──────────┘ │ │ │
│ │ │ │ 加权求和 │ │ │
│ │ │ ▼ │ │ │
│ │ │ ┌────────────────────────┐ │ │ │
│ │ │ │ 共享专家 (Shared Expert)│ │ │ │
│ │ │ └───────────┬────────────┘ │ │ │
│ │ │ │ 相加 │ │ │
│ │ └────────────────┼────────────────────────────┘ │ │
│ └──────────────────────┬───────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ 残差连接 + 输出 │ │
│ └──────────────────────────────────────────────────────┘ │
│ │
└──────────────────────────────────────────────────────────────┘
四、DSA稀疏注意力与512K上下文
4.1 为什么需要稀疏注意力
标准全注意力机制(Full Attention)的计算复杂度为O(N²)。当上下文长度从4K扩展到512K时,计算量不是增长128倍,而是增长了约16,000倍。如果不做稀疏化,单是512K上下文的注意力矩阵就需要约1TB的显存。
dots3 note采用了一种混合注意力架构:13层DSA(Dots Sparse Attention)+ 33层SWA(Sliding Window Attention),比例约为1:3。
4.2 DSA工作原理
DSA的核心思想是"先选重点,再算细节",通过一个轻量级的Indexer(索引器)快速筛选出最相关的token,仅对这些token做完整的注意力计算。
import torch
import torch.nn.functional as F
class DSAttention(torch.nn.Module):
"""
Dots Sparse Attention (DSA) 简化实现
核心流程:
1. 使用轻量级 Indexer 计算所有 token 的索引分数
2. 选择 Top-2048 个最相关的 KV 条目
3. 仅对选中的条目进行标准 MLA 注意力计算
"""
def __init__(self, hidden_dim=5120, n_heads=64, head_dim=128,
index_n_heads=64, index_head_dim=128, index_topk=2048):
super().__init__()
self.hidden_dim = hidden_dim
self.n_heads = n_heads
self.head_dim = head_dim
self.index_topk = index_topk
# MLA: QKV 低秩投影
self.q_proj = torch.nn.Linear(hidden_dim, n_heads * head_dim, bias=False)
self.kv_proj = torch.nn.Linear(hidden_dim, 2 * head_dim, bias=False) # MLA共享KV
self.o_proj = torch.nn.Linear(n_heads * head_dim, hidden_dim, bias=False)
# DSA Indexer: 轻量级检索器
self.indexer = DSAIndexer(
hidden_dim=hidden_dim,
n_heads=index_n_heads,
head_dim=index_head_dim
)
def forward(self, x, attention_mask=None):
batch_size, seq_len, _ = x.shape
# 1. 计算 Q 和共享 KV
q = self.q_proj(x) # [B, S, n_heads * head_dim]
q = q.view(batch_size, seq_len, self.n_heads, self.head_dim)
kv = self.kv_proj(x) # [B, S, 2 * head_dim]
k, v = kv.chunk(2, dim=-1) # 共享单头 KV
k = k.unsqueeze(2) # [B, S, 1, head_dim]
v = v.unsqueeze(2) <


697

被折叠的 条评论
为什么被折叠?



