目录

  1. 混合精度训练
  2. 并行优化(DP/TP/PP/EP)
  3. 量化技术
  4. VLLM实践

1. 混合精度训练

混合精度训练的核心是通过分层使用低精度(BF16/FP16)与高精度(FP32) ,在保证模型收敛精度的前提下,降低显存占用、提升计算吞吐量,解决大模型训练的硬件资源限制。

1.1 混合精度训练的背景:大模型显存需求

丰语8B-base模型预训练为例,FP32精度下的显存占用远超单卡容量,成为训练瓶颈:

显存占用项 计算逻辑 显存大小(FP32) 说明
模型参数 8B参数 × 4字节/参数 32GB 模型核心权重存储
梯度 与模型参数同规模 32GB 反向传播生成的梯度值
优化器状态(Adam) 2×模型参数规模(动量+二阶矩) 64GB Adam优化器需存储额外状态
激活值 通常为参数规模的2-3倍 64-96GB 与batchsize、序列长度正相关
总需求 —— 224GB 单卡(如A800-80G)无法满足
需求 硬件限制
丰语-8B-base:224GB 单卡显存(A800):80GB

1.2 混合精度训练的硬件基础

NVIDIA A800的Tensor Core是混合精度计算的核心硬件支撑,专为低精度计算优化:

  • 计算吞吐量:FP16/BF16 吞吐量达 192 TFLOPS,是 FP32(24 TFLOPS)的 8倍
  • 混合计算支持:通过 HMMA(混合矩阵乘法累加)指令,原生支持 FP16/BF16 与 FP32 的混合运算,兼顾精度与速度。

1.3 混合精度训练的难点:数值不稳定性

降低精度会导致数值范围缩小,引发三类核心问题:

  1. 梯度下溢:BF16/FP16的最小正值有限(如BF16最小正值为1.17e-38),小梯度值会被截断为0,导致模型无法收敛;
  2. 权重更新异常:精度损失累积会导致权重更新偏离最优方向,最终影响模型精度;
  3. 激活值溢出:Softmax、LayerNorm等操作中可能出现数值爆炸(如激活值超出低精度表示范围)。

1.4 混合精度训练的核心策略

1.4.1 精度分层策略

根据训练环节的精度需求,分层选择数据类型,平衡精度与效率:

训练环节 采用精度 选择原因
模型权重 BF16 权重是模型核心参数,BF16精度足以保留关键信息
梯度 BF16 梯度值通常比权重大1-2个数量级,配合损失缩放可避免下溢
优化器状态 FP32 优化器(如Adam)需累积微小更新,FP32保证更新精度
前向激活值 BF16 激活值为中间结果,低精度不影响最终收敛
1.4.2 损失缩放:解决梯度下溢

针对BF16/FP16梯度下溢问题,通过“放大损失-还原梯度”两步操作:

  1. 损失放大:将损失值乘以缩放因子(如1024),成比例放大梯度,确保梯度值落在低精度的有效表示范围内;
  2. 梯度还原:反向传播计算完成后,将梯度除以缩放因子,还原为真实梯度值,避免影响权重更新。

1.5 丰语大模型混合精度训练实践

基于上述策略,丰语8B模型通过混合精度训练将显存占用从224GB降至80GB以内(A800单卡可承载),同时通过损失缩放和精度分层,保证预训练精度与FP32训练基本一致。

2. 并行优化(DP/TP/PP/EP)

并行优化通过“拆分模型或数据”,将大模型训练/推理任务分配到多GPU上执行,突破单卡显存与计算能力限制,核心分为四类并行方式。

2.1 数据并行(Data Parallel, DP)

核心原理:“复制模型,拆分数据”
  1. 模型复制:将完整模型复制到每张GPU上,每张GPU持有一份模型副本;
  2. 数据拆分:输入数据按batch维度平均分配到各GPU(如batch=128,4张GPU各处理32个样本);
  3. 梯度同步:反向传播后,通过Ring AllReduce算法聚合所有GPU的梯度,统一更新所有模型副本,确保各副本参数一致。
优缺点与适用场景
  • 优点:实现简单,无需修改模型结构;
  • 缺点:存储冗余(每张GPU存完整模型),显存占用高;
  • 适用场景:多机多卡训练、模型规模较小(单卡可容纳完整模型)的场景。

2.2 张量并行(Tensor Parallel, TP)

核心原理:“矩阵分块,并行计算”

