签到成功

知道了

CNDBA社区CNDBA社区

大模型训练与推理中 常见的 数值精度格式 说明

2025-12-16 22:21 96 0 转载 大模型
作者: dave

在大模型(Large Language Models, LLMs)的训练与推理过程中,数值精度格式(Numerical Precision Format)是影响性能、显存、速度和模型质量的核心因素之一。随着模型规模从数十亿到数千亿参数,高效利用硬件资源变得至关重要。http://www.cndba.cn/cndba/dave/article/131782

以下是目前在大模型领域最常见、最实用的数值精度格式详解,涵盖其原理、优缺点及典型应用场景。


📊 一、主流数值精度格式总览

格式 全称 位宽 符号/指数/尾数 动态范围 精度 主要用途
FP32 IEEE 754 单精度浮点 32 bit 1 / 8 / 23 ±3.4×10³⁸ 基准训练
FP16 IEEE 754 半精度浮点 16 bit 1 / 5 / 10 ±6.5×10⁴ 推理、混合精度训练
BF16 Brain Floating Point 16 bit 1 / 8 / 7 ≈ FP32 中低(但稳定) 大模型训练首选
INT8 8 位整数 8 bit -128 ~ +127 推理量化
INT4 4 位整数 4 bit -8 ~ +7 极低 极致压缩(QLoRA、边缘部署)
NF4 NormalFloat 4-bit 4 bit 量化专用 自适应 优于 INT4 QLoRA 默认

💡 注:“尾数”决定精度,“指数”决定范围。BF16 牺牲尾数保指数,适合梯度计算;FP16 则相反。

http://www.cndba.cn/cndba/dave/article/131782


🔍 二、逐项详解

1. FP32(Float32)

  • 定义:标准 32 位浮点,科学计算基准。
  • 特点
    • 精度高,训练稳定;
    • 显存占用大(7B 模型 ≈ 28GB);
    • 计算慢(无 Tensor Core 加速)。
  • 用途
    • 小模型训练;
    • 混合精度训练中的主权重副本(Master Weights)。

优点:可靠;❌ 缺点:资源浪费。http://www.cndba.cn/cndba/dave/article/131782


2. FP16(Float16)

  • 定义:16 位浮点,广泛用于 GPU 加速。
  • 特点
    • 显存减半,Tensor Core 加速显著;
    • 易下溢(underflow):梯度接近 0 时变为 0,导致训练发散。
  • 解决方案
    • AMP(Automatic Mixed Precision)
      前向/反向用 FP16,权重更新用 FP32。
  • 用途
    • 推理部署(TensorRT、ONNX Runtime);
    • 消费级 GPU(如 RTX 4090)训练(需 AMP)。

⚠️ 不推荐单独用于大模型训练!


3. BF16(Bfloat16)

  • 定义:Google 提出,保留 FP32 的指数位,仅压缩尾数。
  • 特点
    • 动态范围 ≈ FP32 → 几乎不会下溢
    • 尾数仅 7 位 → 精度略低于 FP16,但训练更稳定
    • A100/H100/TPU 原生支持,速度接近 FP16。
  • 用途
    • 大模型训练事实标准(Hugging Face、DeepSpeed 默认 bf16=True);
    • 高稳定性微调(如 LoRA、全量 FT)。

最佳平衡点:显存减半 + 训练稳定 + 硬件加速。


4. INT8(8-bit Integer)

  • 定义:整数量化,将 FP32 权重映射到 -128~127。
  • 技术
    • 后训练量化(PTQ):训练后校准;
    • 量化感知训练(QAT):训练中模拟量化。
  • 特点
    • 显存降至 1/4(7B ≈ 7GB);
    • 校准数据集避免精度崩塌;
    • NVIDIA Turing+ 支持 INT8 Tensor Core。
  • 用途
    • 服务器/边缘设备推理(如 Triton Inference Server);
    • 对延迟敏感场景(如实时客服机器人)。

