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

2021-01-15 澎湃新聞

選自TensorFlow Blog

機器之心編譯

編輯:小舟、蛋醬

今天,谷歌正式發布了 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 in input pipelines

dataset = 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

視覺模型核心難點攻破:小目標檢測技術詳解

「三小時AI開發進階」公開課上線!本周四(12月17日)20:00,百度高級研發工程師可樂老師將在第一課《小目標檢測技術詳解》中介紹:

發展原理:目標檢測任務綜述

技術講解:小目標檢測場景定義、難點分析與相應算法講解

案例分析:貨架擋板與電網巡檢效果優化案例解析

現場實戰:基於EasyDL完成物體檢測模型開發與部署

掃碼進群聽課,還有機會贏取100元京東卡、《智能經濟》實體書、限量百度滑鼠墊多重好獎!

© THE END

轉載請聯繫本公眾號獲得授權

投稿或尋求報導:content@jiqizhixin.com喜歡此內容的人還喜歡

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

閱讀原文

相關焦點

  • 步履不停:TensorFlow 2.4新功能一覽!
    TensorFlow 2.4 正式發布!隨著對分布式訓練和混合精度提供更多支持,加入新的 Numpy 前端及用於監控和診斷性能瓶頸的工具,這個版本的亮點在於推出新功能,以及對性能和擴展方面的增強。
  • TensorFlow2.1正式版上線:最後一次支持Python2,進一步支持TPU
    也就是說,如果使用 pip install tensorflow,則版本默認為是 gpu 版本(原始的 tensorflow-gpu 版本依然存在)。當然,不管有沒有英偉達版本的 GPU,tensorflow 依然能夠運行。如果需要使用 CPU 版本,用戶的安裝命令應該為:pip install tensorflow-cpu。
  • PyTorch 1.6來了:新增自動混合精度訓練、Windows版開發維護權移交...
    一些亮點包括:在英偉達的幫助下增加了對自動混合精度(AMP)訓練的本地支持,並且具有穩定的功能;增加了對 TensorPipe 的本地支持;在前端 API 增加了對複雜張量的支持;提供張量級內存消耗信息的新分析工具;分布式數據並行(DDP)訓練和遠程過程調用(RPC
  • 終於來了,TensorFlow 新增官方 Windows 支持
    儘管 Windows 的用戶們已經可以在 Docker 容器中運行 TensorFlow 了,我們仍然希望提供更加完整的原生體驗,包括對於 GPU 的支持。」隨著 TensorFlow r0.12 版的發布,這一開源軟體庫現已支持 Windows7、10 和 Server 2016。同時,這一新版本可以讓用戶在 TensorFlow 訓練中得到 CUDA 8 的 GPU 加速。
  • TensorFlow 攜手 NVIDIA,使用 TensorRT 優化 TensorFlow Serving...
    目前,TensorFlow Serving 1.13 已實現對 TF-TRT 的支持,而不久後  TensorFlow 2.0 也將支持 TF-TRT 的實現。 TensorFlow 在官方博客中對這項成果進行了發布,雷鋒網 AI 科技評論編譯如下。
  • TensorFlow極簡教程:創建、保存和恢復機器學習模型
    需求Python3 (https://www.python.org/)TensorFlow (https://www.tensorflow.org/)NumPy (http://www.numpy.org/)TensorFlow:保存/恢復和混合多重模型在第一個模型成功建立並訓練之後,你或許需要了解如何保存與恢復這些模型。
  • TensorFlow與PyTorch之爭,哪個框架最適合深度學習
    論文地址:http://download.tensorflow.org/paper/whitepaper2015.pdfTensorFlow 現已被公司、企業與創業公司廣泛用於自動化工作任務和開發新系統,其在分布式訓練支持、可擴展的生產和部署選項、多種設備(比如安卓)支持方面備受好評。
  • PyTorch 1.6、TensorFlow 2.3、Pandas 1.1 同日發布!都有哪些新...
    精通PyTorch或是TensorFlow,則要求不僅僅會掉包調參,並且 (1) 具有較為豐富的分布式訓練和調參經驗,這個是目前大型研究必備技能;(2) 了解框架的內部實現,可以對框架的功能擴展或錯誤定位,能參與工程部署。而這兩者都可以通過為PyTorch或TensorFlow貢獻源碼來積累經驗(雖然前者可能需要依託實驗室或大型企業的基礎設施)。
  • TensorFlow極速入門
    最後給出了在 tensorflow 中建立一個機器學習模型步驟,並用一個手寫數字識別的例子進行演示。1、tensorflow是什麼?tensorflow 是 google 開源的機器學習工具,在2015年11月其實現正式開源,開源協議Apache 2.0。
  • 如何在PyTorch和TensorFlow中訓練圖像分類模型
    TensorFlow和PyTorch無疑是業內最受歡迎的框架。我相信你會發現無窮的資源來學習這些深度學習框架之間的異同。在本文中,我們將了解如何在PyTorch和TensorFlow中建立基本的圖像分類模型。我們將從PyTorch和TensorFlow的簡要概述開始。
  • TensorFlow 2.1指南:keras模式、渴望模式和圖形模式(附代碼)
    發布了新的硬體體系結構,晶片和優化,以支持不斷增長的AI應用的部署。什麼時候是停下來重新考慮的好時機?那只有你會知道。對我來說,這一刻已經到來了。我一直在使用Keras和Tensorflow的1.x(TF1)在工作和我的個人項目,因為我在這個領域開始。我完全喜歡Keras庫的高級方法和Tensorlfow的低級方法,這些方法可以讓我們在需要更多自定義時在後臺進行更改。
  • TensorFlow 資源大全中文版
    生成手寫體 – 實現Alex Grave的論文中關於生成手寫體的部分TensorFlow實現神經圖靈機 – TensorFlow實現神經圖靈機基於物體搜索和過濾視頻 – 使用卷積神經網絡基於視頻中的物品、地點等來搜索、過濾和描述視頻使用TensorFlow來轉換莎士比亞作品和現代版本的英語 – 實現莎士比亞作品和現代版本的英語的單語轉換聊天機器人 – 一個
  • Tensorflow 2.0 即將入場
    2.0版的設計對公眾開放:社區可以和Tensorflow開發人員一起工作,共同探討新功能。兼容性和連續性:Tensorflow 2.0會提供Tensorflow 1.x的兼容性模塊,也就是它會內置所有Tensorflow 1.x API的模塊。
  • 玩轉TensorFlow?你需要知道這30功能
    對於線上訓練來說,這是一個量很大的工作!https://www.tensorflow.org/tfx/data_validation/?hl=zh-cn4)TFX -TensorFlow 變換同樣地,你可能希望用於重新訓練的數據也能被自動進行預處理:對特定特性進行歸一化、將字符串轉換為數值等。
  • 谷歌正式發布TensorFlow 1.5,究竟提升了哪些功能?
    支持 CUDA 9 和 cuDNN 7 被認為是本次更新的最重要部分。機器之心對這次更新的重大改變以及主要功能和提升進行了編譯介紹,原文請見文中連結。GitHub 地址:https://github.com/tensorflow/tensorflow/releases/tag/v1.5.0原始碼(zip):https://github.com/tensorflow/tensorflow/archive/v1.5.0.zip原始碼(tar.gz):https://github.com/tensorflow/tensorflow
  • 這裡有一份TensorFlow2.0中文教程
    簡單的圖像分類任務探一探此文章中,機器之心為大家推薦一個持續更新的中文教程,方便大家更系統的學習、使用 TensorFlow 2.0 : 知乎專欄地址:https://zhuanlan.zhihu.com/c_1091021863043624960 Github 項目地址:https://github.com/czy36mengfei/tensorflow2_tutorials_chinese
  • Keras和TensorFlow究竟哪個會更好?
    我會使用基於 TensorFlow 的標準 keras 模塊和 tf.keras 模塊,來實現一個卷積神經網絡(CNN)。然後,基於一個示例數據集,來訓練這些 CNN,然後檢查所得結果,你會發現,Keras 和 TensorFlow 是可以和諧共處的。
  • TensorFlow入門簡介,新手請看這裡!
    TensorFlow將複雜的數據結構傳輸至人工智慧神經網絡進行分析和處理。  2017年2月,TensorFlow 1.0版正式發布,其當年的提交數目就已超過2.1萬,其中還有部分外部貢獻者。  TensorFlow支持算法  TensorFlow表達了高層次的機器學習計算,大大簡化了第一代系統(DistBelief),並且具備更好的靈活性和可延展性。TensorFlow一大亮點是支持異構設備分布式計算,它能夠在各個平臺上自動運行模型,從手機、單個CPU / GPU直到成百上千GPU卡組成的分布式系統。
  • PyTorch 0.2發布:更多NumPy特性,高階梯度、分布式訓練等
    李林 編譯整理量子位 報導 | 公眾號 QbitAIFacebook的機器學習框架(之一)PyTorch今天發布了新版本:0.2.0。這一版本引入了NumPy風格的Broadcasting、Advanced Indexing,增加了高階梯度和分布式PyTorch。
  • 從框架優缺點說起,這是一份TensorFlow入門極簡教程
    谷歌今日上線基於 TensorFlow 的機器學習速成課程(中文版)機器之心 GitHub 項目:從零開始用 TensorFlow 搭建卷積神經網絡教程 | 從零開始:TensorFlow 機器學習模型快速部署指南分布式 TensorFlow 入坑指南:從實例到代碼帶你玩轉多機器深度學習三天速成!