3模型大小 混合精度對模型訓練和推理的影響

2021-10-16 05:27:18 字數 1929 閱讀 2465

計算機使用0/1來標識資訊,每個0或每個1代表乙個bit。資訊一般會以下面的三種形式表示:

1 字串

字串的最小單元是char,每個char佔8個bit,也就是1個byte。比如字串「abc」這三個字元組成的串占用的儲存空間:

儲存空間=1x3=3(bytes)=24(bits)
2 整數整數包括int4、int8、int16、int32、int64,int後面的數值表示該整數型別占用的byte個數。

3 浮點數

浮點數包括float16、float32、float64,同樣,float後面的數字表示該浮點型占用byte的個數。而這三種浮點數又有個不同的名字:

有了上面單精度、雙精度、混合精度三種形式的解釋,混合精度就很好理解了。就是計算中存在不同精度的浮點數,比如:

float16+float32
先說結論:

壓縮模型大小

我們一般模型訓練使用的是float32,那換成混合精度有什麼好處呢?為了更好理解,我們將float32的模型引數都換成float16. 在引數數目不變的情況下,將float32的引數都更換成float16後,模型占用的記憶體就變成了之前的一半。所以,混合精度最直觀的優點就是能夠壓縮模型的大小。

前面為了好理解,將float32全都轉成了float16,但在實際的模型訓練中,float16因為能表示的精度有限,會導致資料溢位(超出能表示的範圍),所以,只能部分操作用float16,部分操作用float32.最終導致混合精度的提出。

混合精度比較經典的**是這篇:

mixed precision training

**介紹了混合精度在模型訓練中的方法,並在多個訓練場景中證實,混合精度相對於完全float32的模型的引數訓練,最終的演算法效果影響不大。

先說結論:

理論上沒有提公升,反而會下降。但在結合計算平台特性,訓練和推理速度會有提公升

理論上混合精度只能壓縮模型的大小,在訓練階段和推理階段,都能能大大緩解cpu記憶體或gpu視訊記憶體限制對模型訓練壓力。

因為模型結構和引數數量沒有發生顯著的變化(忽略混合精度對模型訓練,引數更新的影響),理論上訓練和推理速度應該不會有大的改變。而且,因為不同的精度需要進行對齊再運算(計算時,先將不同的精度轉變成統一的精度後,再進行計算),返回導致計算效率降低,從而會導致訓練和推理的速度降低。

但實際上計算平台對這種特殊的計算場景一般都有專門的硬體計算加速,比如:

1 具備專用的半精度計算單元

gpu針對float16、float32運算,都有專門的計算單元。

2 單精度支援兩個半精度計算同時進行

比如,英偉達的gpu tesla p100支援在乙個float32裡同時進行2次float16的半精度浮點計算,所以對於半精度的理論峰值可以達到單精度浮點數計算能力的兩倍。

3 tensorcore

英偉達的瓦特(如tesla v100)和圖靈架構(如tesla t4)都具備tensorcore單元,能完成單指令的混合精度矩陣乘加運算。

我們以英偉達開源的bert評測對比下:

模型訓練:

模型推理:

混合精度可以明顯的對模型的大小進行壓縮(記憶體占用),同時,針對優化的計算平台,在模型訓練和推理的速度方面也都有提公升。

《nvidia gpu的浮點計算能力》

《nvidia bert評測》

模型訓練和模型擬合的幾點理解

模型訓練和模型擬合的幾點理解,歡迎大牛指點 對於我們日常工作,拿到乙個挖掘專案,一般都是先走一遍標準化的資料流程,效果好大家歡喜,效果不好各種調參。這裡有幾點想說 1 在開始挖掘專案之前,是否有評估挖掘專案的可行性?2 挖掘專案可行,現有的資料是否可以支撐專案的開展?3 如何判斷現有資料可支撐需求呢...

python3 高斯混合模型GMM

預備知識 em演算法原理 gmm演算法原理 本文分為一元高斯分布的em演算法以及多元高斯分布的em演算法,分別採用兩本書上的資料 統計學習方法 和 機器學習 python未完成,可以看r實現的。r 高斯混合模型gmm 多元高斯混合模型採用的是 機器學習 中的西瓜資料集。多元高斯分布中的密度值pyth...

yolo3,模型訓練流程

訓練前準備 1,準備資料集 和邊界矩形txt 邊界矩形txt內容 類別從0開始 labeltext str int labstr 1 str x str y str w str h n x,y,w,h為目標的矩形中心 x,y wh目標寬高 2,修改cfg檔案 convolutional size 1...