Inference Optimization

对 Batch 的理解

batch 的概念总能听到,而我们能普遍接触到的就是普通用户使用网页端大模型的这个视角

Distributed Parallel Strategies for Large Models

通信原语

原语输入输出
Broadcast一个rank有数据所有人一样一个 rank 把数据发送给所有其他 rank
Scatter一个rank有完整数据每人一部分一个 rank 给不同 rank 不同数据
Gather每人一部分一个rank完整所有 rank 发送数据给一个 rank
Reduce每人数据一个结果所有 rank 提供数据,经过某种操作(sum/max/min)后,只保留一个结果
All-Gather每人一部分所有人完整每个 rank 提供一份数据,最后所有 rank 都拿到完整数据
All-Reduce每人数据所有人相同结果先做 Reduce, 再把结果广播给所有 rank
Reduce-Scatter每人完整部分每人得到reduce后的shard先求和,然后切分发送
All-to-All每人切片发送每人重新组合每个 rank 把数据切片后分别发送给所有 rank,最后每个 rank 收集属于自己的那部分

具体功能效果见 parallemism method

Distributed Training and Reasoning Optimization of LLM

Sufficient memory: Can we go faster? 1

  1. 数据并行 (Data Parallelism - DP)

Memory is a constraint. What to do? 2. 模型并行 (Model Parallelism - MP)

  • 张量并行 (Tensor Parallelism - TP)
  • 流水线并行 (Pipeline Parallelism - PP)
  1. 序列与上下文并行 (Sequence & Context Parallelism)
  • 序列并行 (Sequence Parallelism - SP)
  • 上下文并行 (Context Parallelism - CP)
  1. 专家并行 (Expert Parallelism - EP)
  1. TPx (2D 张量并行 - 维1):将模型权重和输入数据在模型维度(hidden dimension)上进行切分 。
  2. TPy (2D 张量并行 - 维2):将输入数据在序列长度(sequence length)维度上进行切分,与 TPx 共同构成 2D 张量并行,减少冗余并提高内存效率 。
  3. SP (序列并行 - Sequence Parallelism):通过 AlltoAll 操作将切分维度从序列轴转置到注意力头(attention head)轴,使每个设备独立处理部分注意力头 。
  4. CP (上下文并行 - Context Parallelism):在处理长序列时,通过环形(ring-based)通信在多个设备间切分并同步序列上下文 。
  5. DP (数据并行 - Data Parallelism):将训练数据(mini-batch)切分到不同设备上,每个设备维护模型的一个副本(或通过 ZeRO 进行分片)并同步梯度 。
  6. PP (流水线并行 - Pipeline Parallelism):将模型的不同层(layers)分布在不同的设备阶段,数据以微批次(micro-batches)形式在层间流水化执行 。
  7. EP (专家并行 - Expert Parallelism):针对 MoE(混合专家)模型,将不同的专家分配到不同设备,每个 Token 根据路由算法发送至对应的专家进行计算 。

SP 和 CP 的主要区别在于 SP 需要切分权重

C++ Template

Metaprogramming 就是写一段程序,这段程序可以生成或者修改一段程序,Macro and Template 都是实现 Metaprogramming 的手段。

特化(specialization)和部分特化(Partial Specialization)或者说叫偏特化,都是为了让编译器明确执行路径或者说接口选择

Attention

从抽象层面来理解注意力的 QKV 计算,实际是为原始 token 序列生成了一个新的信息表示。这个过程分为两个步骤:

  1. QK 计算 token 间的相关性,这种相关性会通过注意力分数来体现
  2. 基于相关性对 V 中的数据求解加权平均

具体而言,从矩阵的角度来看,Q 的每一行是一个 token 的原始信息,与 $K^T$ 的计算结果则表征了原始的一个 token 对于其他 token 的关注程度(此时如果 K 中行序发生改变,则 $K^T$ 中列序将发生改变,那么 $QK^T$ 的计算结果中一个 token 对其他 token 的关注程度,这个“其他 token”的顺序是发生了变化的);考虑与 V 的计算,由于左乘矩阵每一行依然对应到原始 token,所以与 V 的计算结果每一行依然是原始 token 的信息(如果 K 中行序发生变化,那么 V 的行序也需要对应变化,即只需要保证 $QK^T$ 的列能够正确作为对应 token 信息的权重)

0%