簡體   English   中英

是否可以使用 float16 使用 tensorflow 1 進行訓練?

[英]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 的文檔

收集的其他一些資源也可能有用(盡管似乎並不表明您必須做更多的事情) hereherehere

我建議不要手動轉換,因為您可能很容易失去精度(例如在推理過程中使用的BatchNorm統計數據),除非您了解特定層的來龍去脈。

此外,您還可以檢查來自 Google 的bfloat16 (腦浮點)類型,它具有float328位)的exponent部分和較小的分數。 float16相比,這允許它保持更大范圍的值(例如,在計算梯度時),這可以避免loss scaling

以上( bfloat16 )應該主要在 TPU 中有用,AFAIK NVidia GPU 對它的支持不是太好(如果我錯了,有人糾正我)。 這里有一些信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM