首頁 > 科技

Keras正式從TensorFlow分離:結束API混亂與耗時編譯

2021-06-16 21:47:44

機器之心報道

編輯:杜偉、小舟

以後在本地運行 Keras Bazel 測試將不再花費幾小時,只需要幾分鐘。

對於深度學習領域的從業者而言,Keras 肯定不陌生,它是深度學習的主流框架之一。2015 年 3 月 27 日,谷歌軟體工程師、Keras 之父 Francois Chollet 在其 GitHub 上提交併公佈了 Keras 的首個版本。作為使用純 Python 編寫的深度學習框架,Keras 的程式碼更加簡單方便,適用於初學者。此外,Keras 具有很強的易擴展性,能夠直觀地定義神經網路,函數式 API 的使用令使用者可以將層定義為函數。

Keras 官網地址:https://keras.io/

為了訓練自定義神經網路,Keras 需要一個後端,在 v1.1.0 版本之前,Keras 的預設後端都是 Theano。2015 年 11 月 9 日,谷歌釋出了 TensorFlow。Keras 開始支援 TensorFlow 作為後端。漸漸地,TensorFlow 成為最受歡迎的後端,並從 Keras v1.1.0 發行版開始成為它的預設後端。tf.keras 正是在 TensorFlow v1.10.0 中引入的,這是將 Keras 直接整合到 TensorFlow 包中的第一步。

當谷歌在 2019 年 6 月釋出 TensorFlow 2.0 時,他們宣佈 Keras 成為 TensorFlow 的官方高階 API。並且,在 Keras 2.3.0 版本釋出時,Francois 表示這是 Keras 首個與 tf.keras 同步的版本,也是 Keras 支援 Theano 等多個後端的最終版本。所有深度學習從業者都應將其程式碼轉換成 TensorFlow 2.0 和 tf.keras 軟體包。這意味著二者的合併,但看似雙贏的決定,很多開發者卻不買賬。API 的混亂與割裂不僅令開發者不知所措,也加大了開發者尋找教程的難度。

是時候做出改變了!近日,Keras 之父 Francois Chollet 在其推特宣佈一項重要決定:他們已經將 Keras 的程式碼從 TensorFlow 程式碼庫中分離出來,移回到了自己的 repo。

對於 Keras 從 TensorFlow 分離後有哪些好處?Francois 表示:「這將提升開源貢獻者的開發體驗。對於使用者而言,這將使他們可以在本地運行測試,不再需要編譯 TF 來測試 Keras 了,並且還將改善 CI 時間。」

Keras 正式從 TensorFlow 程式碼庫中分離

此次 Keras 分離過程的負責人是谷歌高階軟體工程師 Scott Zhu,他代表 Keras 團隊向所有 Keras 使用者發表了公開聲明,解釋了 Keras 從 TensorFlow 程式碼庫中分離出來的緣由以及分離後為使用者帶來的諸多便利之處。

開發團隊花費了很多精力使 TensorFlow 更加模組化,並優化了 Keras 和 TensorFlow 之間的依賴關係。最終 Keras 從 TensorFlow 程式碼庫中分離出來,並擁有了自己獨立的程式碼庫。這使 Keras 能夠使用 Tensorflow Python API 作為 PIP 包依賴項,且無需在構建和測試時編譯 TensorFlow。因此現在在本地運行 Keras Bazel 測試只需要幾分鐘,而不是幾小時。

變更之後,當前 TensorFlow 程式碼庫中的 Keras 部分將很快被刪除。這意味著:

1. Keras 開原始碼庫的訪問地址將發生變更;

原地址:https://github.com/tensorflow/tensorflow新地址:https://github.com/keras-team/keras

2. 經過許可之後,原程式碼庫中 Keras 部分的相關 PR 將被手動合併到新程式碼庫中。Keras 團隊成員將在內部進行同步和合並,相關作者無需進行任何操作。但如果 PR 已經開啟很長時間且沒有作者的活動,Keras 團隊可能會關閉它;

3. 任何在先前程式碼庫中未解決的 Keras 相關活躍問題將在現有的 ticket 執行緒中處理,並將通過提交到新程式碼庫進行修復;

4. 與原程式碼庫相關的陳舊問題將被關閉。如果你認為仍然是有價值的問題,請隨時在新程式碼庫中重新開啟該問題;

5. 新 Keras 程式碼庫在此次變更前未完成的任何 PR/issue 都被認為是陳舊的,將被關閉。

使用者想要提交貢獻,如何做?

