最近,微软提出了一种用于训练 LLM 的 FP8 混合精度框架 FP8-LM,将 FP8 尽可能应用在大模型训练的计算、存储和通信中,使用 H100 训练 GPT-175B 的速度比 BF16 快 64% 目前大多数训练框架(如 Megatron-LM、MetaSeq 和 Colossal-AI)训练 LLM 默认使用 FP32 全精度或者 FP16/BF16 混合精度。 理论上,相比于当前的 FP16/BF16 浮点混合精度训练,FP8 能带来 2 倍的速度提升,节省 50% - 75% 的内存成本和 50% - 75% 的通信成本。 而且在预训练和多个下游任务上,使用 FP8-LM 训练框架可以得到目前标准的 BF16 混合精度框架相似结果的模型。 不修改学习率和权重衰减等任何超参数,不管是预训练任务还是下游任务,使用 FP8 训练的模型与使用 BF16 高精度训练的模型的表现相当。
支持V3的推理框架如下: DeepSeek-Infer Demo: 为FP8和BF16推理提供了一个简单而轻量级的演示。 SGLang: 在BF16和FP8推理模式下完全支持DeepSeek-V3模型。 LMDeploy: 为本地和云部署提供高效的FP8和BF16推理。 TensorRT-LLM: 目前支持BF16推理和INT4/8量化,FP8支持即将推出。 vLLM: 支持DeekSeek-V3模型,具有FP8和BF16模式,用于张量并行和流水线并行。 AMD GPU: 允许在BF16和FP8模式下通过SGLang在AMD GPU上运行DeepSeek-V3模型。
目前一个 Nvidia H100 GPU 可以为 AI 训练提供大约 1,000 FP16/BF16 TFLOPS(这些是目前最流行的 AI 训练数据格式),因此到 2030 年,5000 万台此类 AI 加速器将需要提供 50 个 FP16/BF16 ExaFLOPS算力用于 AI 训练。 根据计算,英伟达H100的FP16/BF16的性能相比A100提高了3.2倍,然后B200相比H100性能又提高了2.4倍。 然而,可以肯定地说,英伟达可以通过每一代新一代的GPU将其训练性能(FP16/BF16格式)提高一倍。 耗电量巨大 尽管马斯克的xAI和其他人工智能领导者可能会在未来四五年内获得50 BF16/FP16 ExaFLOPS用于人工智能训练,但最大的问题是这样一个超级AI集群将消耗多少电力?
低精度训练能否在大规模下达到BF16的精度? 所有评估均在BF16精度下运行,以隔离训练精度的影响。表1显示了结果。尽管训练和验证损失存在微小差异,所有低精度格式都实现了与BF16相当的下游任务精度。表1. 选择性BF16层对NVFP4至关重要:消融研究表明,完全使用NVFP4的模型会发散。稳定训练需要将某些层保持在BF16,特别是靠近网络末端的位置,以减轻NVFP4量化误差。 在这些实验中,将最后四个Transformer层保持在BF16就足够了。 在某机构GB200 NVL72上训练Llama 3 8B的吞吐量对比,显示NVFP4相比BF16最高可达1.59倍加速精度微批次大小吞吐量 (TFLOP/s/GPU)相对于BF16的加速比BF1621165
tt.ptr<bf16>, %arg1 : !tt.ptr<bf16>, %arg2 : ! tt.ptr<bf16>) -> tensor<128x64x!tt.ptr<bf16>> %31 = tt.addptr %30, %8 : tensor<128x64x! tt.ptr<bf16>) -> tensor<256x64x!tt.ptr<bf16>> %41 = tt.addptr %40, %18 : tensor<256x64x! tt.ptr<bf16>) -> tensor<128x256x!tt.ptr<bf16>> %51 = tt.addptr %50, %26 : tensor<128x256x! , %in_4: bf16, %out: bf16): %7 = arith.addf %in, %in_4 : bf16 linalg.yield %7 : bf16
温馨提示:另有配套视频版,附带图解演示,观感不同,欢迎到各大视频平台搜索【蛋先生说识】BF16是啥?丹尼尔:蛋兄,我前几天刷到一个知识点——现在大模型的参数,训练后保存下来基本都是BF16格式。 所以我们只要搞懂了FP16,自然也就理解了BF16丹尼尔:好家伙,自问自答一圈,赶紧开讲吧,哈哈! 感兴趣的话自个回头问问AI哈)丹尼尔:等等,那开头说的BF16呢?讲了半天FP16,BF16到底怎么回事?蛋先生:别急,铺垫到这了。你想啊,FP16这么好用,为什么还要搞个BF16出来? 保存时如果使用FP16,那肯定会各种溢出,就好比蛇吞象一样丹尼尔:那BF16怎么解决?蛋先生:BF16就是1位符号+8位指数+7位尾数。 指数位和FP32完全一致,所以BF16的数值范围跟FP32一模一样,从FP32转BF16几乎零成本。
线性投影层中的张量格式使用此方案,线性层可以用FP8数学计算,其峰值吞吐量是BF16数学的2倍。其他模块,包括注意力机制、归一化层、非线性函数和输出投影,则使用BF16数学计算。 线性层中的端到端FP8减少数值不一致在开发FP8方案的过程中,我们实验了三种方案:基线方案:生成和训练均使用BF16。候选方案1:仅在生成阶段应用FP8,而策略模型训练使用BF16。 实验表明:对于候选方案1(FP8生成 + BF16训练),重要性采样可以缩小与BF16 RL的精度差距,但无法完全消除。对于最终方案(端到端FP8),重要性采样完全消除了与BF16训练的精度差距。 精度BF16仅FP8生成FP8端到端验证准确率0.6160.5860.613表2:不同精度配置下Llama3 8B验证准确率结果在加速方面,与BF16相比,FP8方案实现了持续超过15%的吞吐量提升。 两种方案的吞吐量(每GPU每秒令牌数)(蓝色:BF16,粉色:FP8端到端)尽管理论上FP8比BF16快2倍,但实践中较低,因为只有线性层受益于更快的数学吞吐量,而注意力和逐元素层保持不变。
本次更新带来了大量功能改进与稳定性增强,进一步完善了在多设备(尤其是 MPS 与 BF16 环境)下的兼容性与性能优化。以下为本次更新的详细内容整理。 • 修复 ZeRO 阶段中 BF16 优化器选择逻辑,确保不同精度模式下的正确行为。 • 修复 BF16_Optimizer 无 ZeRO 模式下被误用的问题。 检查点与反向传播修复 • 修复 z0 + bf16 模式下的 checkpoint 加载问题。 优化器与模型稳定性提升 • 修复 BF16 优化器选择问题,避免错误分配。 • 修复 Muon 优化器模块路径错误。 该版本在 多平台支持、分布式训练性能、BF16 与 ZeRO 模式兼容性、文档一致性 等方面都进行了全面优化。
将 bf16 欧几里得距离表达为三个点积,充分利用有限的 bf16 指令。将二进制向量点积重构为多元素(和多向量)位操作,在可用时使用 SIMD popcount,否则使用字节混洗和查找。 三条指令胜过一条:我们如何利用点积计算欧几里得距离这本应是最简单的一个:CPU 已经有专门的 bf16 点积指令。不幸的是,并没有所谓的“bf16 欧几里得距离指令”。 当我们开始AVX-512 bf16 支持的工作时,最初的平方距离实现遵循了显而易见的路径:将两个 bf16 向量都转换为 float32,然后相减并平方:__m512 diff = _mm512_sub_ps 但当两个向量都是 bf16 时,我们可以做得更好,利用一个代数等价式。 这使得三点积路径在处理 bf16 欧几里得距离时,比现有 AVX2 实现快 2.1-2.4 倍。
图 1 性能数据基于 IPEX-LLM 低比特 INT4 优化,图 2 性能数据基于 IPEX-LLM BF16 Self-Speculative Decoding 优化。 图 1:IPEX-LLM INT4 大语言模型推理延迟 图 2:IPEX-LLM BF16 (with Self-Speculative Decoding) 大语言模型推理延迟 请参考配置和免责声明以获取配置信息 同样,使用 IPEX-LLM 的 BF16 Self-Speculative Decoding 也很简单。用户可以通过在加载模型时指定一个额外参数 speculative=True 来启用该功能。 Self-Speculative Decoding 时,IPEX-LLM 会在幕后自动利用低比特优化后的 INT4 小模型来加速 BF16 模型,从而提高 BF16 模型的推理速度。 用户可以查看 IPEX-LLM BF16 Self-Speculative Decoding 的样例代码来获得更多信息。
通过启用float32(FP32)和bfloat16(bf16)的自动混合精度计算,系统能够在保持数值稳定性的同时实现显著的性能提升。 该技术的核心思想是利用bf16和float16等低精度数据类型减少内存占用和计算开销,同时在数值敏感的操作中保持高精度计算。 整个实现过程充分利用了Intel Xe Matrix Extensions(Intel XMX)对bf16和int8数据类型的硬件加速支持。 环境配置与依赖导入 首先需要导入必要的依赖包并配置超参数。 特别是在配备Intel XMX技术的GPU环境下,bf16格式的计算性能提升尤为明显。 实验数据显示,采用自动混合精度bf16格式相比传统FP32格式在推理速度上有显著改善,同时在CPU和GPU平台上都能观察到性能收益。
具体使用方式如下: python web_demo.py --from_pretrained cogvlm-chat --version chat --english --bf16 python web_demo.py --from_pretrained cogvlm-grounding-generalist --version base --english --bf16 网页演示的 GUI 界面如下: 2.3 CLI 通过CLI演示,执行以下命令: python cli_demo.py --from_pretrained cogvlm-base-224 --version base --english --bf16 python cli_demo.py --from_pretrained cogvlm-chat --version chat --english --bf16 python cli_demo.py --from_pretrained cogvlm-grounding-generalist --version base --english --bf16 该程序会自动下载 sat 模型并在命令行中进行交互
从图一可以看出,当数据格式由FP32转为8位整数(INT8)或16位浮点数(BF16)时,内存可以移动更多的数据量,进而更大化地利用计算资源。 技术的精髓,就是把对低精度数据格式的操作指令融入到了AVX-512指令集中,即AVX-512_VNNI(矢量神经网络指令)和AVX-512_BF16(bfloat16),分别提供了对INT8(主打推理)和BF16 据实测:与FP32相比,使用BF16加速后ResNet-50的训练性能提升1.64倍,DLRM的训练性能提升1.4倍,ResNeXt-101 32x4d的训练性能也提升1.6倍[6]。 generic,英特尔 800 GB 固态盘 OS 驱动器,ResNet-50 v 1.5 吞吐量,https://github.com/Intel-tensorflow/tensorflow -b bf16 generic,英特尔 800 GB 固态盘 OS 驱动器,ResNet-50 v 1.5 吞吐量,https://github.com/Intel-tensorflow/tensorflow -b bf16
点表示模型使用 BF16 数据类型运行时所需的 NVIDIA H100 GPU 预估数量。 采用 int4 量化意味着每个数值仅用 4 bit 表示 —— 相比 BF16 格式,数据大小缩减至 1/4。 但是,这种量化方式通常会导致模型性能下降。 那谷歌是如何保持模型质量的? 这样带来的好处之一是加载模型权重所需的 VRAM 大幅减少: Gemma 3 27B:从 54 GB(BF16)降至仅 14.1 GB(int4) Gemma 3 12B:从 24 GB(BF16)缩减至仅 6.6 GB(int4) Gemma 3 4B:从 8 GB(BF16)精简至 2.6 GB(int4) Gemma 3 1B:从 2 GB(BF16)降至仅 0.5 GB(int4) 此图仅表示加载模型权重所需的
Router GEMM:以双BF16 GEMM组合实现FP32级高精度计算,兼顾推理精度与GPU算力利用率。精度显著优于常规BF16/TF32方案,对比CuBLAS FP32最高提速3.22x。 Router GEMM:双BF16重构FP32计算,兼顾高精度与高性能在MoE路由、稀疏Attention等模块中,普遍存在激活为BF16,权重为FP32的高精度GEMM计算。 针对上述问题,HPC-Ops提出双BF16 GEMM组合模拟FP32精度的优化方案:离线阶段将 FP32 权重拆分为高位 BF16 与低位残差 BF16 两组张量,即W ≈ W_high + scale × W_low(缩放因子scale取 1/256,对齐BF16的8位尾数)。 推理阶段执行两次 BF 16 GEMM 并做线性组合,激活值全程保持 BF16,无需类型转换,且两路矩阵乘均运行在 BF16 Tensor Core 上,算力利用率得以充分释放。
FP8 量化模型下载和使用教程 标签:Z Image Turbo、AI绘图、FP8量化、国内AI绘图、低显存跑模型、4060 8G 跑图、Stable Diffusion、AI模型下载 下载地址(包含 bf16 进一步研究后,我发现它不仅是阿里巴巴Z-Image Turbo的蒸馏版,还被社区大佬做了 bf16 → fp8 的量化版本。 下载地址(包含 bf16 + fp8) bf16 + fp8模型下载地址 https://pan.quark.cn/s/2ad845f2f0ea Z-Image Turbo 整合包(打开即用) 一、模型基础信息 Z-Image Turbo(蒸馏版) 文件名:z-Image-Turbo_fp8.safetensors 精度:FP8 / BF16 两个版本 模型大小: bf16
256K 256K 256K 基础版 – BF16 BF16 BF16 指令版 – Q4_K_M, FP8, BF16 Q4_K_M, FP8, BF16 Q4_K_M, FP8, BF16 推理版 Q4_K_M, NVFP4, FP8 Q4_K_M, BF16 Q4_K_M, BF16 Q4_K_M, BF16 推理框架支持 vLLM ✔ ✔ ✔
量化后的保持一致,说明BF16量化后的向量几乎不损失召回效果,FP16会增加到129达到0.99召回说明影响也很小,不过整体来讲这个数据集更适合用BF16来做。 首先,我们调研了开源索引库Faiss,其支持了精度量化版的HNSW,但当时Faiss版本(v1.8.0)尚不支持BF16半精度类型,只支持FP16。 在实现FP16、BF16半精度向量计算时,也是先转换半精度浮点数为单精度浮点数,再进行距离运算。核心代码如下: 该实现简洁易读,但不够高效。 指令_mm512_cvtepi32_epi16: 移除32位整数的高16位,转换为以16位整数表达的BF16。 指令_mm512_cvtepu16_epi32:将以16位整数表达的BF16,高16位零扩展,表达为32位整数。
量化后的保持一致,说明BF16量化后的向量几乎不损失召回效果,FP16会增加到129达到0.99召回说明影响也很小,不过整体来讲这个数据集更适合用BF16来做。 首先,我们调研了开源索引库Faiss,其支持了精度量化版的HNSW,但当时Faiss版本(v1.8.0)尚不支持BF16半精度类型,只支持FP16。 在实现FP16、BF16半精度向量计算时,也是先转换半精度浮点数为单精度浮点数,再进行距离运算。核心代码如下: 该实现简洁易读,但不够高效。 指令_mm512_cvtepi32_epi16: 移除32位整数的高16位,转换为以16位整数表达的BF16。 指令_mm512_cvtepu16_epi32:将以16位整数表达的BF16,高16位零扩展,表达为32位整数。 指令_mm512_slli_epi32:将32位整数左移16位,表达为FP32。
english --bf16python web_demo.py --from_pretrained cogvlm-grounding-generalist --version base --english --bf16 通过CLI演示,执行以下命令:python cli_demo.py --from_pretrained cogvlm-base-224 --version base --english --bf16 - -no_promptpython cli_demo.py --from_pretrained cogvlm-base-490 --version base --english --bf16 --no_promptpython english --bf16python cli_demo.py --from_pretrained cogvlm-grounding-generalist --version base --english --bf16