知识全景图/ 软件工程与系统/ 人工智能全景图/ Mixed Precision / Numerical Precision / Kernels

Mixed Precision、数值精度与 Kernel 底层图谱

从 FP32、FP16、BF16、FP8、INT8 / INT4、loss scaling、overflow / underflow、kernel fusion、FlashAttention 到 profiler,理解模型计算怎样贴着硬件跑

阅读定位: 这一页补 AI 底层理解线里的“数值与执行层”。它不替代 张量 / 自动微分 / 计算图,后者解释 tensor、operator 和 autograd;也不替代 优化器 / Loss / 训练稳定性,后者解释训练动力学;也不替代 AI Infra / GPU模型压缩 / 量化请求 TraceAI 证据包索引。本页专注解释 dtype、数值范围、低精度、kernel 和内存访问怎样共同决定训练是否稳定、推理是否快、量化是否伤质量,以及这些底层差异怎样进入线上排障证据。
一、从张量到 Kernel 的执行链
Tensor
shape / dtype / layout
Operator
matmul / softmax / norm
Kernel
CUDA / Triton / cuDNN
Hardware
Tensor Core / HBM
Numerics
overflow / rounding
Behavior
loss / logits / latency
层级它控制什么常见问题继续看
Tensor dtype数值范围、精度、显存占用和硬件路径溢出、下溢、舍入误差、dtype 混用张量 / 自动微分
Tensor layout内存排列是否适合连续访问非 contiguous、隐式拷贝、转置后慢 kernelAI Infra / GPU
Operator模型数学语义:矩阵乘、softmax、norm、activation算子碎、数值不稳定、动态 shape 难优化Norm / Residual
Kernel真正跑在 GPU / NPU 上的低层程序launch 开销、带宽浪费、没有 fusion、版本不兼容模型服务 / 网关
Profiler告诉你时间和显存花在哪里只凭直觉优化,结果优化错瓶颈成本 / 性能
一句话:

模型代码里的一个 matmul,最终不是抽象数学在运行,而是某种 dtype、某种内存布局、某个 kernel、某条硬件路径和某组数值误差一起在运行。

二、常见数值格式速查
格式直觉优势风险 / 边界
FP32传统训练里的高精度浮点范围和精度都稳,调试基准可靠显存和带宽成本高,Tensor Core 路径不一定最优
TF32NVIDIA 上给 FP32 matmul 的 Tensor Core 快路径多数训练不用改代码就能加速精度低于真正 FP32,极敏感任务要验证
FP16低精度浮点,显存低、吞吐高训练和推理都常用,Tensor Core 支持成熟数值范围窄,容易 overflow / underflow,常要 loss scaling
BF16接近 FP32 的指数范围,但尾数更短比 FP16 更不容易溢出,大模型训练常用尾数精度低,细微差异可能损失
FP8进一步降低 bit 的浮点格式新硬件上训练 / 推理吞吐和显存优势明显需要缩放、校准和硬件 / 框架支持,稳定性更依赖工程
INT8整数低精度量化推理部署成熟,显存和带宽更省校准数据、激活离群值和任务敏感性很关键
INT4 / NF4更激进的 4 bit 权重量化本地部署、LoRA 微调和端侧场景很有用质量退化更明显,kernel 和格式生态决定实际收益

范围和精度不是一回事

FP16 的尾数还可以,但指数范围窄,容易溢出;BF16 的指数范围像 FP32,更抗溢出,但尾数更短。很多大模型训练偏爱 BF16,是因为它在稳定性和性能之间更省心。

三、Mixed Precision:哪些东西低精度,哪些东西保高精度
对象常见精度为什么这样风险
Forward matmulFP16 / BF16 / FP8大部分 FLOPs 在矩阵乘,低精度能吃 Tensor Core激活范围异常时可能溢出或失真
AccumulationFP32 或更高精度累加大量乘加会放大舍入误差,累加更敏感累加精度不足会伤 loss 和 logits
Master weightsFP32 / BF16参数更新要保留更稳定的权重状态只保低精度权重可能让更新噪声变大
GradientsFP16 / BF16 + scaling 或 FP32省显存和通信,但梯度可能很小underflow、NaN、梯度爆炸
Optimizer statesFP32、BF16 或低精度 optimizerAdam 动量和二阶统计很吃内存,也很影响稳定性低精度状态可能改变收敛行为
LayerNorm / Softmax常保更高精度或用稳定 kernel归一化和指数运算数值敏感低精度 softmax 可能导致概率分布异常
实用判断:

