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