AI 模型訓練過程中參數用BF16轉向FP16的原因

大模型訓練從 FP16 轉向 BF16 是一個關鍵的技術演進,其核心原因在于 BF16 在動態范圍和精度之間取得了更優的平衡,從而極大地提升了訓練(尤其是大模型訓練)的穩定性和有效性。

1. 背景

  1. 為什么需要半精度浮點數 (FP16)?

在深度學習訓練中,尤其是Transformer架構的大模型,參數量和計算量極其巨大。使用單精度浮點數 (FP32) 進行訓練會消耗大量的顯存和計算資源。因此,混合精度訓練 成為標準做法:

? FP16 存儲和計算:在前向傳播和反向傳播中,使用 FP16 來存儲張量和進行計算。這可以顯著減少顯存占用(約一半),并提升計算速度(現代GPU如NVIDIA Tensor Core對FP16有專門優化)。

? FP32 主權重和梯度累加:在優化器中,保留一份 FP32 格式的“主權重”(Master Weights)。在計算梯度時,也使用 FP32 進行累加,以避免下溢和精度損失。

FP16 的數據格式是:1 個符號位 + 5 個指數位 + 10 個小數位。

  1. FP16 的核心痛點:狹窄的動態范圍

FP16 的最大問題在于其動態范圍(Dynamic Range)非常窄。

? 可表示的最大值:約 65,504

? 可表示的最小正值(接近0):約 5.96 × 10?? (2?2?)

在訓練大模型時,尤其是在訓練的初期或者使用某些優化器(如 Adam)時,梯度值可能非常小。當這些微小的梯度值小于 FP16 能表示的最小值時,它們會被舍入為 0。這種現象稱為梯度下溢(Gradient Underflow)

一旦梯度變為 0,對應的權重就無法更新,這部分神經元就“死亡”了。對于擁有數十億甚至萬億參數的大模型來說,廣泛的梯度下溢會導致訓練不穩定、無法收斂,或者最終模型性能不佳。

簡單比喻:FP16 就像一把刻度非常精細但量程很小的尺子(例如 0-10cm),能量得很細,但一旦物體長度超過10cm或小于1mm,你就無法準確測量了。

  1. BF16 的解決方案:犧牲精度,換取范圍

BF16 (Brain Floating Point) 是由 Google Brain 團隊設計的一種浮點格式,旨在更好地滿足深度學習的需求。

它的數據格式是:1 個符號位 + 8 個指數位 + 7 個小數位。

讓我們對比一下 FP16 和 BF16:

特性FP16BF16說明
總位數16 bits16 bits兩者占用內存完全相同
符號位1 bit1 bit相同
指數位5 bits8 bits這是最關鍵的差異
小數位/尾數位10 bits7 bits這是做出的犧牲
動態范圍~5.96e-8 ~ 65504~1.18e-38 ~ 3.39e38BF16 范圍極大拓寬
精度(小數部分)相對較高 (2?1?)相對較低 (2??)BF16 精度更低

BF16 的巨大優勢:

  1. 極其寬廣的動態范圍
    BF16 的指數位和 FP32(8位指數)完全一樣。這意味著它的動態范圍與 FP32 幾乎一致。最大值和最小值都與 FP32 處于同一數量級。
    好處:幾乎不可能出現梯度下溢或權重下溢的問題。那些在 FP16 中會變成 0 的微小梯度,在 BF16 中依然可以正常表示和參與計算。這直接解決了大模型訓練不穩定的核心痛點。

  2. 與 FP32 的無縫轉換
    由于指數位寬度相同,BF16 和 FP32 之間的轉換非常直接和高效,幾乎只是截斷或填充尾數位。這在混合精度訓練中(BF16計算,FP32主權重)開銷更小。

BF16 的“劣勢”與為何它無關緊要:

BF16 的尾數位更少(7位 vs 10位),這意味著它的精度更低。它無法像 FP16 那樣精確地表示一個數的小數部分。

然而,深度學習模型對數值的精度(小數點后多精確)相對不敏感,但對數值的范圍(不能是0或無窮大)極其敏感。

? 權重和梯度值本身具有噪聲魯棒性:模型參數的更新本身就是一個帶有噪聲的優化過程。梯度值本身就不需要非常高的精度,只要方向大致正確,優化器(如Adam)就能很好地工作。

? 范圍比精度更重要:一個不精確但非零的梯度仍然可以有效地更新權重,而一個精確但值為 0 的梯度則對訓練毫無貢獻。“有”遠勝于“無”。

