TensorFlow 2.4來了:上線對分布式訓練和混合精度的新功能支持

2020-12-22 機器之心Pro

編輯:小舟、蛋醬

今天,谷歌正式發布了 TensorFlow 2.4,帶來了多項新特性和功能改進。

TensorFlow 2.4 的更新包括對於分布式訓練和混合精度的新功能支持,對 NumPy API 子集的試驗性支持以及一些用於監測性能瓶頸的新工具。

根據 TensorFlow 官方博客,本次更新的主要內容整理如下:

tf.distribute 中的新功能

參數伺服器策略

在 TensorFlow 2.4 中,tf.distribute 模塊引入了對使用 ParameterServerStrategy 和自定義訓練循環進行模型異步訓練的試驗性支持。和 MultiWorkerMirroredStrategy 類似,ParameterServerStrategy 是一種多工作器(multi-worker)數據並行策略,但梯度更新是異步的。

參數伺服器訓練集群由工作伺服器和參數伺服器組成。變量在參數伺服器上創建,然後在每個步驟中由工作器讀取和更新。變量的讀取和更新在工作器之間是獨立進行的,不存在任何同步。由於工作器彼此不依賴,因此該策略具有工作器容錯的優勢,如果使用可搶佔 VM,該策略將很有用。

多工作器鏡像策略

MultiWorkerMirroredStrategy 已經脫離試驗階段,成為穩定的 API。像單工作器的 MirroredStrategy 一樣,MultiWorkerMirroredStrategy 通過同步數據並行實現分布式訓練,顧名思義,藉助 MultiWorkerMirroredStrategy 可以在多臺機器上進行訓練,每臺機器都可能具有多個 GPU。

Keras 更新

混合精度

在 TensorFlow 2.4 中,Keras 混合精度 API 已經脫離試驗階段,成為穩定的 API。大多數 TensorFlow 模型使用 float32 dtype,但現在有些低精度數據類型佔用的內存更少,比如 float16。混合精度指的是在同一模型中使用 16 位和 32 位浮點數以進行更快的訓練。這一 API 可將模型性能在 GPU 上提高到 3 倍,在 TPU 上提高 60%。要使用混合精度 API,必須使用 Keras 層和優化器,但不一定需要使用其他 Keras 類。

優化器

本次更新包括重構 tf.keras.optimizers.Optimizer 類,讓 model.fit 的用戶和自定義訓練循環的用戶能夠編寫可與任何優化器一起使用的訓練代碼。所有內置 tf.keras.optimizer.Optimizer 子類都可接受 gradient_transformers 和 gradient_aggregator 參數,輕鬆定義自定義梯度變換。

重構之後,使用者可以在編寫自定義訓練循環時直接將損失張量傳遞給 Optimizer.minimize:

tape = tf.GradientTape()with tape: y_pred = model(x, training=True) loss = loss_fn(y_pred, y_true)# You can pass in the `tf.GradientTape` when using a loss `Tensor` as shown below.optimizer.minimize(loss, model.trainable_variables, tape=tape)

這些更新的目標是讓 Model.fit 和自定義訓練循環與優化器細節更加不相關,從而讓使用者無需修改即可編寫出與任何優化器共同使用的訓練代碼。

最後,TensorFlow 2.4 的更新還包括 Keras Functional API 內部的重構,改善了函數式模型構造所產生的內存消耗並簡化了觸發邏輯。這種重構可以保證 TensorFlowOpLayers 的行為可預測,並且可以使用 CompositeTensor 類型籤名(type signature)。

tf.experimental.numpy

TensorFlow 2.4 引入了對 NumPy API 子集的試驗性支持。該模塊可以運行由 TensorFlow 加速的 NumPy 代碼,由於這一 API 是基於 TensorFlow 構建的,因此可與 TensorFlow 無縫銜接,允許訪問所有 TensorFlow API 並通過編譯和自動矢量化提供優化後的運行。

例如,TensorFlow ND 數組可以與 NumPy 函數互通,類似地,TensorFlow NumPy 函數可以接受包括 tf.Tensor 和 np.ndarray 在內的不同類型輸入。

import tensorflow.experimental.numpy as tnp# Use NumPy code ininput pipelinesdataset = tf.data.Dataset.from_tensor_slices( tnp.random.randn(1000, 1024)).map(lambda z: z.clip(-1,1)).batch(100)# Compute gradients through NumPy codedef grad(x, wt):with tf.GradientTape() as tape: tape.watch(wt) output = tnp.dot(x, wt) output = tf.sigmoid(output)return tape.gradient(tnp.sum(output), wt)

新的性能分析工具

TensorFlow Profiler 是度量 TensorFlow 模型的訓練性能和資源消耗情況的工具,用來診斷性能瓶頸,最終加快訓練速度。

