一,、fp16和fp32介紹
- fp16是指采用2字節(jié)(16位)進(jìn)行編碼存儲(chǔ)的一種數(shù)據(jù)類型,;同理fp32是指采用4字節(jié)(32位);
- 如上圖,,fp16第一位表示+-符號(hào),,接著5位表示指數(shù),最后10位表示分?jǐn)?shù),;
二、為什么應(yīng)用fp16訓(xùn)練:
- fp16和fp32相比對(duì)訓(xùn)練的優(yōu)化:
- 1.內(nèi)存占用減少:很明顯,,應(yīng)用fp16內(nèi)存占用比原來(lái)更小,,可以設(shè)置更大的batch_size
- 2.加速計(jì)算:加速計(jì)算只在最近的一些新gpu中,這一塊我還沒(méi)有體驗(yàn)到好處...有論文指出fp16訓(xùn)練速度可以是fp32的2-8倍
三,、應(yīng)用fp16存在問(wèn)題
四,、實(shí)踐對(duì)比
實(shí)踐代碼:
1 2 3 4
| from apex import amp
model, optimizer = amp.initialize(model, optimizer, opt_level="O1") # 這里是“歐一”,,不是“零一”
with amp.scale_loss(loss, optimizer) as scaled_loss:
scaled_loss.backward() |
- 這里我直接應(yīng)用fairseq代碼的fp16參數(shù):gpu用1080Ti簡(jiǎn)單試驗(yàn)了下
- fp16:
- fp32:
- 總結(jié):1080Ti應(yīng)用fp16確實(shí)可以省內(nèi)存,但是理論上是不能加速的啊,,這里小朋友有比較多問(wèn)號(hào),???
- 混合精度加速,,需要用到 Volta 結(jié)構(gòu)的GPU,,只有V100 和 TITAN V 系列是支持 TensorCore 加速計(jì)算
引用:
- https://zhuanlan.zhihu.com/p/79887894
- https://en./wiki/Half-precision_floating-point_format
- https://zhuanlan.zhihu.com/p/103685761
- https:///pdf/1710.03740.pdf
|