Keras 3.0正式發布!一統TF/PyTorch/Jax三大后端框架,網友:改變游戲規則
Keras 3.0正式發布,被譽為改變了機器學習游戲規則:
不僅支持TensorFlow、PyTorch、Jax三大框架作為后端,還能在它們之間無縫切換,甚至混合使用。
圖片
Keras之父Fran?ois Chollet認為,這樣至少可以獲得4大好處:
- 始終讓模型獲得最佳性能:
JAX通常在GPU、CPU各種PU上都最快,但不使用XLA(加速線性代數)的Tensorflow在GPU上偶爾更快。
Keras 3.0能夠動態為模型提供最佳性能的后端,而無需更改代碼,保證以最高效率運行。
- 解鎖多個生態系統
任何Keras 3模型都可以作為PyTorch模塊實例化,可以導出為TF的SavedModel,或者可以實例化為無狀態的 JAX 函數。
這意味著可以將Keras 3模型與PyTorch生態的包,TensorFlow中的部署工具或生產工具,以及JAX大規模TPU訓練基礎設施一起使用,獲得機器學習世界所提供的一切。
- 在開源社區擴大影響力
如果使用純TensorFlow或PyTorch實現一個開源模型,都只有大約一半的人能使用。
但如果使用Keras 3,任何人無論偏好哪個框架,(即使不是 Keras 用戶)都能立刻使用。在不增加開發成本的情況下,使影響力翻倍。
- 使用任何來源的數據管道
無論使用哪個后端,Keras 3 都能與tf.data.Dataset對象、PyTorch DataLoader對象、NumPy 數組、Pandas數據框兼容。
這意味著可以在PyTorch DataLoader上訓練Keras 3 + TensorFlow模型,或在 tf.data.Dataset上訓練Keras 3 + PyTorch模型。
圖片
不少人都對這一進展表示祝賀,項目參與者、谷歌高級工程師Aakash Kumar Nain認為:
Keras 3再次展示了心智模型的重要性。開發API 是一方面,而開發一個擁有出色心智模型的API則完全是另一個層次的工程實踐。
圖片
也有開發者表示:
很高興能夠通過熟悉的Keras API獲得框架可選性,讓簡單的用例變得容易,復雜的用例也成為可能。
圖片
歡迎來到多框架機器學習
Keras 3.0發布公告中開篇寫到,歡迎來到多框架機器學習。
圖片
具體來說,Keras 3.0完全重寫了框架API,并使其可用于TensorFlow、JAX和PyTorch。
任何僅使用內置層的Keras模型都將立即與所有支持的后端配合使用。
圖片
使用Keras 3可以創建在任何框架中都能以相同方式工作的組件,允許訪問跨所有后端運行的keras.ops命名空間。
只要僅使用keras.ops中的ops,自定義層、損失、指標和優化器等就可以使用相同的代碼與JAX、PyTorch和TensorFlow配合使用。這意味著只需維護一個組件實現,就可以在所有框架中使用完全相同的數值。
圖片
除此之外,還發布了用于大規模數據并行和模型并行的新分布式API,為多設備模型分片問題提供Keras風格的解決方案。
為此設計的API使模型定義、訓練邏輯和分片配置完全獨立,這意味可以像在單個設備上運行一樣編寫代碼,然后在訓練任意模型時將任意分片配置添加到任意模型中。
圖片
不過新的分布式API目前僅適用于JAX后端,TensorFlow和PyTorch支持即將推出。
圖片
為適配JAX,還發布了用于層、模型、指標和優化器的新無狀態API,添加了相關方法。
圖片
這些方法沒有任何副作用,它們將目標對象的狀態變量的當前值作為輸入,并返回更新值作為其輸出的一部分。
用戶不用自己實現這些方法,只要實現了有狀態版本,它們就會自動可用。
如果從Keras 2遷移到3,使用tf.keras開發的代碼通常可以按原樣在Keras 3中使用Tensorflow后端運行。有限數量的不兼容之處也給出了遷移指南。
在舊版Keras 2中開發的預訓練模型通常也可以在Keras 3中使用TensorFlow后端開箱即用。
如果舊版模型僅使用了Keras內置層,那么也可以在Keras 3中使用JAX和PyTorch后端開箱即用。
也有人敲警鐘
在迫不及待嘗試新版本的開發社區氛圍中,Cohere機器學習總監Nils Reimers提出“真心希望歷史不要重演”,也獲得不少關注。
圖片
Reimers認為,Keras最初從支持單個后端(Theano)開始,陸續添加了Tensorflow、MXNet和CNTK等多后端。
這引發了一系列問題:
- 某些功能只在特定后端可用
- 各個后端的計算結果存在不一致:在一個后端上運行正常的代碼,在另一個后端可能產生不同結果
- 對于開源軟件開發者來說體驗糟糕:你剛完成了一個自定義的 Keras層想要分享?你是否愿意為其他后端重新實現和優化它呢?
- 調試問題:代碼在一個后端上表現完美,但在另一個后端的最新版本上卻頻繁出錯…
隨著時間推移,這些問題愈發嚴重:某些模塊只能在 Theano 上運行良好,某些只適用于Tensorflow,還有一些模塊可以在MXNet上進行推理,但無法訓練…
因此,2019年Keras轉向單一后端(Tensorflow),是保障這一偉大項目繼續存在的關鍵之舉。
我希望這一次的多后端能有更好的表現,但這無疑仍是一個挑戰。
您是否需要等到像FlashAttention v2這樣的重要特性在JAX、TensorFlow和PyTorch 上都可用后,才能在 Keras 中使用它?還是說您只能在某些特定后端中使用它?
對于未來,我們還面臨著許多未解決的挑戰。
參考鏈接:
[1]https://keras.io/keras_3/[2]https://x.com/sampathweb/status/1729556960314339534[3]https://twitter.com/Nils_Reimers/status/1729612017340657993