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

2020-12-21 機器之心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

相關焦點

  • TensorFlow2.1正式版上線:最後一次支持Python2,進一步支持TPU
    也就是說,如果使用 pip install tensorflow,則版本默認為是 gpu 版本(原始的 tensorflow-gpu 版本依然存在)。當然,不管有沒有英偉達版本的 GPU,tensorflow 依然能夠運行。如果需要使用 CPU 版本,用戶的安裝命令應該為:pip install tensorflow-cpu。
  • tensorflow2.4的重大改進
    主要特點和改進tf.distribute通過tf.distribute.experimental.ParameterServerStrategyAPI引入了對Keras模型的異步訓練的實驗支持。Keras混合精度APItf.keras.mixed_precision不再是實驗性的,並且允許在訓練期間使用16位浮點格式,從而在GPU上將性能提高了3倍,在TPU上提高了60%。請參閱下面的其他詳細信息。TF Profiler現在支持使用採樣模式API對多個工作進程進行性能分析。
  • tensorflow能做什麼_tensorflow2.0和1.0區別
    tensorflow的作用有:   1、圖像風格轉換,可以生成各種有意思的圖片。   2、給素描黑白畫,自動上色。   3、圖像描述。   4、人臉方面:推薦猜年齡的應用。   5、reinforcementlearning (強化學習)等等。
  • PyTorch 1.6、TensorFlow 2.3、Pandas 1.1 同日發布!都有哪些新...
    精通PyTorch或是TensorFlow,則要求不僅僅會掉包調參,並且 (1) 具有較為豐富的分布式訓練和調參經驗,這個是目前大型研究必備技能;(2) 了解框架的內部實現,可以對框架的功能擴展或錯誤定位,能參與工程部署。而這兩者都可以通過為PyTorch或TensorFlow貢獻源碼來積累經驗(雖然前者可能需要依託實驗室或大型企業的基礎設施)。
  • 谷歌TensorFlow 2.2.0正式發布 生成器支持動態形狀
    TensorFlow 2.2.0 正式發布了,該版本終止了對 Python 2 的支持。現在,新的 TensorFlow Docker 鏡像版本僅提供 Python 3。   主要特性和改進   · 將字符串張量的標量類型從 std::string 替換為 tensorflow::tstring   · TF 2 的新 Profiler,用於 CPU/GPU/TPU。它提供設備和主機性能分析,包括輸入管道和 TF Ops。
  • 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("/
  • Tensorflow 2.0 即將入場
    2.0版的設計對公眾開放:社區可以和Tensorflow開發人員一起工作,共同探討新功能。兼容性和連續性:Tensorflow 2.0會提供Tensorflow 1.x的兼容性模塊,也就是它會內置所有Tensorflow 1.x API的模塊。
  • 人工智慧學習入門之TensorFlow2.2版本安裝(Windows10)
    最新版本的TensorFlow不僅支持Linux作業系統,而且可以支持MacOS和Windows,今天我們就介紹一下如何在Windows10上安裝TensorFlow。為了後續便於學習,本文安裝的Tensorflow是基於Anaconda的,因此需要先安裝Anaconda。
  • TensorFlow 2.0開源工具書,30天「無痛」上手
    開源電子書地址:https://lyhue1991.github.io/eat_tensorflow2_in_30_days/GitHub 項目地址:https://github.com/lyhue1991/eat_tensorflow2_in_30_days為什麼一定要學
  • tensorflow2.1對應 GPU版本的安裝與卸載
    GTX965M顯卡,win10系統一、檢查tensorflow的Version假定tensorflow 安裝完成,安裝 tensorflow 請參考 集成環境,安裝超簡單>通過 命令行pythonimport tensorflow as tftf.
  • TensorFlow 2.X,會是它走下神壇的開始嗎?
    TF 1.X :令人又愛又恨TensorFlow 2.X 已經正式發布 1 年多了,一周多前 TF 2.4 剛剛發布,看 Release Notes 最新版仍然關注多機並行訓練、Keras 性能等新模塊,甚至發布了「TensorFlow 版」的 NumPy 工具。然而,除去這些新特性,TF 2.X 很多不和諧的問題仍然存在。
  • TensorFlow vs PyTorch:哪個是深度學習網絡編程的最佳框架呢?
    matplotlib.pyplot as pltepochs = 10batch_size=64對於TensorFlow,您僅需要以下庫:import tensorflow as tf而對於和PyTorch中創建神經網絡的方式實際上並沒有什麼不同,只是在一些細節上有所不同,比如程式設計師必須實現訓練和評估循環,以及在不同步驟中指定了一些超參數,比如epochs或batch_size。
  • Tensorflow Lite人體姿勢跟蹤功能上線:基於PosNet的實時人體姿態估計
    這個夏天,Tensorflow Lite 再度進化,加入了 PosNet 人體姿態估計模塊,性能再度加強!懷著激動的心情,我們發布了一個「TensorFlow Lite」示例應用程式(https://www.tensorflow.org/lite),通過它在安卓設備上通過使用「PoseNet」模型來實現人體姿勢估計。
  • 在TensorFlow裡模擬宇宙!提升模擬計算速度,成本降低1000倍
    大數據文摘出品來源:tensorflowblog編譯:睡不著的iris、劉俊寰去年6月,俄羅斯天文學家兼碼農小哥開發了一款名叫Space Engine的宇宙模擬遊戲將使用昂貴1000倍的混合模擬所模擬與真相進行比較(右)採用Mesh TensorFlow分布式框架仿真雖然原理看上去很簡單,但實際的挑戰還是很大的,畢竟宇宙真的很龐大!為了準確匹配當前和未來的觀測,我們要同時模擬數以億計的粒子的變化。
  • 五分鐘帶你入門TensorFlow
    1)安裝TensorFlowWindows上:安裝CPU版本:管理員模式打開命令行,輸入命令:pip install tensorflow安裝GPU版本:管理員模式打開命令行,輸入命令:pip install tensorflow-gpuLinux上:
  • TensorFlow和Caffe、MXNet、Keras等其他深度學習框架的對比
    Julia: http://github.com/malmaud/TensorFlow.jlNode.js: http://github.com/node-tensorflow/node-tensorflowR: http://github.com/rstudio/tensorflowTensorFlow 也有內置的 TF.Learn 和 TF.Slim
  • 如何用Amazon SageMaker 做分布式 TensorFlow 訓練?(千元亞馬遜...
    分布式訓練中的同步 Allreduce 梯度分布式 DNN 訓練的主要挑戰在於,在應用梯度來更新跨多個節點的多個 GPU 上的模型權重之前,需要在同步步驟中對所有 GPU 的反向傳播過程中計算出的梯度進行 Allreduce(平均化)。
  • 能看破並說破一切的TensorFlow
    每個邊界框都帶有以下信息:· 4個邊界框角坐標偏移值(cx,cy,w,h)· C個類別概率值(c1,c2...cp)SSD只預測邊界框的位置,而不預測其形狀。k個邊界框具有各自的預設形狀,這些形狀是在訓練前就設定好的。
  • 輸入示例,自動生成代碼:TensorFlow官方工具TF-Coder已開源
    項目地址:https://github.com/google-research/tensorflow-coderGoogle Colab 試用地址:https://colab.research.google.com/github/google-research/tensorflow-coder/blob/master/TF-Coder_Colab.ipynb
  • 兩月不到,如何從Python新手成為谷歌認證TensorFlow開發者?
    具體而言,TensorFlow 是一個免費的開源框架,支持用戶開發端到端的機器學習和深度學習項目,覆蓋從預處理到模型訓練和部署的整個流程。該框架最早由谷歌大腦團隊開發,在谷歌內部使用,現在已經得到廣泛應用。那麼,我們為什麼應該學習 TensorFlow 呢?因為它能做很多事,而且其應用的廣泛程度超乎你的想像。