Mixed precision 不是“全都换成低精度”,而是把高吞吐路径交给低精度,把最容易造成数值灾难的位置保留更稳的精度。

四、Overflow、Underflow、Rounding:训练崩坏的数值根源
问题发生什么外部症状治理动作
Overflow数值超过 dtype 可表示范围,变成 Inf 或 NaNloss NaN、gradient norm 爆炸、logits 异常大降学习率、gradient clipping、BF16、稳定 softmax、监控激活范围
Underflow很小的数被低精度截成 0梯度消失、训练停滞、小概率 token 信号丢失loss scaling、保留高精度累加、检查梯度分布
Rounding Error连续数被舍入到粗刻度量化后某些任务掉分、logprob 排序改变校准、混合精度、敏感层保高精度、任务回归
Catastrophic Cancellation接近的数相减导致有效精度丢失归一化、方差、loss 计算不稳定稳定公式、epsilon、框架内置高质量 kernel
Non-determinism并行规约顺序不同导致结果微小差异同配置重复跑有小差别,边界样本结果漂移固定 seed、确定性 kernel、容忍数值误差区间
最大坑:

把 NaN 当作“模型玄学”。大多数 NaN 都能从学习率、坏 batch、梯度爆炸、低精度溢出、softmax / norm 数值不稳和异常 kernel 路径里找到证据。

五、Loss Scaling 与梯度稳定
为什么需要 loss scaling
  • FP16 下很多梯度太小,可能下溢成 0
  • 把 loss 放大后再 backward,让梯度进入可表示范围
  • 更新前再把梯度缩回去
动态 loss scaling
  • 没有 overflow 时逐渐增大 scale
  • 检测到 Inf / NaN 时降低 scale 并跳过危险 step
  • 让训练在速度和稳定之间自动找窗口
BF16 为什么省心
  • BF16 指数范围大,不太需要 loss scaling
  • 很多大模型训练默认用 BF16 是为了减少数值事故
  • 但 BF16 不是无损,仍要看任务和硬件支持
六、Kernel:性能问题常藏在数学公式下面
Kernel 类型负责什么优化点常见风险
GEMM / MatMulLinear、QKV、MLP、LM head 的核心计算Tensor Core、tiling、低精度、batchingshape 不友好、dtype 不匹配、没有吃到快路径
Softmaxattention 权重和概率归一化数值稳定、block 级规约、融合overflow、长序列显存读写重
LayerNorm / RMSNorm尺度控制和归一化融合、减少读写、高精度统计低精度统计导致尺度漂移
ActivationGELU、SiLU、SwiGLU 等非线性和 matmul / elementwise 融合小 kernel 过多导致 launch 开销
Attention KernelQK、softmax、V 聚合FlashAttention、减少中间矩阵落显存mask、长上下文、dtype 和版本兼容
Quantized Kernel低 bit 权重 / 激活的推理执行dequant 融合、group size、硬件指令格式支持不一致,理论压缩不等于真实加速

Kernel fusion 的直觉

GPU 很快,但从显存反复读写很贵。把多个小算子融合成一个 kernel,可以减少中间张量落显存、减少 kernel launch 开销,也能让数据在更靠近计算单元的地方停留更久。

七、FlashAttention 为什么重要
普通 Attention 痛点FlashAttention 思路收益边界
QK 矩阵随序列长度平方增长,中间结果很吃显存分块计算 attention,不把完整 attention matrix 写回 HBM长上下文 prefill 更省显存、更快不同 mask、dtype、硬件和框架版本影响可用性
Softmax 需要数值稳定处理在线 softmax 维护 max / sum,保证分块结果等价减少 overflow 风险,同时降低读写实现复杂,调试难度高
内存带宽而不是 FLOPs 成为瓶颈提高数据复用,减少 HBM 访问让 attention 更贴近硬件有效路径不代表所有模型瓶颈都会消失
理解方式:

FlashAttention 不是换了 attention 数学,而是用更聪明的 kernel 实现同样的 attention 计算,核心收益来自减少显存读写和中间结果。

