小红书dots3 note开源深度解析:280B MoE多模态模型,内容平台入局开源大模型赛道

一、引言:内容平台的一次战略转身

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)  <
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bing.shao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值