天天看點

TensorFlow 2.0将把Eager Execution變為預設執行模式,你該轉向動态計算圖了

谷歌開發者大會

在谷歌開發者大會的第二天,主會場全天都将進行 TensorFlow 專場的演講。

來自 Google Brain 的軟體工程師馮亦菲在分享 TensorFlow 程式設計接口的新動态時着重介紹了 tf.keras,tf.data 等高層庫,總結了 TensorFlow 團隊對開發者使用 TensorFlow 的一系列建議,包括:

  • 用 Eager 模式搭建原型
  • 用 Datasets 處理資料
  • 用 Feature Columns 提取特征
  • 用 Keras 搭模組化型
  • 借用 Canned Estimators
  • 用 SavedModel 打包模型
TensorFlow 2.0将把Eager Execution變為預設執行模式,你該轉向動态計算圖了

其中,在介紹 Eager 模式時,她提到,在 TensorFlow 2.0 版本中,Eager 模式會成為預設執行模式,讓開發者更簡潔高效地搭建原型。

在演講結束後的交流中,馮亦菲提到 TensorFlow 2.0 beta 版将會在今年年底公開,而正式版預計于明年 Q1 或 Q2 問世。Eager 模式變為預設設定之後,開發者可以在原型搭建完成後,利用 AutoGraph 把在 Eager 模式下搭建的模型自動變成計算圖。開發者也可以進一步對 AutoGraph 生成的計算圖進行優化,或者關掉 Eager 模式自己建構計算圖。

我們注意到,在兩個月之前剛剛釋出的

AutoGraph 

已經離開 tf.contrib 成為了正式的 TF 庫的一部分,在設計文檔中,工程師提到,「為了 TF 2.0 做準備,我們将 AutoGraph 從 tensorflow / contrib / autograph 移動到了 tensorflow / python / autograph。AutoGraph 仍可在 tensorflow.contrib.autograph 下通路,直到 tensorflow.contrib 被取消。」

谷歌開發者大會的「熟面孔」,Google AI 軟體工程師金安娜同樣出現在了今年的主題演講中,她提到 TensorFlow 工程師會将自己的最新的設計提議放在 TensorFlow Community 的 Request for Comments 中,她鼓勵開發者前往浏覽,并針對工程師的最新設計思路給出自己的意見。

例如,Martin Wicke 關于 sunset tf.contrib 的提議就仍然在回報階段,有諸多開發者在該條 pull request 下提出了自己的意見。

RFC 的位址如下:

https://github.com/tensorflow/community/tree/master/rfcs

在今天下午的演講中,會有更多來自谷歌的工程師分享與 Eager 模式相關的設計思路和設計細節。

TensorFlow 曆程

TensorFlow 是由 Google Brain 團隊在谷歌内部第一代 DL 系統 DistBelief 的基礎上改進而得到的,這一通用計算架構目前已經成為最流行的機器學習開源工具。

TensorFlow 的前身 DistBelief 是谷歌 2011 年開發的内部 DL 工具,基于 DistBelief 的 Inception 網絡獲得了 2014 年的 ImageNet 挑戰賽冠軍。雖然 DistBelief 當時在谷歌内部已經應用于非常多的産品,但它過度依賴于谷歌内部的系統架構,是以很難對外開源。經過對 DistBelief 的改進與調整,谷歌于 2015 年 11 月正式釋出了開源計算架構 TensorFlow 0.5.0。相比于 DistBelief,TensorFlow 的計算架構更加通用、計算資源安排更加合理,同時支援更多的深度學習算法與平台。

在 TensorFlow 開源後,基于 TF 的項目在第一年裡面層出不窮:超過 480 人為 TF 做出了直接貢獻,其中包括谷歌開發者、外部研究者、獨立開發者、學生和其它公司的資深開發者。當時,TensorFlow 已經成為了 GitHub 上最受歡迎的機器學習項目。

在開源的第一年中,TensorFlow 增加了對分布式訓練、iOS、樹莓派開發闆的支援,并且還與廣泛使用的大資料架構相結合。此外,谷歌還釋出了當時表現最好的圖像分類模型 Inception-ResNet-v2,并且還回答了 GitHub、StackOverflow 和 TensorFlow mailing list 上數以千計的問題。

