大模型参数存储格式揭秘: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,无不体现着人类的智慧啊!

蛋先生:( ̄▽ ̄)~*

目录
相关文章
|
6月前
|
人工智能 Linux iOS开发
OpenClaw+QMT‑MCP量化交易实战:AI交易员全流程部署、模型配置与自动交易实现(附阿里云/Windows/macOS/Linux部署OpenClaw教程)
在量化交易领域,自动化执行与策略智能化已成为主流方向。OpenClaw(Clawdbot)作为开源AI Agent框架,可充当交易系统的“大脑”,负责理解指令、分析行情、拆解逻辑、规划执行;QMT‑MCP则遵循MCP(Model Context Protocol)协议,将本地QMT交易客户端封装为标准接口,成为AI交易员的“执行双手”,完成下单、撤单、查询持仓、查询资产等真实交易操作。
3370 7
|
25天前
|
Web App开发 人工智能 JavaScript
推荐一款开源 Skill:让 AI Agent 给你做一份"能改"的 PPT,支持 上千套模板!
dashi-ppt-skill是一款开源AI PPT技能(4.3k stars),突破行业痛点:生成后可实时编辑。支持12套主题、1020种版式、8576个控件,网页端可视化修改(拖拽/换色/调图表),一键导出真正可编辑的PPTX(文字/图表保留可修改性),全程本地运行,商业文档零上传。
320 0
推荐一款开源 Skill:让 AI Agent 给你做一份"能改"的 PPT,支持 上千套模板!
|
29天前
|
人工智能 运维 数据可视化
最新版通义千问(Qwen3.7-Plus)功能介绍
作为通义千问3.7系列的中端主力旗舰,Qwen3.7-Plus以35B稠密参数架构为核心,定位“高性价比多模态智能体基座”,彻底打破传统多模态模型“只能看懂、无法做事”的局限。它原生统一文本、图片、截图、短视频、网页五大输入形态,打通GUI可视化界面与CLI命令行双操作环境,实现“看、想、写、做、验”全流程闭环,在全球多模态评测榜单跻身前五、国产榜单登顶,标志国产多模态AI从“内容解析”迈向“自主执行”的关键跨越。相比同系列旗舰Max,它以更轻量化的参数、更低的使用成本,实现了接近旗舰的多模态与智能体能力,成为个人开发者、中小企业与行业数字化场景的首选AI基座。
332 2
|
1月前
|
人工智能 缓存 数据可视化
阿里云百炼平台详解:官网入口、免费AI大模型领取及常见问题解答
阿里云百炼(Model Studio)是阿里云推出的一站式大模型服务平台,集成通义千问全系列及DeepSeek、Kimi等上百款主流第三方大模型,提供兼容OpenAI的API接口、可视化应用构建、模型微调与部署等全链路能力,是个人开发者与企业快速接入AI能力的首选平台。本文将从官网入口、免费AI大模型领取流程、核心功能使用,到高频常见问题解答,全方位详解阿里云百炼平台,帮助你快速上手,高效使用免费额度,避免踩坑。
693 1
|
11月前
|
机器学习/深度学习 人工智能 索引
RAG 切片利器 LumberChunker 是如何智能地把文档切割成 LLM 爱吃的块
RAG 里的文档应该怎么切割比较好呢?按固定的字符数或词数?按句?按段落?加个重叠窗口?还是 ...
491 1
RAG 切片利器 LumberChunker 是如何智能地把文档切割成 LLM 爱吃的块
|
1月前
|
JSON 供应链 小程序
商品条形码api-国内条码信息查询-食品条码查询接口
条码查询API是面向全行业的标准化接口服务,支持13/14位国标条码(如69开头),秒级返回商品名称、品牌、规格、厂家、图片等结构化数据,覆盖食品、日化、药品等2000万+条目,提供免费试用、多语言示例、在线调试及私有化部署,广泛适用于电商建档、零售收银、医药合规与ERP集成等场景。
537 0
商品条形码api-国内条码信息查询-食品条码查询接口
|
24天前
|
人工智能 数据可视化 安全
百炼平台如何创建智能体?零代码搭建AI Agent完整教程
手把手教你在阿里云百炼平台创建智能体Agent,无需编码即可完成模型选择、提示词配置、知识库挂载与发布接入,快速构建你的第一个AI应用。
266 0
|
24天前
|
人工智能 缓存 监控
阿里云百炼Token Plan是什么?购买与使用完全指南
阿里云百炼Token Plan是什么?本文详解Token计费原理、Plan类型对比、购买步骤、用量查看及省钱技巧,帮助企业降低大模型API调用成本。
196 0
|
29天前
|
供应链 前端开发 关系型数据库
跨境电商ERP开源软件:ecommerce-erp 的订单履约与供应链协同架构
ecommerce-erp 以 ThinkPHP、Vue、MySQL 和 Redis 构建跨境电商管理后台,连接商品、采购、仓储、订单、发货、财务与报表,支持 Docker 本地部署及业务扩展。

热门文章

最新文章