张量并行的本质是将Transformer层中的矩阵运算(如QKV注意力、线性层)分块到多GPU,通过局部计算+通信聚合实现并行,突破单卡显存限制:

  1. 权重分块
    • Q/K/V权重矩阵(如W ∈ R^(h×h))按列维度切分(如2张GPU,各持有W1 ∈ R^(h×h/2)W2 ∈ R^(h×h/2));
    • 线性层B权重矩阵按行维度切分,与前一步输出的分块矩阵匹配;
  2. 局部计算:各GPU用本地分块权重与输入数据做矩阵乘法,得到局部结果(如Y1Y2);
  3. 结果聚合:通过Ring-AllReduce将各GPU的局部结果相加,得到完整矩阵运算结果(如Z = Z1 + Z2)。
关键参数与适用场景
  • Transformer层参数b(batchsize)、S(sequence_length)、h(hidden_size)、h'=4h(FFN层中间维度)、N(GPU数量);
  • 适用场景:大模型训练/推理(如7B、13B模型),单卡无法容纳完整Transformer层的场景。

2.3 流水线并行(Pipeline Parallel, PP)

核心原理:“按层切分,流水执行”

将模型按层(或多层组)切分到不同GPU,数据以流水线方式在GPU间流动,通过“微批次重叠”减少GPU空闲时间:

  1. 模型切分:将Transformer模型拆分为多个层组(如Layer1-4、Layer5-8),每个层组部署在一张GPU;
  2. 微批次拆分:将每个数据batch拆分为多个Micro-batches(如batch=128拆分为8个Micro-batch=16);
  3. 流水执行:前一个Micro-batch完成当前GPU层组计算后,立即传递到下一张GPU,同时当前GPU开始处理下一个Micro-batch,实现“计算-通信重叠”。
进阶优化:交错式流水线并行(PipeDream)

在微批次流水线基础上,让不同GPU交替处理forward与backward

  • 当GPU4完成Micro-batch1的forward后,立即执行其backward;
  • 同时允许GPU1-3继续处理后续Micro-batch的forward,进一步减少“流水线气泡”(GPU空闲时间)。
适用场景:超大规模模型(如100B+),需跨多GPU切分模型层的场景。

2.4 专家并行(Expert Parallel, EP)

核心原理:“MoE架构+专家拆分”

基于混合专家模型(MoE),将模型中的FFN层替换为多个“专家网络”,通过门控分配样本到专家,实现并行:

  1. 门控计算:对输入样本x,通过门控网络(权重矩阵W)计算样本分配到各专家的权重,经Softmax后取前k个(通常k=12)最大权重的专家;
  2. 专家并行
    • 门控网络复制到每张GPU;
    • 专家网络独立部署在不同GPU(如16个专家分布在4张GPU,每张GPU4个专家);
  3. 结果聚合:选中的k个专家输出加权和,作为MoE层的最终结果。
优缺点与适用场景
  • 优点:支持更多专家网络(数量与GPU数量正相关),提升模型容量;
  • 缺点:需额外通信(样本分配与结果聚合);
  • 适用场景:MoE架构模型(如GPT-4 MoE、Qwen-MoE),需通过多专家提升模型能力的场景。

3. 量化技术

量化通过将模型权重/激活值从FP32/BF16转换为低精度(如INT4、INT8),减少显存占用、提升推理速度,核心分为三类方法。

3.1 预训练后量化(Post-Training Quantization, PTQ)

核心流程:训练后校准量化

无需重新训练,通过“校准数据集统计分布”确定量化参数,实现低精度转换:

  1. 数据校准:用少量校准数据集(如100-1000个样本)前向传播,统计模型权重和激活值的分布(如最小值、最大值、均值);
  2. 量化参数计算:根据分布确定量化参数——scale(缩放因子)和zero_point(零点),将浮点数映射到整数范围;
  3. 低精度转换:用量化参数将权重/激活值转换为低精度(如INT4/INT8)。
量化粒度

根据分组粒度不同,平衡精度与效率:

  • Per-tensor:整个张量共享一个scalezero_point,速度快但精度损失大;
  • Per-channel:按张量的通道维度分组(如QKV权重的每个头为一个通道),精度高但计算稍复杂;
  • Per-group:按自定义分组(如128个元素一组),兼顾精度与速度;
  • Per-token:按输入token维度分组,精度最高但计算开销大。

