TensorFlow 2.0將把Eager Execution變爲默認執行模式

8 月中旬,谷歌大腦成員 Martin Wicke 在一封公開郵件中宣佈,新版本開源框架——TensorFlow 2.0 預覽版將在年底之前正式發佈。今日,在上海谷歌開發者大會上,機器之心獨家瞭解到一個重大的改變將會把 Eager Execution 變為 TensorFlow 默認的執行模式。這意味著 TensorFlow 如同 PyTorch 那樣,由編寫靜態計算圖全面轉向了動態計算圖。


谷歌開發者大會


在谷歌開發者大會的第二天,主會場全天都將進行 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 項目。


分享到:


相關文章: