GGML计算基础:矩阵的基本运算

🕒 2026-01-20 📁 推理框架 👤 laumy 🔥 82 热度

矩阵相乘

是神经网络中算力消耗最大的部分,通常占据 LLM 推理计算量的 95% 以上。

矩阵乘法 (Matrix Multiplication / GEMM)

这是最通用的矩阵运算形式,也是 AI 芯片中 Tensor Core 或 MAC 阵列的主要工作内容。

  • 定义
    设矩阵 A 的形状为 (M \times K),矩阵 B 的形状为 (K \times N),则它们的乘积 C = A \times B 的形状为 (M \times N)
  • 计算公式
    目标矩阵中第 i 行第 j 列的元素,等于 A 的第 i 行与 B 的第 j 列的对应元素乘积之和:

    C_{ij} = \sum_{k=1}^{K} A_{ik} \cdot B_{kj}

  • 工程视角

    • 维度约束:左矩阵的列数 (K) 必须等于右矩阵的行数 (K)。这个 K 维度在运算中会被“消掉”(Reduction)。
    • LLM 应用:全连接层 (Linear Layers)、注意力机制中的 Q/K/V 投影。
    • 硬件特性:典型的计算密集型算子。优化的核心在于提高数据复用率(Data Reuse),减少从 HBM/DRAM 读取数据的次数。

向量点积 (Vector Dot Product)

在数学上,点积是矩阵乘法的一种特例;在物理意义上,它是衡量相似度的工具。

  • 定义:两个同维度向量 \vec{a}\vec{b} 的运算。
  • 计算公式:

\vec{a} \cdot \vec{b} = \sum_{i=1}^{n} a_i b_i

  • 结果:结果是一个标量 (Scalar),即一个单纯的数值。

  • 工程视角

    • 几何意义:反映两个向量方向的一致性。方向越接近,点积越大。
    • LLM 应用:Self-Attention 的核心逻辑。虽然代码实现通常是批量矩阵乘法 (Q \times K^T),但其数学本质是计算 Query 向量与 Key 向量的点积来获得注意力分数。

逐元素运算 (Element-wise Operations)

这类运算的特点是不改变矩阵形状,且计算之间互不依赖。它们通常对算力要求不高,但对显存带宽极其敏感。

逐元累积 (Hadamard Product)

常被称为 “Element-wise Product”。

  • 定义
    两个形状完全相同的矩阵 AB 进行运算。
  • 计算公式

(A \odot B)_{ij} = A_{ij} \times B_{ij}

  • 工程视角
    • LLM 应用
    • 门控 (Gating):如 LLaMA 使用的 SwiGLU 激活函数,通过逐元素相乘来控制信息通过量。
    • 掩码 (Masking):在 Attention 矩阵中,将不需要关注的位置乘以 0(或加负无穷)。

加法与减法

  • 定义
    两个形状相同的矩阵对应位置相加或相减。
  • 计算公式
    (A \pm B)_{ij} = A_{ij} \pm B_{ij}
  • 工程视角
    • LLM 应用
    • 残差连接 (Residual Connection)X + \text{Layer}(X)。这是深层网络能够训练的关键。
    • 偏置 (Bias)Y = XW + b
    • 硬件特性:典型的 Memory Bound 操作。因为每个数据读进来只做一次简单的加法就写回去了,算术强度(Arithmetic Intensity)极低。

标量乘法 (Scalar Multiplication)

  • 定义
    一个单独的数值 \lambda 乘以矩阵中的每一个元素。
  • 计算公式

(\lambda A)_{ij} = \lambda \cdot A_{ij}

  • 工程视角
    • LLM 应用
    • 缩放 (Scaling):Attention 中的 \frac{QK^T}{\sqrt{d_k}},防止点积数值过大导致 Softmax 梯度消失。
    • 归一化 (Normalization):LayerNorm 中的 \gamma 参数本质上也是一种特定维度的缩放。

结构变换 (Structural Transformations)

这类操作通常不涉及数值的改变,而是改变数据的排列方式索引方式

转置 (Transpose)

  • 定义
    将矩阵的行和列互换。
  • 公式
    (A^T)_{ij} = A_{ji}
  • 工程视角
    • LLM 应用:多头注意力机制 (Multi-Head Attention) 中,为了并行计算多个头,需要频繁进行 (Batch, Seq, Head, Dim) 到(Batch, Head, Seq, Dim) 的维度置换(Permute,广义的转置)。
    • 硬件挑战:转置意味着非连续的内存访问。在硬件设计中,通常需要专门的 Transpose Engine 或者利用 SRAM/寄存器文件进行巧妙的数据混洗,否则会严重导致 Cache Miss。

广播 (Broadcasting)

这是工程实现中极为重要的机制,允许不同形状的张量进行算术运算。

  • 定义
    当两个矩阵形状不匹配时,自动将较小的矩阵在特定维度上进行逻辑上的复制,使其与大矩阵形状一致,再进行运算。

  • 规则

    1. 从最后面的维度开始对齐。
    2. 如果某个维度大小为 1,则可以扩展到任意大小。
  • 工程视角
    • 例子:矩阵 A(100 \times 256) 加上向量 b(1 \times 256)。系统会将 b 在第 0 维复制 100 次。
    • 硬件优势:优秀的 SDK 或 NPU 设计支持“隐式广播”,即不需要真的在内存中复制数据,只需利用 Stride(步长)为 0 的寻址方式重复读取同一个数据,从而节省大量的显存带宽。

发表你的看法

\t