❌ 不可用于训练(梯度无法有效传播)。http://www.cndba.cn/cndba/dave/article/131782http://www.cndba.cn/cndba/dave/article/131782http://www.cndba.cn/cndba/dave/article/131782


5. INT4 / NF4(4-bit Quantization)

  • INT4:传统 4 位整数,均匀分布,不适合神经网络权重(权重呈非均匀分布)。
  • NF4(NormalFloat 4-bit)
    • 专为神经网络权重设计,基于正态分布分位数分配码点;
    • 在相同 bit 下比 INT4 信息损失更小
    • QLoRA 默认使用 NF4。
  • 关键技术
    • 分组量化(Group-wise Quantization):每 128 个权重一组,独立 scale;
    • 双重量化(Double Quantization):对 scale 再量化,省 0.5GB。
  • 用途
    • QLoRA 微调(4-bit 加载 + LoRA 更新);
    • 超低资源推理(手机、嵌入式设备)。

QLoRA 核心:存储用 NF4,计算转 BF16 → 显存极低 + 质量不降。http://www.cndba.cn/cndba/dave/article/131782


🧪 三、不同任务下的精度选择建议

任务类型 推荐精度 说明
从头训练(Pretraining) BF16 A100/H100 必选;消费卡用 FP16+AMP
全量微调(Full FT) BF16 保证收敛性
LoRA 微调 BF16 或 FP16 LoRA 本身轻量,精度影响小
QLoRA 微调 NF4(存储) + BF16(计算) 单卡 24GB 可跑 70B
高精度推理 FP16 平衡速度与质量
低延迟推理 INT8 / INT4 需校准,适用于固定 prompt 场景
边缘设备部署 INT4(AWQ/GPTQ) 结合 AWQ 等算法提升精度

🖥️ 四、硬件支持情况(2025)

硬件 FP16 BF16 INT8 INT4
NVIDIA A100 ⚠️(软件模拟)
NVIDIA H100 ✅(FP4 Tensor Core)
RTX 4090 ⚠️(无原生,可模拟) ⚠️(bitsandbytes 软件量化)
Google TPU v4/v5
华为 Ascend 910B ✅(自研量化)

💡 RTX 4090 虽不原生支持 BF16,但 PyTorch 可用 FP16 模拟,QLoRA 仍可运行。http://www.cndba.cn/cndba/dave/article/131782


✅ 五、总结:精度选择口诀

训练看稳定,BF16 是首选;
推理想速度,FP16 够均衡;
显存不够用,QLoRA 上 NF4;
边缘要部署,INT4 加校准。
http://www.cndba.cn/cndba/dave/article/131782


🔮 未来趋势

  • FP8(8-bit 浮点):NVIDIA H100 已支持,兼顾范围与精度;
  • 动态量化:根据层重要性自动分配 bit(如重要层用 INT8,其余用 INT4);
  • 训练即量化(Train-time Quantization):端到端低精度训练成为可能。

如需我提供:

http://www.cndba.cn/cndba/dave/article/131782

  • FP16 vs BF16 训练 loss 对比图
  • QLoRA 中 NF4 量化代码实现细节
  • 如何在 RTX 4090 上启用 BF16 模拟
用户评论
* 以下用户言论只代表其个人观点,不代表CNDBA社区的观点或立场
dave

dave

关注

人的一生应该是这样度过的:当他回首往事的时候,他不会因为虚度年华而悔恨,也不会因为碌碌无为而羞耻;这样,在临死的时候,他就能够说:“我的整个生命和全部精力,都已经献给世界上最壮丽的事业....."

  • 2297
    原创
  • 3
    翻译
  • 659
    转载
  • 199
    评论
  • 访问:9729479次
  • 积分:4557
  • 等级:核心会员
  • 排名:第1名
精华文章
    最新问题
    查看更多+
    热门文章
      热门用户
      推荐用户
        Copyright © 2016 All Rights Reserved. Powered by CNDBA · 皖ICP备2022006297号-1·

        QQ交流群

        注册联系QQ