TensorFlow 2.9上線:oneDNN改進(jìn)實(shí)現(xiàn)CPU性能優(yōu)化,WSL2開箱即用
TensorFlow 2.9上線:oneDNN改進(jìn)實(shí)現(xiàn)CPU性能優(yōu)化,WSL2開箱即用 2022-05-20 14:38:00 TensorFlow 2.9上線:oneDNN改進(jìn)實(shí)現(xiàn)CPU性能優(yōu)化,WSL2開箱即用 0

昨日,TensorFlow 官方宣布:TensorFlow 2.9 來了!距離上次  2.8 版本 的更新僅僅過去三個月。

image.png

新版本亮點(diǎn)包括如下:

oneDNN 的性能改進(jìn);DTensor 的發(fā)布,這是一種新 API,可用于從數(shù)據(jù)并行無縫遷移到模型并行;對核心庫進(jìn)行了改進(jìn),包括 Eigen、tf.function 統(tǒng)一以及對 Windows 的 WSL2 的新支持;還為 tf.function retracing 和 Keras 優(yōu)化器發(fā)布了新的實(shí)驗(yàn)性 API。

下面讓我們來看看 TensorFlow 2.9 具體的改進(jìn)都有哪些。

TensorFlow 2.9 新特性提高 CPU 性能:oneDNN

TensorFlow 已經(jīng)與英特爾合作,將 oneDNN 性能庫與 TensorFlow 集成,以實(shí)現(xiàn)在英特爾 CPU 上的最高性能。從 TensorFlow 2.5 以來,TensorFlow 已經(jīng)對 oneDNN 進(jìn)行了實(shí)驗(yàn)性支持,它可以提供高達(dá) 4 倍的性能提升。在 TensorFlow 2.9 中,默認(rèn)在 Linux x86 包和具有神經(jīng)網(wǎng)絡(luò)硬件功能(如 AVX512_VNNI、AVX512_BF16、AMX 等)的 CPU 上啟用 oneDNN 優(yōu)化,這些功能可在 Intel Cascade Lake 和更新的 CPU 上找到。

英特爾表示:我們很高興與 GoogleAI 合作,將 oneDNN 庫作為 TensorFlow 2.9 中的默認(rèn)后端 CPU 優(yōu)化!TensorFlow 用戶現(xiàn)在將看到由我們的開放軟件優(yōu)化驅(qū)動的 AI 性能加速,無需更改代碼!

在啟用 oneDNN 優(yōu)化的情況下運(yùn)行 TensorFlow 的用戶,可能會觀察到與關(guān)閉優(yōu)化時略有不同的數(shù)值結(jié)果,這是因?yàn)楦↑c(diǎn)舍入方法和順序不同,可能會產(chǎn)生輕微的誤差。

如果上述情況給你帶來麻煩,請?jiān)谶\(yùn)行 TensorFlow 程序之前通過設(shè)置 TF_ENABLE_ONEDNN_OPTS=0 來關(guān)閉優(yōu)化。假如你要重新啟用它們,請?jiān)谶\(yùn)行 TensorFlow 程序之前設(shè)置 TF_ENABLE_ONEDNN_OPTS=1。要驗(yàn)證優(yōu)化是否啟用,請?jiān)诔绦蛉罩局胁檎乙?oneDNN custom operations are on 開頭的消息。 

DTensor

DTensor 是一種新的 TensorFlow API,可用于分布式模型處理,它允許模型無縫地從數(shù)據(jù)并行遷移到基于單程序多數(shù)據(jù)(SPMD)的模型并行。

DTensor 的核心設(shè)計原則如下:

