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

昨日,TensorFlow 官方宣布:TensorFlow 2.9 來(lái)了!距離上次  2.8 版本 的更新僅僅過(guò)去三個(gè)月。

image.png

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

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

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

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

TensorFlow 已經(jīng)與英特爾合作,將 oneDNN 性能庫(kù)與 TensorFlow 集成,以實(shí)現(xiàn)在英特爾 CPU 上的最高性能。從 TensorFlow 2.5 以來(lái),TensorFlow 已經(jīng)對(duì) 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 庫(kù)作為 TensorFlow 2.9 中的默認(rèn)后端 CPU 優(yōu)化!TensorFlow 用戶(hù)現(xiàn)在將看到由我們的開(kāi)放軟件優(yōu)化驅(qū)動(dòng)的 AI 性能加速,無(wú)需更改代碼!

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

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

DTensor

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

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

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

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

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)方式,使其更簡(jiǎn)單、可預(yù)測(cè)和可配置。

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

支持 WSL2

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

確定性行為

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

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

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

tf.keras.utils.set_random_seed(1)

tf.config.experimental.enable_op_determinism()

第一行設(shè)置 Python、NumPy 和 TensorFlow 的隨機(jī)種子,這是確定性所必需的。第二行使每個(gè) TensorFlow op 具有確定性。請(qǐng)注意,確定性通常是以降低性能為代價(jià)的,因此當(dāng)啟用 op 確定性時(shí),你的模型可能會(huì)運(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)化器目錄,用戶(hù)可以更輕松地定制和擴(kuò)展。

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

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

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


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