1. 分布式训练相关
- 数据并行(Data Parallelism)
- 将训练数据分片到多个设备(GPU/TPU),每个设备持有完整的模型副本,独立计算梯度后同步更新。
- 典型实现:PyTorch
DistributedDataParallel
(DDP)、TensorFlowMirroredStrategy
。
- 模型并行(Model Parallelism)
- 将模型拆分到多个设备上(如按层拆分),每个设备仅负责部分计算。
- 典型场景:训练超大模型(如GPT-3、PaLM)。
- 工具:Megatron-LM、DeepSpeed。
- 流水线并行(Pipeline Parallelism)
- 将模型按层划分为多个阶段(stage),不同设备处理不同阶段,通过微批次(micro-batch)隐藏通信开销。
- 典型实现:GPipe、PipeDream。
- 参数服务器(Parameter Server)
- 分布式架构中的中心化参数管理节点,负责存储和更新模型参数,其他节点计算梯度并推送至服务器。
- 缺点:通信瓶颈明显,逐渐被AllReduce取代。
- Ring AllReduce
- 高效的分布式梯度同步算法,各设备组成环形拓扑,分两步(Scatter-Reduce、AllGather)完成梯度聚合。
- 优点:通信开销与设备数量无关,适合大规模集群。
- 支持框架:Horovod、PyTorch DDP。
2. 显存优化技术
- ZeRO(Zero Redundancy Optimizer)
- 微软DeepSpeed提出的显存优化技术,通过分片模型参数、梯度和优化器状态,消除多卡间的冗余存储。
- 三个阶段:
- ZeRO-1:优化器状态分片
- ZeRO-2:梯度分片
- ZeRO-3:参数分片(支持训练万亿参数模型)。
- 梯度检查点(Gradient Checkpointing)
- 通过在前向传播中丢弃部分中间结果,反向传播时重新计算,以显存换时间。
- 显存节省:可达70%,但训练速度降低约20%。
- 混合精度训练(Mixed Precision Training)
- 使用FP16计算(加速)和FP32存储(避免数值溢出),结合动态损失缩放(Loss Scaling)。
- 硬件依赖:需支持Tensor Core(如NVIDIA V100/A100)。
- 激活重计算(Activation Recomputation)
- 类似梯度检查点,但仅针对激活值(activations)进行重计算。
3. 参数高效训练技术
- LoRA(Low-Rank Adaptation)
- 冻结预训练模型参数,仅训练低秩分解的适配矩阵(Adapter),大幅减少可训练参数。
- 典型应用:大模型微调(如LLaMA-Adapter)。
- Prefix Tuning
- 在输入序列前添加可学习的“前缀向量”,通过调整前缀微调模型行为。
- Adapter Layers
- 在Transformer层中插入小型全连接网络,仅训练这些适配层。
4. 训练加速技术
- 梯度累积(Gradient Accumulation)
- 将多个小批次的梯度累加后再更新参数,模拟大批次训练,节省显存。
- 动态批处理(Dynamic Batching)
- 根据输入序列长度动态调整批次大小,最大化GPU利用率。
- Flash Attention
- 通过优化注意力计算的内存访问模式,加速Transformer训练和推理。
- 速度提升:2-4倍(针对长序列场景)。
5. 其他关键术语
- MoE(Mixture of Experts)
- 将模型拆分为多个专家子网络,每层根据输入动态选择激活的专家。
- 代表模型:Switch Transformer、GLaM。
- 张量并行(Tensor Parallelism)
- 将矩阵运算拆分到多卡(如按行或列分片),属于模型并行的一种。
- 典型实现:Megatron-LM中的Transformer层分片。
- 3D并行(数据+流水线+模型)
- 结合数据并行、流水线并行和模型并行,用于训练超大规模模型(如PaLM)。
- Checkpointing
- 定期保存模型状态(参数、优化器状态等),防止训练中断后从头开始。
- Warmup & 学习率调度
- Warmup:训练初期逐步增大学习率,避免梯度不稳定。
- 调度策略:余弦退火、线性衰减等。
- BF16(Brain Floating Point)
- 一种16位浮点格式(相比FP16动态范围更大),适合大模型训练(如Google TPU支持)。
6 推理相关
- Prefill阶段:也叫prompt或者全量推理阶段,是对用户传入的输入第一次进行推理的阶段。该阶段的输入是用户传入的完整长度的语句。
- Decoder阶段:也叫增量推理阶段,基于Prefill阶段的输出进行迭代推理的阶段。由于该阶段每次迭代的输入都是上一次推理的输出,所以叫做增量推理。
- PD分离:也就是Prefill阶段和Decoder阶段分离执行。
- KV Cache:KV Cache其实是在大语言模型中使用的一种技术,用于缓存已经计算过的Key和Value,避免在每一步生成过程中重复计算整个上下文。本文代指计算完的Key和Value缓存。
- PagedAttention:简称PA。简单说是一种使用离散block的方式管理请求KV Cache的功能,相比未使用此功能的框架而言,能够达到节省KV Cache内存占用大小的效果。
- block_table:在PA场景下,表示请求KV Cache占用的block index的集合。
- 请求:可以理解为用户提的问题,该问题经过Prefill和Decoder阶段会有对应的回答,我们称这个过程为一次请求。
- role:表示LLM-DataDist代表的业务角色。业务角色分为Prefill和Decoder两种。
- cluster_id:表示LLM-DataDist所在的集群标识。主要用于Decoder侧通过cluster_id找到对应链路,从而找到Prefill侧缓存的对应请求的KV Cache。对于一个模型的不同切分部署到不同device的场景,当前在支持PD对等切分场景下,cluster_id在不同切分模型间设置一样。
- 集群动态扩缩容:根据业务闲忙,动态的调整集群的数量以及PD集群的配比,从而达到闲时节省资源,忙时提高吞吐的目的。
- D2D传输:指数据从Device设备往Device设备传输
- D2H传输:指数据从Device设备往Host设备传输
- H2D传输:指数据从Host设备往Device设备传输