此前,TensorFlow Profiler 支持多 GPU 單主機訓練。到了 2.4 版本,使用者可以測試 MultiWorkerMirroredStrategy 的訓練工作了,比如使用採樣模式 API 按需配置,並連接到 MultiWorkerMirroredStrategy 工作器正在使用的同一伺服器。

# Start a profiler server before your model runs.tf.profiler.experimental.server.start(6009)# Model code goes here....# E.g. your worker IP addresses are 10.0.0.2, 10.0.0.3, 10.0.0.4, and you# would like to profile for a duration of 2 seconds. The profiling data will# be saved to the Google Cloud Storage path 「your_tb_logdir」.tf.profiler.experimental.client.trace('grpc://10.0.0.2:6009,grpc://10.0.0.3:6009,grpc://10.0.0.4:6009','gs://your_tb_logdir',2000)

另外,你可以通過向捕獲配置文件工具提供工作器地址來使用 TensorBoard 配置文件插件。配置之後,你可以使用新的 Pod Viewer tool 來選擇訓練步驟,並查看所有工作器上該步驟的 step-time 的細分。

TFLite Profiler

TFLite Profiler 則支持在 Android 中跟蹤 TFLite 內部信息,以識別性能瓶頸。

GPU 支持

TensorFlow 2.4 與 CUDA 11 和 cuDNN 8 配合運行,支持最新發布的英偉達安培架構 GPU,對於 CUDA 11 的新特性,可以參考英偉達開發者博客:

https://developer.nvidia.com/blog/cuda-11-features-revealed/

在新版本中,默認情況下會啟用安培 GPU 的新特性——對 TensorFloat-32 的支持。TensorFloat-32 又簡稱為 TF32,是英偉達 Ampere GPU 的一種數學精度模式,可導致某些 float32 運算(如矩陣乘法和卷積)在安培架構 GPU 上運行得更快,但精度略有降低。

若想更深入了解,可參閱文檔:

https://www.tensorflow.org/api_docs/python/tf/config/experimental/enable_tensor_float_32_execution