去年 2 月份在首屆 TensorFlow 開發者大會中,谷歌正式釋出了 TensorFlow 1.0。在速度上,它在 64 個 GPU 上分布式訓練 Inception v3 獲得了 58 倍提速。在靈活性上,TensorFlow 1.0 引入了高層 API,例如 tf.layers、tf.metrics 和 tf.losses 等子產品,同時通過 tf.keras 将 Keras 庫正式整合進 TF 中。

此後,TensorFlow 釋出了非常多的重要更新,包括動态圖機制 Eager Execution、移動端深度學習架構 TensorFlow Lite、面向 JavaScript 開發者的機器學習架構 TensorFlow.js,以及自動将 Python 轉化為 TF 計算圖的 AutoGraph 等。

在 TensorFlow 2.0 的規劃中,Eager Execution 變為預設執行模式可能對開發者有比較大的影響,因為我們不再需要編寫完整的靜态計算圖,并打開會話(Session)運作它。相反,與 PyTorch 一樣,Eager Execution 是一個由運作定義的接口,這意味着我們在 Python 上調用它進行計算可以直接得出結果。這種方式非常符合人類直覺,是以可以預想 TensorFlow 的入門在以後會簡單地多。

以下為 8 月中旬谷歌大腦成員 Martin Wicke 在公開郵件中透露的 TensorFlow 2.0 的規劃:

TensorFlow 2.0 的規劃

自 2015 年開源釋出以來,TensorFlow 已經成為世界上使用最廣泛的機器學習架構,面向廣泛的使用者和用例。此後,TensorFlow 随着計算硬體、機器學習研究和商業部署的快速發展而不斷更新。

為了反映這些快速變化,谷歌開發者已經開始研究下一個版本的 TensorFlow。TensorFlow 2.0 将是一個重要的裡程碑,重點關注易用性。以下是使用者對 TensorFlow 2.0 的一些期望:

  • Eager execution 将是 2.0 的核心功能。它把使用者對程式設計模型的期望與 TensorFlow 實踐更好地結合起來,應該會使 TensorFlow 更容易學習和應用。
  • 支援更多的平台和語言,并通過交換格式的标準化和 API 的對齊來改善這些元件之間的相容性和對等性。
  • 将删除過時的 API 并減少重複,以免給使用者帶來困惑。

據郵件稱,谷歌計劃年底之前釋出 TensorFlow 2.0 的預覽版。

相容性與連續性

TensorFlow 2.0 提供了一個糾錯并改正的機會,而這些改進在語義版本控制中是不允許的。

為了簡化轉換,TensorFlow 團隊将建立一個轉換工具,該工具需要更新 Python 代碼以使用與 TensorFlow 2.0 相容的 API,或者在無法自動轉換時發出警告。在向 1.0 過渡的過程中,類似的工具發揮了巨大的作用。

不是所有的改進都能自動進行。比如,TensorFlow 不贊成使用一些沒有直接對接的 API。對于這種情況,我們将提供一個相容子產品 (tensorflow.compat.v1),其中包含完整的 TensorFlow 1.x API,它會在 TensorFlow 2.x 的周期裡得到維護。

磁盤相容性

谷歌表示,他們不打算對 SavedModels 或 GraphDef 存儲進行重大更改,計劃 2.0 中能包含所有目前核心。然而,2.0 的變化意味着在與新模型相容之前,原始 checkpoint 中的變量名必須要進行轉換。

tf.contrib

TensorFlow 的 contrib 子產品已經超出了單個存儲庫可以維護和支援的範圍。較大的項目最好分開維護,我們将把較小的擴充與 TensorFlow 主代碼一起孵化。是以釋出 TensorFlow2.0 之後,我們将停止釋出 tf.contrib。在接下來的幾個月裡,我們将與 contrib 各自的所有者合作制定詳細的遷移計劃,包括如何在 TensorFlow 的社群頁面和文檔中宣傳你的 TensorFlow 擴充。對于每一個 contrib 子產品,我們有以下選擇:a)将項目整合到 TensorFlow 中;b)将其移動到一個單獨的存儲庫;c)将其徹底移除。這确實意味着所有的 tf.contrib 将被棄用,今天,TensorFlow 将停止添加新的 tf.contrib 項目。

TensorFlow 2.0将把Eager Execution變為預設執行模式,你該轉向動态計算圖了

繼續閱讀