設(shè)備無關(guān) API:這允許在 CPU、GPU 或 TPU 上使用相同的模型代碼,包括跨設(shè)備類型劃分的模型;多客戶端執(zhí)行:移除 coordinator 并讓每個任務(wù)驅(qū)動其本地連接的設(shè)備,從而允許在不影響啟動時間的情況下擴(kuò)展模型;global perspective VS per-replica:傳統(tǒng)上使用 TensorFlow,分布式模型代碼是圍繞 replicas 編寫的,但使用 DTensor,模型代碼是從 global perspective 編寫的,每個 replica 代碼由 DTensor 運(yùn)行時生成和運(yùn)行。

TensorFlow 官方已經(jīng)開發(fā)了幾個關(guān)于 DTensor 的入門教程,參考資料如下:

DTensor 概念:https://www.tensorflow.org/guide/dtensor_overview帶有 DTensors 分布式 ML:https://www.tensorflow.org/tutorials/distribute/dtensor_ml_tutorial將 DTensors、Keras 聯(lián)合使用:https://www.tensorflow.org/tutorials/distribute/dtensor_keras_tutorialtf.function 的 TraceType

新版本已經(jīng)改進(jìn)了 tf.function 回溯(retraces)方式,使其更簡單、可預(yù)測和可配置。

所有關(guān)于 tf.function 的參數(shù)被分配一個 tf.types.experimental.TraceType。自定義用戶類可以使用跟蹤協(xié)議(tf.types.experimental.SupportsTracingProtocol)聲明一個 TraceType。TraceType 系統(tǒng)使理解追溯規(guī)則變得很容易。

支持 WSL2

WSL2 允許開發(fā)人員直接在 Windows 上運(yùn)行 Linux 環(huán)境,而不需要傳統(tǒng)虛擬機(jī)或雙啟動設(shè)置。TensorFlow 現(xiàn)在支持 WSL2 開箱即用,包括 GPU 加速。

確定性行為

API tf.config.experimental.enable_op_determinism 使得 TensorFlow 的 op 是確定性的。確定性意味著如果用戶使用相同的輸入多次運(yùn)行一個 op,則 op 每次都返回完全相同的輸出,這對于調(diào)試模型很有用。

通常來講,許多 op 是不確定的,因?yàn)樵?op 中使用了線程,這些線程可以以不確定的順序添加浮點(diǎn)數(shù)。

TensorFlow 2.8 引入了一個 API 來使 op 具有確定性,TensorFlow 2.9 在某些情況下提高了確定性性能。如果你希望 TensorFlow 模型確定性地運(yùn)行,只需將以下內(nèi)容添加到程序的開頭:

tf.keras.utils.set_random_seed(1)

tf.config.experimental.enable_op_determinism()

第一行設(shè)置 Python、NumPy 和 TensorFlow 的隨機(jī)種子,這是確定性所必需的。第二行使每個 TensorFlow op 具有確定性。請注意,確定性通常是以降低性能為代價的,因此當(dāng)啟用 op 確定性時,你的模型可能會運(yùn)行得更慢。

使用 Keras 優(yōu)化訓(xùn)練

TensorFlow 2.9 中添加了 Keras Optimizer API 的新實(shí)驗(yàn)版本,即 tf.keras.optimizers.experimental。該 API 提供更統(tǒng)一和擴(kuò)展的內(nèi)置優(yōu)化器目錄,用戶可以更輕松地定制和擴(kuò)展。

在未來的版本中,tf.keras.optimizers.experimental.Optimizer(及子類)將取代 tf.keras.optimizers.Optimizer(及子類),這意味著使用舊版本 Keras 優(yōu)化器的工作流將自動切換至新的優(yōu)化器。

如下為新優(yōu)化器類的一些亮點(diǎn):

一些模型的訓(xùn)練速度越來越快;更易于編寫自定義優(yōu)化器;內(nèi)置對模型權(quán)重移動平均的支持(Polyak 平均)。


推薦文章欄目:
產(chǎn)品推薦
熱門標(biāo)簽
解決方案
客服
客服
電話
電話
4000-780-190
樣機(jī)申請
樣機(jī)申請
0
頂部
頂部