d_model 是 Transformer 架构(LLM的基础)中一个至关重要的超参数, d_model 不是一个层,而是一个维度值,它定义了模型内部数据流的“宽度”或“通道大小” 。

你可以把它想象成一条贯穿整个模型的高速公路的“车道数量”。所有在模型中流动的数据(代表着每个词或token的信息)都必须被打包成一个固定大小的向量,这个向量的大小就是 d_model 。

如果 d_model = 4096 ,就意味着模型用一个包含4096个浮点数的列表(向量)来表示每一个token的全部语义、语法和上下文信息。

d_model 在LLM中的具体体现

让我们沿着一个token在Transformer中的旅程,看看 d_model 在哪些地方出现:

  1. 词嵌入层 (Token Embedding)

    • 起点 : 输入的每个词(token)最初只是一个数字ID(比如,“hello”是ID 5824)。
    • 作用 : 词嵌入层将这个ID转换成一个高维向量。这个向量的维度就是 d_model 。
    • 数据变化 : ID (一个数) -> Embedding Vector (一个[1, d_model]的向量) 。
    • 这是token信息的第一次“升维”,将离散的ID变成了包含丰富信息的连续向量。
  2. 位置编码 (Positional Encoding)

    • 作用 : 为了让模型知道词的顺序,一个与位置相关的向量被加到词嵌入向量上。这个位置编码向量的维度也必须是 d_model ,才能进行相加。
    • 数据变化 : [1, d_model] + [1, d_model] -> [1, d_model] 。数据宽度不变。
  3. 注意力层 (Attention Layer)

    • 这是最核心的部分。输入到注意力层的,是序列中每个token的 d_model 维向量。
    • Q, K, V 矩阵 : 为了计算注意力,模型需要为每个token生成Query (Q), Key (K), Value (V)三个向量。这是通过将输入的 d_model 维向量分别乘以三个权重矩阵 Wq , Wk , Wv 来实现的。
    • 关键点 : 这三个权重矩阵的尺寸通常是 [d_model, d_model] 。所以,输入一个 [1, d_model] 的向量,乘以 [d_model, d_model] 的矩阵,输出的Q, K, V向量维度仍然是 d_model 。
    • 多头注意力 (Multi-Head) : 在实践中, d_model 维的Q, K, V向量会被“劈开”成多个头( n_heads )。例如,如果 d_model=4096 , n_heads=32 ,那么每个头的维度 d_head 就是 4096 / 32 = 128 。注意力计算在这些128维的小向量上独立进行,这有利于模型关注到不同方面的信息。
    • 输出 : 多个头计算得到的结果会被拼接(concatenate)起来,重新变回一个 d_model 维的向量,然后再通过一个输出权重矩阵 Wo (尺寸也是 [d_model, d_model] )进行线性变换。
    • 结论 : 一个token的向量进入注意力层时是 d_model 维,经过复杂的计算后,输出时 仍然是 d_model 维 。
  4. 前馈网络 (Feed-Forward Network, FFN)

    • 作用 : 这是注意力层后面的另一个计算模块,用于增加模型的非线性能力。它通常由两个线性层组成。
    • 数据变化 :
      1. 第一个线性层将 d_model 维的向量 扩展 到一个更宽的“中间维度”(通常是 4 * d_model )。
      2. 第二个线性层再把它 压缩 回 d_model 维。
    • 数据流 : [1, d_model] -> [1, 4 * d_model] -> [1, d_model] 。
    • 结论 : FFN层的最终输出维度也是 d_model 。
  5. 层与层之间 (Layer-to-Layer)

    • 一个Transformer层(包含注意力和FFN)的输出,就是下一个Transformer层的输入。因为输入和输出的维度都是 d_model ,所以可以完美地堆叠几十上百层。

对芯片设计的影响和总结

  • 数据总线宽度 : d_model 直接决定了模型内部处理的基本数据单元的大小。在你的芯片设计中,这意味着从内存(HBM)到计算单元(MAC阵列)的数据通路的宽度需要高效地处理 d_model 维的向量。
  • 矩阵尺寸 : d_model 是决定权重矩阵大小的核心因素。 Wq, Wk, Wv, Wo 等矩阵都是 d_model x d_model 级别,FFN层的权重矩阵是 d_model x (4*d_model) 级别。 d_model 翻倍,这些矩阵的大小会翻4倍,计算量(FLOPs)也大致翻4倍。
  • KV Cache大小 : 正如我们之前讨论的,KV Cache中每个token的K和V向量维度都是 d_model 。因此, d_model 直接决定了KV Cache的内存占用,进而影响内存带宽瓶颈。

一句话总结 : d_model 就是LLM内部信息表示的 通用维度 和 主干道宽度 。它贯穿了从输入到输出的几乎所有关键计算步骤,是决定模型容量、计算复杂度和内存消耗的核心参数。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