回到比喻:BF16 就像一把量程巨大(0-100米)但刻度相對粗糙的尺子。測量1米左右的物體時,FP16可能更準,但BF16既能測細胞大小(小梯度)又能測大樓高度(大梯度),雖然都不是特別精確,但絕不會測不了。對于訓練模型來說,確保所有值都能被測量到,比測量得極度精確更重要。

  1. 硬件支持:Ampere架構及以后的GPU

BF16 的成功推廣離不開硬件支持。NVIDIA 從 Ampere 架構(如 A100, A6000, 30系)開始,在其 Tensor Cores 中原生支持了 BF16 計算。

? 新的計算指令:例如,HMMA (Half-precision Matrix Multiply Accumulate) 指令同時支持 FP16 和 BF16 操作。

? 同等性能:在 Ampere 及以后的 GPU 上,使用 BF16 進行矩陣乘法和卷積運算與使用 FP16 具有完全相同的速度性能。

這意味著開發者可以在不損失任何計算速度或內存占用的前提下,獲得 FP32 級別的動態范圍,從而穩定地訓練大模型。這是一種“免費的午餐”,因此BF16迅速成為大模型訓練的首選格式。

總結:BF16 的好處

  1. 穩定訓練,避免下溢:核心優勢。其寬廣的動態范圍(與FP32一致)徹底解決了FP16在訓練大模型時容易出現的梯度下溢問題,使訓練過程更加穩定可靠。
  2. 保持性能,無損速度:在現代GPU(Ampere及以后)上,BF16與FP16具有完全相同的計算速度和內存效率。
  3. 簡化混合精度訓練:與FP32的轉換更加簡單高效,因為指數位對齊。
  4. 對深度學習任務更友好:犧牲了無關緊要的小數精度,換來了至關重要的動態范圍,完美匹配了深度學習的數值特性。

2. 精度對比

BF16、FP16 和 FP32 是深度學習中最常用的三種浮點數格式。

核心概念:浮點數的構成

所有浮點數都由三部分組成:

  1. 符號位 (Sign bit):決定正負。
  2. 指數位 (Exponent bits):決定數值的范圍(能表示多大和多小的數)。
  3. 尾數位/小數位 (Mantissa bits):決定數值的精度(表示的細節有多精細)。
格式總位數符號位指數位尾數位主要特點
FP3232 bits1 bit8 bits23 bits高精度、高范圍,傳統標準
FP1616 bits1 bit5 bits10 bits省內存、速度快,但范圍窄
BF1616 bits1 bit8 bits7 bits范圍廣(同FP32),精度低

詳細對比

特性維度FP32 (Single Precision)FP16 (Half Precision)BF16 (Brain Float16)說明與影響
內存占用4 Bytes2 Bytes2 BytesFP16/BF16 內存減半,能訓練更大模型或使用更大批次。
計算速度標準速度更快 (Tensor Cores)更快 (Tensor Cores)現代GPU(如NVIDIA V100/A100)對 FP16/BF16 有專用硬件加速。
動態范圍~1.18e-38 to ~3.40e38~5.96e-8 to 65504~1.18e-38 to ~3.39e38核心差異。BF16 范圍與 FP32 相同,遠大于 FP16。FP16 極易出現下溢
表示精度非常高 (2?23)較高 (2?1?)較低 (2??)BF16 精度最低,但對深度學習影響不大。FP32 精度最高。
訓練穩定性非常穩定不穩定穩定FP16 的狹窄范圍導致梯度容易變成0(下溢),使訓練崩潰。BF16 因其寬廣范圍而非常穩定。
主要用途傳統科研計算、CPU計算、部分網絡層模型推理、對精度敏感的小模型訓練大規模模型訓練 (尤其是LLM)訓練用 BF16,推理用 FP16,傳統用 FP32 已成為一種趨勢。
硬件支持所有CPU/GPUPascal架構及以后的NVIDIA GPUAmpere架構及以后的NVIDIA GPU (如A100, 3090, H100)BF16 需要較新的硬件支持。

通俗比喻

你可以把這三種格式想象成三種不同的尺子:

? FP32:高精度工程尺

?   量程極大(從顯微鏡到天文望遠鏡),刻度極其精細(精確到微米)。?   優點:什么都能量,量得很準。?   缺點:做得太重太大(占內存),操作起來有點慢。

? FP16:便攜小尺子

?   量程很小(只有0-15厘米),但刻度很精細(精確到毫米)。?   優點:輕便小巧(省內存),操作快。?   缺點:量不了太小的東西(如細胞,會下溢)和太大的東西(如桌子,會上溢),很容易就量不準了。

? BF16:大量程估算尺

?   量程和工程尺一樣大(從顯微鏡到天文望遠鏡),但刻度很粗糙(精確到厘米)。?   優點:輕便小巧(省內存),操作快,最重要的是什么都能量到(絕不會量不了)。?   缺點:量得沒那么精細,但對于“估算房間面積”這種任務來說,厘米級的精度足夠了。