3.2 激活感知量化(Activation-Aware Quantization, AWQ)

核心思想:“保留关键权重,降低精度损失”

通过分析激活值对权重的影响,仅对“非关键权重”量化,核心权重保留高精度:

  1. 激活值统计:前向传播计算所有层的激活值,记录每个权重对应的激活值分布(均值、最大值、绝对值之和);
  2. 关键权重筛选:计算权重分数(权重值 × 激活值绝对值之和),按分数排序,选取前0.1% 的权重作为“关键权重”;
  3. 混合精度量化
    • 非关键权重:采用INT4量化(Per-group粒度);
    • 关键权重:保留FP16精度,避免影响模型输出。
精度表现
  • Qwen2.5-7B模型:INT4 AWQ在MMLU任务上准确率74.8%,仅比FP16低1%;
  • Qwen2.5-72B模型:INT4 AWQ精度损失<2%,兼顾显存与精度。

3.3 梯度优化量化(GPTQ)

核心思想:“梯度下降调整量化参数”

通过梯度计算权重对模型输出的影响,针对性优化量化参数,控制精度损失:

  1. 误差评估:计算每个权重对模型输出的贡献(梯度),确定权重的“重要性”;
  2. 差异化误差控制
    • 重要权重(如Q头权重):量化误差控制在0.02以内;
    • 非重要权重(如FFN层权重):量化误差放宽到0.05;
  3. 分组量化group_size与模型头维度一致(如Qwen3的head_dim=128),每个分组共享一个scale,平衡精度与速度。

4. VLLM实践

VLLM(Very Large Language Model Serving)是大模型推理优化框架,通过KV缓存、张量并行等技术提升推理效率,以下为具体应用与参数调优实践。

4.1 VLLM在AI寄件场景的应用案例

4.1.1 推理请求参数优化:降低网络与显存开销
  1. 存储优化:将图片预先转存至火山云VEPFS(分布式文件系统),供多个算法共享,避免重复传输;
  2. 读图优化:修改VLLM源码,支持直接从VEPFS读取图片,替代base64编码传图,减少网络带宽占用(base64传图会增加30%+带宽开销)。

4.2 VLLM参数调优思路(以AI寄件为例)

4.2.1 生成token数限制:避免无效资源占用

根据业务场景限制模型生成token数,防止输出循环或冗余:

  • 意图识别模型:SFT后仅输出1个字母(如“A”“B”),max_token=1
  • 实体抽取模型:根据实际抽取需求,max_token=64(足够覆盖地址、手机号等实体)。
4.2.2 采样参数优化:平衡稳定性与多样性

根据模型特性与业务需求调整采样参数:

  • Qwen系列模型(SFT后):意图分类、实体抽取需稳定输出,设置temperature=0top_k=1
  • DeepSeek R1模型:原生模型易输出循环,设置temperature=0.7,提升多样性。
4.2.3 图像预处理参数优化:减少输入token

针对多模态模型(如Qwen2.5-VL),优化图像输入以降低token数:

  • 图像像素限制:AI寄件场景输入为手机照片,限制最大像素数为2000万(与多数手机默认像素匹配),减少图像编码后的token数;
  • 切分数量控制:InternVL系列模型针对分类任务,设置图片切分数量=1(仅输入缩略图),避免多切分增加token。
4.2.4 KV缓存与并行优化:提升并发能力
  1. KV缓存预分配:根据输入输出token数设置max-model-len(AI寄件场景max-model-len=10240),降低单请求KV缓存占用,支持128并发请求;
  2. 并行方式选择:7B模型单卡推理性能满足需求,优先“扩实例”而非TP/PP,提升并发能力;
  3. 长输入优化:开启enable-chunked-prefill,将长输入(AI寄件平均5000+ token)的prefill阶段打散,缓解decode阶段阻塞。

4.3 VLLM在长文本场景的参数调优

针对长文本输入/输出场景(如多轮对话、长文档理解),关键参数设置:

  • --gpu-memory-utilization 0.85:预分配GPU显存上限为85%,预留缓冲区避免显存溢出;
  • --quantization awq:使用AWQ量化,减少显存占用(INT4比FP16显存占用降低75%);
  • --kv-cache-dtype fp8:KV缓存用FP8精度,平衡显存与精度;
  • --enable-prefix-caching:复用多轮对话中相同前缀的KV缓存,减少重复计算。
Logo

更多推荐