使用者在提交自己的程式碼以供審查並獲得批准時,必須簽署谷歌個人貢獻者許可協議(CLA),這樣才可以將程式碼放入 Keras 程式碼庫中。此外,在提交更多的貢獻時,使用者也應首先通過問題跟蹤器(issue tracker)與 Keras 聯絡溝通。

包括項目成員在內所有使用者的提交都必須接受審查。為此,Keras 使用 GitHub 拉取請求(pull request, PR),並建議使用者在創建 PR 之前閱讀相關指南。

完成本地更改並通過測試驗證後,使用者可以在 keras-team/keras 項目中開啟併發送 PR,之後會經過一系列的測試來驗證它的正確性。一旦 PR 被審查者測試和批准,PR 將被映象到谷歌內部儲存庫。一旦合併到 Google 內部儲存庫成功完成,PR 還將被標記為已合併(merged)。這與 Tensorflow OSS 的貢獻流程相同,相關示例如下圖所示:

在做任何更改之前,Keras 團隊建議用於開啟 issue,並在上面討論。Keras 也會給予反饋並對使用者提出的更改進行驗證。如果更改很小,如文件修復中簡單的 bug 修復,則只需開啟 PR 無需討論。

與個人使用者不同,企業使用者提交的貢獻需要遵守《谷歌軟體授權與企業貢獻者許可協議》。

開發所需的工具

使用 Keras 開發所需要的工具主要包括如下:

用於創建和測試 Keras 項目的 Bazel 工具和 Python;用於程式碼庫管理的 git 工具。

設定和檢查本地工作區

以蘋果 Mac 電腦(Linux 系統的配置非常相似)為例,使用如下命令設定並檢查本地工作區的配置:

下載 Keras 程式碼和設定虛擬環境

Python 虛擬環境是創建獨立環境的強大工具,可以將任何系統級配置的更改隔離開來。因此,Keras 強烈建議避免出現任何意外的依賴或版本問題。

本地運行測試

在本地運行一個測試的程式碼如下:

(venv_dir) scottzhu-macbookpro2:keras scottzhu$ bazel test -c opt keras:backend_test

WARNING: The following configs were expanded more than once: [v2]. For repeatable flags, repeats are counted twice and may lead to unexpected behavior.

INFO: Options provided by the client:

Inherited 'common' options: --isatty=1 --terminal_columns=147

INFO: Reading rc options for 'test' from /Users/scottzhu/workspace/keras/.bazelrc:

Inherited 'build' options: --apple_platform_type=macos --define open_source_build=true --define=use_fast_cpp_protos=false --define=tensorflow_enable_mlir_generated_gpu_kernels=0 --define=allow_oversize_protos=true --spawn_strategy=standalone -c opt --announce_rc --define=grpc_no_ares=true --config=short_logs --config=v2

INFO: Reading rc options for 'test' from /Users/scottzhu/workspace/keras/.bazelrc:

'test' options: --define open_source_build=true --define=use_fast_cpp_protos=false --config=v2

INFO: Found applicable config definition build:short_logs in file /Users/scottzhu/workspace/keras/.bazelrc: --output_filter=DONT_MATCH_ANYTHING

INFO: Found applicable config definition build:v2 in file /Users/scottzhu/workspace/keras/.bazelrc: --define=tf_api_version=2 --action_env=TF2_BEHAVIOR=1

INFO: Found applicable config definition build:v2 in file /Users/scottzhu/workspace/keras/.bazelrc: --define=tf_api_version=2 --action_env=TF2_BEHAVIOR=1

INFO: Analyzed target //keras:backend_test (0 packages loaded, 0 targets configured).

INFO: Found 1 test target...

Target //keras:backend_test up-to-date:

bazel-bin/keras/backend_test

INFO: Elapsed time: 45.535s, Critical Path: 45.26s

INFO: 19 processes: 19 local.

INFO: Build completed successfully, 20 total actions

//keras:backend_test PASSED in 45.2s

Stats over 4 runs: max = 45.2s, min = 40.0s, avg = 41.5s, dev = 2.1s

INFO: Build completed successfully, 20 total actions

最後為大家推薦一篇 Keras 的中文教程,它由 Keras 團隊軟體工程師金海峰翻譯自官網教程,詳細介紹了 Keras 和 TensorFlow 的基本用法和核心概念,並通過變分自編碼器(Variational Autoencoder)和超網路(Hypernetwork)這兩個完整的例子展示瞭如何在實踐中使用 Keras。


IT145.com E-mail:sddin#qq.com