八、Profiler:别靠感觉优化
症状Profiler 里先看可能原因动作
GPU 利用率低CPU 时间、数据加载、kernel 间空隙数据管线慢、小 kernel 太多、同步点预取、融合、减少同步、增大 batch
显存占用高activation、workspace、KV Cache、临时张量序列太长、未关闭梯度、隐式拷贝checkpointing、inference mode、layout 修正
matmul 慢GEMM shape、dtype、Tensor Core 利用维度不友好、dtype 不对、batch 太小调整 shape、启用混合精度、合并小 batch
attention 慢prefill 时间、attention kernel、序列长度没有 FlashAttention、mask 特殊、上下文过长启用优化 kernel、压缩上下文、分流长请求
推理吞吐不稳batch 调度、KV Cache 水位、P95 / P99长短请求混跑、显存碎片、队列策略差continuous batching、Paged KV、请求分池
九、训练、推理、量化里的典型故障
场景故障优先怀疑验证方式
预训练loss spike 或 NaN坏 batch、学习率、FP16 overflow、norm / softmax 不稳回放 batch、查 loss scale、gradient norm、激活范围
SFT / 微调格式突然不稳低精度误差、数据模板混乱、LoRA 合并误差FP32 / BF16 / 量化版本对比固定样本 logits
推理服务同模型换引擎输出略变kernel、dtype、sampling、tokenizer config 差异固定 seed、固定输入、比较 logits 和 top token
量化部署代码 / 数学能力明显掉敏感层被低 bit、激活离群值、校准集不覆盖按任务切片回归,敏感层回高精度
长上下文远距离引用退化KV Cache 精度、attention kernel、position scalingneedle 测试、KV 精度对照、长短上下文分桶

数值精度 / Kernel Trace 证据包

混合精度问题要能同时落到 dtype、loss scale、kernel 路径、profiler 事件、请求 Trace 和模型网关证据上,不能只凭“换成 BF16 就好了”来判断。线上慢、贵、输出漂移或 NaN,要能回到 AI 证据包索引 的模型服务与 Infra 证据、生成运行时证据和 Release Gate 证据。

证据节点必须记录字段用来排查什么
request_runtimerequest_id、model_id、engine_version、gpu_type、queue_ms、prefill_ms、decode_ms、tokens_per_second慢、卡、吞吐抖动是请求形态、队列、prefill、decode 还是硬件池造成的
precision_policycompute_dtype、param_dtype、grad_dtype、accumulation_dtype、quantization_config、sensitive_op_list哪些算子低精度,哪些路径保高精度,量化或 dtype 改动是否覆盖敏感层
stability_eventloss_scale、overflow_count、nan_inf_event_id、grad_norm、bad_batch_id、activation_range训练崩坏是否来自溢出、下溢、异常样本、激活范围或低精度统计
kernel_tracekernel_name、backend_version、flash_attention_mode、fallback_reason、deterministic_flag、logits_diff性能和输出差异是否来自 kernel 命中、后端实现、规约顺序或确定性设置
profiler_snapshotprofiler_run_id、top_ops、memory_bandwidth、tensor_core_utilization、sync_point、optimization_note瓶颈是算力、带宽、同步点、隐式 dtype 转换还是没有吃到 Tensor Core 快路径
release_connectioneval_run_id、regression_slice、release_gate_id、rollback_engine_version、fixed_artifact_id引擎、kernel、dtype 或量化变更是否经过质量、成本、延迟和安全回归
十、常见误区
误区:低精度只是省显存
低精度同时改变显存、带宽、Tensor Core 路径、舍入误差和稳定性窗口,不只是存储格式。
误区:BF16 永远比 FP16 好
BF16 更抗溢出,但尾数更短;具体是否更好取决于硬件、任务、kernel 和评测。
误区:量化模型体积小就一定更快
如果没有高效 quantized kernel,或者 dequant 开销太大,真实速度可能不如预期。
误区:Attention 热力图就是性能瓶颈
性能瓶颈要看 profiler。热力图解释模式,不能告诉你 HBM、kernel launch 和 Tensor Core 利用率。
误区:同一个模型文件在所有后端输出都应完全一致
不同 dtype、kernel、规约顺序、sampling 和 tokenizer 配置都会带来差异。关键是建立可接受误差和回归标准。
误区:性能优化可以脱离质量评测
任何 dtype、kernel、量化、引擎变更都可能改变 logits 排序。生产优化必须带任务回归和安全回归。
十一、回到 AI 主干
AI 全景 张量 / 计算图 优化器 / 稳定性 Mixed Precision / Kernels AI Infra / GPU 压缩 / 量化 模型服务 / 网关 请求 Trace AI 证据包索引 LLMOps

这张图在主线里的位置

张量页解释计算图,优化器页解释训练动力学,AI Infra 页解释硬件与服务底座,压缩页解释模型怎样变小。本页站在它们之间,解释 dtype、数值范围、kernel、内存访问和 profiler 如何把抽象模型变成真实硬件上的稳定训练和高效推理;进入生产后,这些差异要继续落到请求 Trace、模型网关证据、LLMOps 指标和发布闸门里。