在深度學習中,我們更關心梯度、權重這些值是否存在(范圍),而不是它到底有多精確(精度)。一個不精確但非零的梯度遠勝于一個精確但為零的梯度。這就是BF16成功的關鍵。

3. 總結與選擇建議

  1. 訓練大型模型(尤其是LLM):
    首選 BF16,它在保持FP16的速度和內存優勢的同時,提供了FP32級的動態范圍,保證了訓練的穩定性。這是當前工業界訓練大模型的事實標準。

  2. 模型推理與部署:
    首選 FP16,推理時沒有梯度計算,數值范圍相對穩定,不會出現下溢問題。更高的精度有時能帶來更好的輸出質量,且兼容性更廣(支持FP16的硬件更多)。

  3. 通用計算、小型模型或兼容性考慮:
    使用 FP32,當硬件不支持BF16/FP16,或模型非常小、對數值精度極其敏感時,FP32仍然是最安全可靠的選擇。

  4. 混合精度訓練:
    無論是 FP16 還是 BF16,通常都會與 FP32 結合使用,即混合精度訓練。計算用 BF16/FP16,但主權重副本和梯度累加等關鍵操作保留在 FP32 中,以進一步提升數值穩定性。

對于現代大規模深度學習模型(尤其是LLM),BF16 已經全面取代 FP16,成為混合精度訓練中首選的半精度浮點數格式。FP16 通常只在推理部署或一些對精度有特殊要求的舊模型中繼續使用。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/921951.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/921951.shtml
英文地址,請注明出處:http://en.pswp.cn/news/921951.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python網絡爬取個人學習指南-(五)

**************************************************************************************************************author:keyinfodate:2025-09-09 23:50title:網絡信息爬取之多聯級標題內容點擊****************************************…

RAG - 檢索增強生成

第一部分:RAG 詳解一、RAG 是什么?RAG(Retrieval-Augmented Generation,檢索增強生成)是一種將信息檢索(或知識檢索)與大語言模型(LLM)的生成能力相結合的技術框架。它的…

大數據畢業設計選題推薦-基于大數據的分化型甲狀腺癌復發數據可視化分析系統-Spark-Hadoop-Bigdata

?作者主頁:IT研究室? 個人簡介:曾從事計算機專業培訓教學,擅長Java、Python、微信小程序、Golang、安卓Android等項目實戰。接項目定制開發、代碼講解、答辯教學、文檔編寫、降重等。 ?文末獲取源碼? 精彩專欄推薦??? Java項目 Python…

Spring Bean掃描

好的,沒有問題。基于我們之前討論的內容,這是一篇關于 Spring Bean 掃描問題的深度解析博客。Spring Bean掃描作者:Gz | 發布時間:2025年9月9日🎯 Spring如何找到你的Bean? 首先要理解原理。Spring的組件掃…

【 運維相關】-- HTTP 壓測/負載發生器之新秀 oha

