大模型参数存储格式揭秘:BF不是男朋友

简介: 大模型的参数一般都用 BF16 存储。BF16 是一种浮点数格式,那它到底是怎么存数据的?今天,我们就来扒一扒浮点数那些精妙设计——小数点会漂移、前导位能省则省,一路看到 BF16 上位的真相

封面.png

温馨提示:另有配套视频版,附带图解演示,观感不同,欢迎到各大视频平台搜索【蛋先生说识】

BF16 是啥?

丹尼尔:蛋兄,我前几天刷到一个知识点——现在大模型的参数,训练后保存下来基本都是BF16格式。也就是说,一个数字只用 16 个 bit 来存?16 位是怎么存的?BF 又是什么意思?我脑子里全是问号!

蛋先生:BF16 中的 BF 指的是 Boy Friend

丹尼尔:???

蛋先生:哈哈,开玩笑的!是指 Brain Float,浮点数的一种存储设计。为什么是 Brain 呢?因为它是由 Google Brain 团队设计的——也许,这就是开发者最单纯的追求:自豪感。那为什么要设计 BF16 呢?它是为深度学习量身定做的,之所以会出现,就是因为当时的现状不太理想。那当时的现状指的是什么呢?就是 FP16。所以我们只要搞懂了 FP16,自然也就理解了 BF16

丹尼尔:好家伙,自问自答一圈,赶紧开讲吧,哈哈!

蛋先生:简单说就是把 16 个 bit 分成三部分:1 个符号位(S)、5 个指数位(E)、10 个尾数位(M)

浮点数原来是这样?

丹尼尔:等会儿,尾数位我能理解,就是小数点后面的数字嘛。但这指数位是什么鬼?为什么不直接搞个"整数位",像 3.14 那样整数部分和小数部分分开存?

蛋先生:好问题!你这个思路其实叫"定点数"。整数位和小数位各自固定,乍一看很直观

丹尼尔:不应该这样吗?

蛋先生:但它的致命伤就是"鱼与熊掌不可兼得" - 就是你很难同时去表达一个极大的数值和无限趋近于 0 的极小数值。你想啊,假如 15 位全给整数部分(就是二进制 15 个 1,请自行计算验证),那最大值也就 32767,小数一个都表示不了。反过来全给小数位,连个大于 1 的数都表示不了哦

丹尼尔:(⊙ˍ⊙) 那岂不是要么只能数星星,要么只能数细菌?太极端了!

蛋先生:所以聪明的人类发明了"浮点"(Floating Point)——通过指数位来移动小数点,左移缩小、右移放大,相当于给数字加了一个"缩放因子"

丹尼尔:哦~"浮点"这个名字原来是这么来的,小数点可以浮动!那具体怎么算呢?

蛋先生:公式长这样:

V = (-1)^S × 2^(E-15) × (1.M)₂(即 V = (−1)ˢ × 2ᴱ⁻¹⁵ × (1.M)₂)

S 是符号位,决定正(S 为 0 时值为 1)负(S 为 1 时值为 -1);E 是指数位;M 是尾数位(比如 1.101..101,如果 M=15,即 1.xxx 就有 15 个 0 和 1 组成的二进制数字)

指数位怎么理解?

丹尼尔:等下,为什么指数是 E-15?这个 15 是哪里冒出来的?

蛋先生:我们既需要正的指数来放大数字,也需要负的指数来缩小数字(简单理解就是指数多少,就将小数点移动多少。比如 1.01 * 2¹ 就是将小数点往右移动一格,就变成 10.1)。如果直接存正负符号,机器还得额外处理符号,又折腾又浪费空间

丹尼尔:那咋办?

蛋先生:指数位是 5,5 个 bit 有多少个 1 和 0 的组合?就是 2⁵,所以它能表示 32 个数,从 0 到 31。取个中间值 15 作为偏移量(Bias)。指数存 13(二进制 01101),实际指数就是 13 - 15 = -2;存 17(二进制 10001),实际指数就是 17 - 15 = 2。按照 IEEE 754 规约数规范(只需要知道就是一种规范就行了),E 的取值是 1~30(E=0 和 E=31 被保留给了零/非规约数和无穷/NaN)。所以真实指数范围是 -14 到 +15(严谨讲是规约数规范下的范围)

丹尼尔:哇塞,这也太巧妙了!

蛋先生:这样的设计也可以让指数直接按无符号整数比较大小,大幅简化了浮点数比较的硬件电路设计(就不展开说了,越说越蒙圈)

隐式前导位的巧妙设计

丹尼尔:那 (1.M)₂ 里面的 1 又是什么?

蛋先生:这是最妙的地方——这个 1 叫"隐式前导位"。按照 IEEE 754 规范,规约数永远在前面有个 1,比如 1.10101... 但它不用存!机器自动认,凭空省了 1 个 bit

丹尼尔:(゚Д゚*) 还能这样操作?但这样好像无法表示 0 值?

蛋先生:眼睛很尖嘛。看公式计算 2¹⁻¹⁵ × 1.0 = 2⁻¹⁴ ≈ 0.000061035,这是它能表示的最小正值,所以确切地说,是无法表示靠近 0 的极小数值。实际应用中,如果遇到非规约数,会有各种各样的解决方案,这里就不展开了

指数位多少才合适?

丹尼尔:那我还有一个疑问:指数位为什么偏偏是 5 位?是拍脑袋决定的还是精心设计的?

蛋先生:当然不是拍脑袋。指数位越多 → 数值范围越大,但尾数位就少了 → 精度下降。反过来也一样。5 位是指数范围和精度,根据当时的应用场景权衡出来的结果(具体当时主要是什么应用场景?当时又是如何权衡?感兴趣的话自个回头问问 AI 哈)

