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