相關焦點

  • TensorFlow 2.1.0-rc2發布
    pip install tensorflow安裝的TF默認也有gpu支持了(windows、linux),pip install tensorflow-gpu仍舊可以用,如果考慮到包的大小,也可以用只支持CPU的:tensorflow-cpuWindows用戶:為了使用新的/d2ReducedOptimizeHugeFunctions
  • TensorFlow2.0-Keras入門
    最近在知乎上寫一些學習tensorflow2.0的筆記心得,整理成中文教程,希望幫助想學習tensorflow2的朋友更好的了解tensorflow2的同時,也是倒逼自己更好的學習。我始終相信:最好的學習是輸出知識,最好的成長是共同成長。希望可以通過這個公眾號和廣大的深度學習愛好者,一起學習成長。
  • 令人困惑的TensorFlow!
    讓我們來看看構建計算圖的一個示例。在下圖中,上半部分是我們運行的代碼及其輸出,下半部分是生成的計算圖。import tensorflow as tf計算圖:可見,僅僅導入 TensorFlow 並不會給我們生成一個有趣的計算圖。而只是一個單獨的,空白的全局變量。但當我們調用一個 TensorFlow 操作時,會發生什麼?
  • TensorFlow 2.1指南:keras模式、渴望模式和圖形模式(附代碼)
    發布了新的硬體體系結構,晶片和優化,以支持不斷增長的AI應用的部署。什麼時候是停下來重新考慮的好時機?那只有你會知道。對我來說,這一刻已經到來了。我一直在使用Keras和Tensorflow的1.x(TF1)在工作和我的個人項目,因為我在這個領域開始。
  • 如何在PyTorch和TensorFlow中訓練圖像分類模型
    TensorFlow和PyTorch無疑是業內最受歡迎的框架。我相信你會發現無窮的資源來學習這些深度學習框架之間的異同。在本文中,我們將了解如何在PyTorch和TensorFlow中建立基本的圖像分類模型。我們將從PyTorch和TensorFlow的簡要概述開始。
  • mnist tensorflow 預測專題及常見問題 - CSDN
    實驗大致步驟如下,加載MNIST數據集,同時初始化網絡超參; 建立計算圖; 建立Session會話,執行計算圖進行AlexNet模型訓練和結果預測(訓練模型和評估模型)。實現代碼如下, 1 #coding=utf-8 2 from __future__ import print_function 3 4 from tensorflow.examples.tutorials.mnist import input_data 5 mnist = input_data.read_data_sets("/
  • 使用Amazon SageMaker 運行基於 TensorFlow 的中文命名實體識別
    模型的主要創新點都在預訓練方法上,即用了Masked LM和Next Sentence Prediction兩種方法分別捕捉詞語和句子級別的表示。ALBERT(見參考資料4)基於BERT,但有一些改進,它可以在主要基準測試上獲得最先進的性能,而參數卻減少了30%。比如,對於albert_base_zh,它只有原始BERT模型的10%的參數,但是保留了主要精度。
  • 令人困惑的 TensorFlow!(II)
    可以通過張量、操作和變量的 .name 屬性訪問該名稱。絕大多數情況下,名稱會自動創建;例如,一個常量節點會以 Const 命名,當創建更多常量節點時,其名稱將是 Const_1,Const_2 等。還可以通過 name=的屬性設置節點名稱,列舉後綴仍會自動添加:代碼:import tensorflow as tfa = tf.constant(0.)
  • TensorFlow Recommenders 現已開源,讓推薦系統更上一層樓!
    我們先來準備數據。數據可從 TensorFlow Datasets 獲取。import tensorflow as tfimport tensorflow_datasets as tfdsimport tensorflow_recommenders as tfrs# Ratings data.
  • 【TF專輯 1】TensorFlow在Win10上的安裝教程和簡單示例
    2)  下載安裝Anaconda; 我下載的是Anaconda4.3.0For Windows 64bit(內置python3.6),下載好了就安裝,一直下一步。嘻嘻當然是python3.5啦)  4.安裝不同版本的python:conda create --name tensorflow python=3.5  (猜想輸入python=3.5版本後,系統會自動選擇一個3.5.x的版本吧)
  • TensorFlow 2入門指南,初學者必備!
    tensorflow as tffrom tensorflow.keras.layers import Densefrom tensorflow.keras.models import Sequential在這裡,我們從tensorflow
  • 【TF秘籍】令人困惑的 TensorFlow!(II)
    可以通過張量、操作和變量的 .name 屬性訪問該名稱。絕大多數情況下,名稱會自動創建;例如,一個常量節點會以 Const 命名,當創建更多常量節點時,其名稱將是 Const_1,Const_2 等。還可以通過 name=的屬性設置節點名稱,列舉後綴仍會自動添加:代碼:import tensorflow as tfa = tf.constant(0.)
  • 社交距離檢測器——Tensorflow檢測模型設計
    在隔離期間,我花時間在github上探索Tensorflow的大量預訓練模型。這樣做時,我偶然發現了一個包含25 個帶有性能和速度指標的預訓練對象檢測模型的存儲庫。擁有一些計算機視覺知識並給出了實際的背景知識,我認為使用其中之一來構建社交隔離應用程式可能會很有趣。
  • TensorFlow 2.X,會是它走下神壇的開始嗎?
    TF 1.X :令人又愛又恨TensorFlow 2.X 已經正式發布 1 年多了,一周多前 TF 2.4 剛剛發布,看 Release Notes 最新版仍然關注多機並行訓練、Keras 性能等新模塊,甚至發布了「TensorFlow 版」的 NumPy 工具。
  • 詳解深度強化學習展現TensorFlow 2.0新特性(代碼)
    ,一切是否按著預測正常工作:>>> import tensorflow as tf>>> print(tf.>>> print(tf.reduce_sum([1, 2, 3, 4, 5]))tf.Tensor(15, shape=(), dtype=int32)如果讀者對eager模式並不熟悉,那麼簡單來講,從本質上它意味著計算是在運行時(runtime)被執行的,而不是通過預編譯的圖(graph)來執行。
  • 谷歌重磅推出TensorFlow Graphics:為3D圖像任務打造的深度學習利器
    從空間變換器(spatial transformers)到可微圖形渲染器,這些新型的神經網絡層利用計算機視覺、圖形學研究獲得的知識來構建新的、更高效的網絡架構。它們將幾何先驗和約束顯式地建模到神經網絡中,為能夠以自監督的方式進行穩健、高效訓練的神經網絡架構打開了大門。
  • TensorFlow2.x GPU版安裝與CUDA版本選擇指南
    目前Python最新release版本為3.9.0,配合TensorFlow2版本使用目前常見的以Python3.6和3.7,大家根據自己的開發平臺選擇合適的版本下載即可Windows平臺下載地址
  • TensorFlow 2.4正式支持多工作節點多GPU分散訓練機器學習模型
    深度學習函數庫TensorFlow釋出最新版本2.4,該版本支持新的分散式訓練策略,Keras還更新了混合精度功能,加速模型訓練工作,此外,TensorFlow 2.4提供Python開發者,熟悉的數值運算函數庫NumPy支持,而用於監控和診斷的分析工具也有更新,以支持新加入的功能
  • 基於Python和Tensorflow構建完整的電影推薦算法
    數據連結:https://grouplens.org/datasets/movielens/下載文件:ml-latest-smallimport pandas as pdimport numpy as npimport tensorflow as tf導入ratings.csv
  • 能看破並說破一切的TensorFlow
    每個邊界框都帶有以下信息:· 4個邊界框角坐標偏移值(cx,cy,w,h)· C個類別概率值(c1,c2...cp)SSD只預測邊界框的位置,而不預測其形狀。k個邊界框具有各自的預設形狀,這些形狀是在訓練前就設定好的。