目錄 oha 項目分析(hatoo/oha) 一、概述 二、安裝 三、快速上手 三、常用參數(摘選) 四、輸出解讀(終端 TUI) 五、與其它工具對比 六、最佳實踐 七、注意事項 八、參考 oha 項目分析(h…

淘寶閃購基于FlinkPaimon的Lakehouse生產實踐:從實時數倉到湖倉一體化的演進之路

摘要:本文整理自淘寶閃購(餓了么)大數據架構師王沛斌老師在 Flink Forward Asia 2025 城市巡回上海站的分享。引言在數字化轉型的浪潮中,企業對實時數據處理的需求日益增長。傳統的實時數倉架構在面對業務快速變化和數據規模爆炸性增長時,逐漸…

Android應用添加日歷提醒功能

功能 在安卓應用里調用系統日歷&#xff0c;直接創建一個帶提醒的日歷事件&#xff0c;甚至不需要跳轉到日歷界面&#xff0c;只需要獲取系統日歷的讀取權限即可。 需要的權限 在AndroidManifest.xml里添加 <uses-permission android:name"android.permission.READ_CAL…

?Git Bisect 二分查找定位錯誤總結

# Git Bisect 二分查找指南## 1. 基本原理&#xff08;ASCII示意圖&#xff09; 假設提交歷史是一條時間線&#xff0c;Ggood&#xff08;正常&#xff09;&#xff0c;Bbad&#xff08;異常&#xff09;&#xff1a;提交順序: G --- G --- G --- B --- B --- B | | | 初始正常…

ThingsKit物聯網平臺 v2.0.0 發布|前端UI重構、底層架構升級

v2.0.0 Release發布日期&#xff1a;2025/08/25 代碼標簽&#xff1a;v2.0.0_Release&#x1f947; 新增功能國標級聯&#xff08;支持上級、下級國標級聯&#xff09;視頻回放、錄像計劃&#xff08;用戶可以通過錄像計劃生成對應的視頻回放并查看&#xff09;Modbus_TCP協…

Lua > Mac Mini M4安裝openresty

Mac Mini M4安裝openresty 主要參考 https://www.cnblogs.com/helios-fz/p/15703260.html brew uninstall nginxbrew update brew install pcre openssl #brew install geoip# brew tap openresty/brew # brew install openresty # brew install openresty/brew/openresty# VER…

【多線程案例】:單例模式

多線程案例8.1 單例模式餓漢模式懶漢模式懶漢模式-單線程版懶漢模式-多線程版懶漢模式-多線程版(改進)8.1 單例模式 單個實例. 在一個 java 進程中, 要求指定的類,只能有唯–個實例。&#xff08;嘗試 new 多個實例的時候, 就會直接編譯報錯&#xff09; 單例模式是校招中最常…

【Python/Pytorch】-- 貝葉斯定理

文章目錄 文章目錄01 貝葉斯定理的理解02 在MRI重建領域應用01 貝葉斯定理的理解 貝葉斯定理的基本公式&#xff1a;P(A|B)P(B|A)*P(A) / P(B) 首先是如何理解這個公式&#xff1f; 在B事件發生的條件下&#xff0c;A發生的概率 P(A|B) 在B事件發生的條件下&#xff0c;A和B同…

子網掩碼的隱形陷阱:為何能ping通卻無法HTTPS訪問

問題現象深度解析在近期企業網絡維護中&#xff0c;運維團隊發現一個具有教學意義的典型案例&#xff1a;某臺部署在10.165.111.0/24網段的業務服務器&#xff08;10.165.111.71&#xff09;可以成功ping通目標中間件主機(10.165.110.11)&#xff0c;但通過HTTPS協議訪問https:…

【ArcGIS】如何編輯圖層的屬性表

GIS按屬性選擇后刪除所選項呈現灰色_arcgis刪除字段灰色-CSDN博客

大數據各組件flume,datax,presto,DolphinScheduler,findBI在大數據數倉架構中的作用和功能。

一、數據倉庫核心價值鋪墊在講具體技術前&#xff0c;先明確數據倉庫&#xff08;Data Warehouse&#xff0c;簡稱數倉&#xff09; 的核心作用&#xff1a; 數據倉庫是 “整合企業多源數據、按業務主題組織、支持決策分析” 的結構化數據存儲體系&#xff0c;核心價值是打破數…

React From表單使用Formik和yup進行校驗

一、Formik的使用 官方文檔地址&#xff1a;https://formik.org/docs/tutorial#validation 首先安裝依賴 yarn add formik2.導入并初始化 import { useFormik } from formik; initialValues&#xff1a;初始化 輸入框的密碼和賬號 onSubmit&#xff1a;當點擊提交按鈕時&am…

netty-scoket.io路徑配置

1、服務端代碼 package com.yh.service.socket;import com.corundumstudio.socketio.SocketIOServer; import com.corundumstudio.socketio.store.RedissonStoreFactory; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory…

20250910榮品RD-RK3588-MID開發板在Android13系統下解決點卡迪的屏閃屏的問題

20250910榮品RD-RK3588-MID開發板在Android13系統下解決點卡迪的屏閃屏的問題 2025/9/5 15:44緣起&#xff1a;榮品RD-RK3588-MID開發板在Android13系統下解決點卡迪的屏。 按 POWER按鍵 關機之后&#xff0c;2s之內再次短按 POWER按鍵&#xff0c;開機之后屏會抖動。 2s后短按…

正態分布 - 計算 Z-Score 的 無偏估計

正態分布 - 計算 Z-Score 的 無偏估計 flyfish Z-Score公式與計算步驟 1 公式&#xff08;樣本Z-Score&#xff09; 實際應用中&#xff0c;我們幾乎不知道“總體均值/標準差”&#xff0c;所以常用樣本數據計算&#xff1a; zixi?xˉsz_i \frac{x_i - \bar{x}}{s}zi?sxi??…

ai生成文章,流式傳輸(uniapp,微信小程序)

1.環境nutui-uniappvue3tsunocss2.功能源碼包含ai生成邏輯&#xff0c;內容生成實時打字機功能&#xff0c;ai數據處理等<script setup lang"ts"> import {queryAIParams, } from /api/pagesA import { submitFn } from /api/aiimport Navbar from /component…