丹尼尔:等等,那开头说的 BF16 呢?讲了半天 FP16,BF16 到底怎么回事?

蛋先生:别急,铺垫到这了。你想啊,FP16 这么好用,为什么还要搞个 BF16 出来?

丹尼尔:对啊,吃饱了撑的?

蛋先生:问题出在"训练"上。模型训练用的是 FP32(32 位浮点),指数位有 8 位。而 FP16 才 5 位。保存时如果使用 FP16,那肯定会各种溢出,就好比蛇吞象一样

丹尼尔:那 BF16 怎么解决?

蛋先生:BF16 就是 1 位符号 + 8 位指数 + 7 位尾数。指数位和 FP32 完全一致,所以 BF16 的数值范围跟 FP32 一模一样,从 FP32 转 BF16 几乎零成本。代价是尾数位少了,精度降了——但深度学习对精度不敏感,对范围更敏感

丹尼尔:从定点到浮点,从 FP16 到 BF16,无不体现着人类的智慧啊!

蛋先生:( ̄▽ ̄)~*

目录
相关文章
|
1月前
|
存储 Shell 数据库
Agent 小知识|长任务不重来:Agent 状态保存的工程设计
本文详解Agent状态的核心概念与工程实践:它不是简单记忆,而是任务执行的实时快照,涵盖进度、环境、内部判断与资源约束。通过结构化Schema、分层检查点和状态栏机制,实现可靠暂停恢复、高效决策与长程连贯性。
164 0
Agent 小知识|长任务不重来:Agent 状态保存的工程设计
|
6月前
|
人工智能 Linux iOS开发
OpenClaw+QMT‑MCP量化交易实战:AI交易员全流程部署、模型配置与自动交易实现(附阿里云/Windows/macOS/Linux部署OpenClaw教程)
在量化交易领域,自动化执行与策略智能化已成为主流方向。OpenClaw(Clawdbot)作为开源AI Agent框架,可充当交易系统的“大脑”,负责理解指令、分析行情、拆解逻辑、规划执行;QMT‑MCP则遵循MCP(Model Context Protocol)协议,将本地QMT交易客户端封装为标准接口,成为AI交易员的“执行双手”,完成下单、撤单、查询持仓、查询资产等真实交易操作。
3449 7
|
1月前
|
Web App开发 人工智能 JavaScript
推荐一款开源 Skill:让 AI Agent 给你做一份"能改"的 PPT,支持 上千套模板!
dashi-ppt-skill是一款开源AI PPT技能(4.3k stars),突破行业痛点:生成后可实时编辑。支持12套主题、1020种版式、8576个控件,网页端可视化修改(拖拽/换色/调图表),一键导出真正可编辑的PPTX(文字/图表保留可修改性),全程本地运行,商业文档零上传。
453 0
推荐一款开源 Skill:让 AI Agent 给你做一份"能改"的 PPT,支持 上千套模板!
|
1月前
|
人工智能 运维 数据可视化
最新版通义千问(Qwen3.7-Plus)功能介绍
作为通义千问3.7系列的中端主力旗舰,Qwen3.7-Plus以35B稠密参数架构为核心,定位“高性价比多模态智能体基座”,彻底打破传统多模态模型“只能看懂、无法做事”的局限。它原生统一文本、图片、截图、短视频、网页五大输入形态,打通GUI可视化界面与CLI命令行双操作环境,实现“看、想、写、做、验”全流程闭环,在全球多模态评测榜单跻身前五、国产榜单登顶,标志国产多模态AI从“内容解析”迈向“自主执行”的关键跨越。相比同系列旗舰Max,它以更轻量化的参数、更低的使用成本,实现了接近旗舰的多模态与智能体能力,成为个人开发者、中小企业与行业数字化场景的首选AI基座。
406 2
|
1月前
|
人工智能 IDE 开发工具
Qoder CLI 启动命令更新为 qoder
Qoder CLI 自V1.1.18起支持直接输入`qoder`启动(国际版)或`qodercn`(中国版),原命令仍兼容。它既是轻量CLI工具,也是AI编程智能体,可自主读码、改文件、执行验证,并支持CI/CD集成与SDK企业定制。
224 0
|
1月前
|
人工智能 缓存 监控
阿里云百炼Token Plan是什么?购买与使用完全指南
阿里云百炼Token Plan是什么?本文详解Token计费原理、Plan类型对比、购买步骤、用量查看及省钱技巧,帮助企业降低大模型API调用成本。
258 0
|
1月前
|
存储 搜索推荐 关系型数据库
纯向量库架构上线两周出事故,我帮他们重构后发现了3个选型误区
从一次生产事故出发,拆解向量数据库爆火的真实原因,深入底层索引机制和架构取舍,分析融合趋势。给从业者一个清醒的判断框架。
|
1月前
|
人工智能 数据可视化 安全
百炼平台如何创建智能体?零代码搭建AI Agent完整教程
手把手教你在阿里云百炼平台创建智能体Agent,无需编码即可完成模型选择、提示词配置、知识库挂载与发布接入,快速构建你的第一个AI应用。
399 0
|
1月前
|
机器学习/深度学习 人工智能 缓存
最新版发布通义千问(Qwen3.8-Max)功能介绍
通义千问Qwen3.8-Max作为通义千问系列的旗舰级大语言模型,凭借前沿的技术架构、突破性的能力升级与广泛的应用场景,成为当前AI大模型领域的标杆产品。它以2.4万亿参数的超大规模为基础,依托稀疏混合专家(MoE)架构与混合注意力机制,在保持顶尖性能的同时实现高效推理,更在全栈编程、原生多模态、超长上下文处理、长周期自主任务执行等核心维度实现质的飞跃,为开发者、企业用户与科研人员提供了前所未有的AI生产力工具。
377 0