)
文章目录一、Llama结构和GLM 5.2结构区别1Llama 的结构大概长成这个样子2) GLM 5.2结构二、从第一层到最后一层一个 token 经历了什么2.1 Tokenizer 与 Embedding2.2 归一化Normalization与残差连接Residual Connection2.3 Attention 模块三、Mixture of ExpertMoE3.1 MoE 的整体结构3.2 专家的粒度3.3 共享专家3.4 负载均衡、Auxiliary Loss 与 Token Drop一、Llama结构和GLM 5.2结构区别1Llama 的结构大概长成这个样子在这张图中我们可以看到一个文本从变成 token 进入大模型、到变成概率分布输出的全过程。这张图可以当作是大模型结构的一张俯瞰图其中每个组件的细节我们在之后都会单独拿出来讲。那么从 2023 年到现在的三年时间里发生什么了呢大模型的结构有了翻天覆地的变化吗答案其实是并没有。2) GLM 5.2结构下面是最近几个月刚出来的 GLM5.2 的模型结构。虽然 GLM5.2 在 Reasoning、Coding、Agent 上都达到了相当高的水平和三年前的 Llama 完全不在同一个 level但是我们可以看到它在模型结构的设计上并没有太大的差别从上面两张图的对比我们可以看出今年的 GLM5.2 相比 2023 的 LLama 无非有两个明显的变化①一是把 attention 计算中的 GQA 换成了 DSAMLAMasked grouped-query attention②二就是使用了 MoE 结构把 FFN 层变成了多个专家。不了解这些名词不要紧今天的这篇文章会对这些结构进行讲解作用在这篇文章中我们会看到MLA 显著降低了推理时的 KV Cache 占用以 DSA 为代表的 Sparse Attention 计算方式降低了长序列的计算成本而MoE 用稀疏激活实现了模型容量与速度的分离能够在大幅提升速度的同时获得更大的模型容量。因此总的来说这几个改进其实都可以看作是在可接受的成本下持续放大模型能力而进行的“效率革命”。我认为这个是 LLM 模型结构不断演变的大趋势。我们在做模型结构实验的时候如果是比较关注模型实际效果的话大家会有这样一个共识loss 变化图的横轴不应该是 token 数而应该是时间。只要能在更短的时间内获得更好的效果更好的 loss 收敛性那么这样的改进就可以被认为是有效的解释①GQAMasked grouped-query attention这就是带因果遮罩的 Grouped-Query Attention分组查询注意力。不过图只写了 24 heads没有把 Q 头与 KV 头的分组关系画出来。Llama 3.2 3B 实际大致是Query heads24Key/Value heads8每3个 Query head 共享一组 K/V headQ1 Q2 Q3 ─→ KV1 Q4 Q5 Q6 ─→ KV2 ... Q22 Q23 Q24 ─→ KV8②FFN是“Feed forward” 模块它是一个带门控的前馈网络Llama 使用 SwiGLU FFN大致流程为输入 ├─ Linear → SiLU ─┐ └─ Linear ────────× ↓ Linear ↓ 输出二、从第一层到最后一层一个 token 经历了什么2.1 Tokenizer 与 EmbeddingTokenizer 将原始文本转换为模型可处理的 token 序列。Tokenizer 的设计不仅影响训推的效率也影响着模型对文本结构的理解。在算法上Byte Pair EncodingBPE及其变体是大部分主流 LLM 的选择。BPE 的核心思想是从最小单元字节/字符开始反复合并最频繁出现的相邻 token 对直到达到目标词表大小。BPE的核心思想是从最小单元字节/字符开始反复合并最频繁出现的相邻 token 对直到达到目标词表大小。Byte-level BPEBBPE是 BPE 的一个特定变种。它规定算法的起点必须是256 个单字节直接在 UTF-8 字节序列上操作。这样做的好处是能天然表示任何文本永远不会出现 OOVOut-of-Vocabulary问题因此对多语言更加友好。在使用工具上SentencePiece 和 tiktoken 是两个主流的软件库。SentencePiece是 Google 开发的一个多功能分词工具库。它内置了 BPE 和 Unigram 等多种算法。它的不依赖预分词把空格也当作一个普通字符用▁表示直接在原始文本流上进行操作。这使得它对所有语言尤其是中文、日文等不用空格分词的语言的处理流程完全一致。tiktoken是 OpenAI 开发的一个高性能 BPE 专用工具库。它专门为 Byte-level BPEBBPE这一种算法做了极致的工程优化核心用 Rust 编写速度极快。与 sentencepiece 不同的是tiktoken 会先用一个精心设计的正则表达式将文本切分成不同的块比如把单词、数字、标点分开BPE 的合并操作不会跨越这些块的边界。tiktoken 本质上是 BBPE 算法的一个标准的、快速的实现。但 tiktoken 的训练器本身并不高效所以很多团队是用其他工具如 HuggingFacetokenizers训练出词表和合并规则再转换成 tiktoken 格式来使用其高速的推理能力。有一些量化的指标可以用来衡量 tokenizer 的优劣比如 fertility 和 parityFertility衡量的是一个词平均被拆分成多少个 token。英文通常在 1.0-1.5而中文在差的 tokenizer 上甚至可达到 4-6。Parity对等性衡量的是跨语言 token 数量的对等程度准备一份多语言平行语料同一个意思的句子有各语言版本用同一个 Tokenizer 对它们进行分词计算每种语言产生的 token 数量然后算出所有语言 token 数量的差异度。parity 差意味着某些语言的文本总会被拆成更多 token。API 按 token 计费时说中文、日语、阿拉伯语等用户要付的钱比说英语的多好几倍。在拿到一段文本之后首先用 tokenizer 将它分成 token 序列然后输入 Embedding Layer就得到了这句话的向量表示。这就是 token 进入 LLM 的第一层——token embedding layer 做的事情。2.2 归一化Normalization与残差连接Residual Connection2.3 Attention 模块三、Mixture of ExpertMoE3.1 MoE 的整体结构3.2 专家的粒度3.3 共享专家3.4 负载均衡、Auxiliary Loss 与 Token Drop