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 打包模型
其中,在介紹 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 專案。