[英]Is it possible to train with tensorflow 1 using float16?
目前使用默認設置在 tensorflow 模型上訓練 keras - float32。
訓練后網絡被量化:將權重轉換為 float16。 這將性能提高了 ~x3,同時保持相同的精度。
我試圖從一開始就使用 float16 進行訓練,但失敗了。 我找不到任何鏈接來解釋這是否可能,如果不可能,為什么不可能。
來自 NVidia 的自動混合精度可能是一種方法。
從我從1.14
收集的內容來看,它在上游得到(被)支持。 您所要做的就是像這樣包裝優化器:
opt = tf.train.experimental.enable_mixed_precision_graph_rewrite(opt)
您可能還需要從 Python 腳本中設置特定的environment variable
,即:
os.environ[‘TF_ENABLE_AUTO_MIXED_PRECISION’] = ‘1’
以上應該已經采用了良好的混合精度訓練實踐(例如損失縮放,在必要時保持float32
等)。
這個解決方案的好資源應該是官方 NVidia 的文檔。
收集的其他一些資源也可能有用(盡管似乎並不表明您必須做更多的事情) here 、 here或here 。
我建議不要手動轉換,因為您可能很容易失去精度(例如在推理過程中使用的BatchNorm
統計數據),除非您了解特定層的來龍去脈。
此外,您還可以檢查來自 Google 的bfloat16
(腦浮點)類型,它具有float32
( 8
位)的exponent
部分和較小的分數。 與float16
相比,這允許它保持更大范圍的值(例如,在計算梯度時),這可以避免loss scaling
。
以上( bfloat16
)應該主要在 TPU 中有用,AFAIK NVidia GPU 對它的支持不是太好(如果我錯了,有人糾正我)。 這里有一些信息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.