↑↑↑點(diǎn)擊上方藍(lán)字,回復(fù)資料,10個(gè)G的驚喜
選自 | TensorFlow Blog?轉(zhuǎn)自 | 機(jī)器之心?編輯 | 小舟、蛋醬
近日,谷歌正式發(fā)布了 TensorFlow 2.4,帶來(lái)了多項(xiàng)新特性和功能改進(jìn)。
TensorFlow 2.4 的更新包括對(duì)于分布式訓(xùn)練和混合精度的新功能支持,對(duì) NumPy API 子集的試驗(yàn)性支持以及一些用于監(jiān)測(cè)性能瓶頸的新工具。根據(jù) TensorFlow 官方博客,本次更新的主要內(nèi)容整理如下:在 TensorFlow 2.4 中,tf.distribute 模塊引入了對(duì)使用 ParameterServerStrategy 和自定義訓(xùn)練循環(huán)進(jìn)行模型異步訓(xùn)練的試驗(yàn)性支持。和 MultiWorkerMirroredStrategy 類似,ParameterServerStrategy 是一種多工作器(multi-worker)數(shù)據(jù)并行策略,但梯度更新是異步的。參數(shù)服務(wù)器訓(xùn)練集群由工作服務(wù)器和參數(shù)服務(wù)器組成。變量在參數(shù)服務(wù)器上創(chuàng)建,然后在每個(gè)步驟中由工作器讀取和更新。變量的讀取和更新在工作器之間是獨(dú)立進(jìn)行的,不存在任何同步。由于工作器彼此不依賴,因此該策略具有工作器容錯(cuò)的優(yōu)勢(shì),如果使用可搶占 VM,該策略將很有用。MultiWorkerMirroredStrategy 已經(jīng)脫離試驗(yàn)階段,成為穩(wěn)定的 API。像單工作器的 MirroredStrategy 一樣,MultiWorkerMirroredStrategy 通過(guò)同步數(shù)據(jù)并行實(shí)現(xiàn)分布式訓(xùn)練,顧名思義,借助 MultiWorkerMirroredStrategy 可以在多臺(tái)機(jī)器上進(jìn)行訓(xùn)練,每臺(tái)機(jī)器都可能具有多個(gè) GPU。
在 TensorFlow 2.4 中,Keras 混合精度 API 已經(jīng)脫離試驗(yàn)階段,成為穩(wěn)定的 API。大多數(shù) TensorFlow 模型使用 float32 dtype,但現(xiàn)在有些低精度數(shù)據(jù)類型占用的內(nèi)存更少,比如 float16。混合精度指的是在同一模型中使用 16 位和 32 位浮點(diǎn)數(shù)以進(jìn)行更快的訓(xùn)練。這一 API 可將模型性能在 GPU 上提高到 3 倍,在 TPU 上提高 60%。要使用混合精度 API,必須使用 Keras 層和優(yōu)化器,但不一定需要使用其他 Keras 類。本次更新包括重構(gòu) tf.keras.optimizers.Optimizer 類,讓 model.fit 的用戶和自定義訓(xùn)練循環(huán)的用戶能夠編寫可與任何優(yōu)化器一起使用的訓(xùn)練代碼。所有內(nèi)置 tf.keras.optimizer.Optimizer 子類都可接受 gradient_transformers 和 gradient_aggregator 參數(shù),輕松定義自定義梯度變換。重構(gòu)之后,使用者可以在編寫自定義訓(xùn)練循環(huán)時(shí)直接將損失張量傳遞給 Optimizer.minimize:tape = tf.GradientTape()with tape: y_pred = model(x, training=True) loss = loss_fn(y_pred, y_true)
optimizer.minimize(loss, model.trainable_variables, tape=tape)
這些更新的目標(biāo)是讓 Model.fit 和自定義訓(xùn)練循環(huán)與優(yōu)化器細(xì)節(jié)更加不相關(guān),從而讓使用者無(wú)需修改即可編寫出與任何優(yōu)化器共同使用的訓(xùn)練代碼。最后,TensorFlow 2.4 的更新還包括 Keras Functional API 內(nèi)部的重構(gòu),改善了函數(shù)式模型構(gòu)造所產(chǎn)生的內(nèi)存消耗并簡(jiǎn)化了觸發(fā)邏輯。這種重構(gòu)可以保證 TensorFlowOpLayers 的行為可預(yù)測(cè),并且可以使用 CompositeTensor 類型簽名(type signature)。TensorFlow 2.4 引入了對(duì) NumPy API 子集的試驗(yàn)性支持。該模塊可以運(yùn)行由 TensorFlow 加速的 NumPy 代碼,由于這一 API 是基于 TensorFlow 構(gòu)建的,因此可與 TensorFlow 無(wú)縫銜接,允許訪問(wèn)所有 TensorFlow API 并通過(guò)編譯和自動(dòng)矢量化提供優(yōu)化后的運(yùn)行。例如,TensorFlow ND 數(shù)組可以與 NumPy 函數(shù)互通,類似地,TensorFlow NumPy 函數(shù)可以接受包括 tf.Tensor 和 np.ndarray 在內(nèi)的不同類型輸入。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 模型的訓(xùn)練性能和資源消耗情況的工具,用來(lái)診斷性能瓶頸,最終加快訓(xùn)練速度。此前,TensorFlow Profiler 支持多 GPU 單主機(jī)訓(xùn)練。到了 2.4 版本,使用者可以測(cè)試 MultiWorkerMirroredStrategy 的訓(xùn)練工作了,比如使用采樣模式 API 按需配置,并連接到 MultiWorkerMirroredStrategy 工作器正在使用的同一服務(wù)器。# 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)
另外,你可以通過(guò)向捕獲配置文件工具提供工作器地址來(lái)使用 TensorBoard 配置文件插件。配置之后,你可以使用新的 Pod Viewer tool 來(lái)選擇訓(xùn)練步驟,并查看所有工作器上該步驟的 step-time 的細(xì)分。TFLite Profiler 則支持在 Android 中跟蹤 TFLite 內(nèi)部信息,以識(shí)別性能瓶頸。TensorFlow 2.4 與 CUDA 11 和 cuDNN 8 配合運(yùn)行,支持最新發(fā)布的英偉達(dá)安培架構(gòu) GPU,對(duì)于 CUDA 11 的新特性,可以參考英偉達(dá)開發(fā)者博客:https://developer.nvidia.com/blog/cuda-11-features-revealed/在新版本中,默認(rèn)情況下會(huì)啟用安培 GPU 的新特性——對(duì) TensorFloat-32 的支持。TensorFloat-32 又簡(jiǎn)稱為 TF32,是英偉達(dá) Ampere GPU 的一種數(shù)學(xué)精度模式,可導(dǎo)致某些 float32 運(yùn)算(如矩陣乘法和卷積)在安培架構(gòu) GPU 上運(yùn)行得更快,但精度略有降低。https://www.tensorflow.org/api_docs/python/tf/config/experimental/enable_tensor_float_32_execution
推薦閱讀
pip 的高階玩法
再見,360安全衛(wèi)士
我愛線代,線代使我快樂(lè)
Python數(shù)據(jù)可視化,被Altair圈粉了
你真的懂print('Hello World!')?我不信
缺失值可視化Python工具庫(kù):missingno
機(jī)器學(xué)習(xí)深度研究:特征選擇中幾個(gè)重要的統(tǒng)計(jì)學(xué)概念
