開發人員親自上場:Julia語言搞機器學習和Python比,哪個好用?
2022 年,你會選擇哪種編程語言呢?
前幾年就流傳著這樣一種說法:Julia會替代 Python,成為新的最受歡迎的編程語言之一。我們暫且對這種說法持觀望態度,但作為科學計算方面的強大工具,Julia優勢已然顯現,這意味著程序員的選擇又多了一種。
在數據科學、人工智能等領域,仔細對比Julia和 Python,我們會發現:相同的任務,只要 Python 能實現的的,Julia都可以做,而且效率高得多,語法也簡潔優雅,只是在傳播度上,名氣還不如 Python。
近日,reddit 上的一則熱帖引來廣大網友的討論,這個帖子提到,最近,一些Julia語言包的開發人員討論了Julia中 ML 的當前狀態,并將其狀態與 Python ML 生態系統進行了比較。
原貼地址:
https://www.reddit.com/r/MachineLearning/comments/s1zj44/r_julia_developers_discuss_the_current_state_of/
來自烏得勒支大學的 JordiBolibar 認為,「Julia確實在機器學習方面擁有巨大的潛力,但它目前的狀態有點喜憂參半。更具體地說,我在 SciML 中堅持使用Julia的主要原因是,DifferentialEquations.jl 庫工作得非常好,但在 Python 中沒有發現任何類似的東西。然而,對于我的研究來說,真正痛苦的是 AD 部分。自從我開始使用Julia,我在 Zygote 中遇到了兩個錯誤,這使我的工作速度減慢了幾個月。但我仍然認為Julia是 SciML 的最佳選擇,但這些庫(及其文檔)應該優化的更加用戶友好。」
網友 @jgreener64 表示:「Julia中的 ML 在某些領域應用非常強大,Julia一切皆有可能。Julia面臨的問題是:Julia中的 ML 需要大量現有知識或大量時間搜索 / 反復試驗。在個人層面上,我目前正在用Julia開發新穎的可微分算法?!?/p>
除了網友的熱烈討論外,Julia軟件包開發人員 Christopher Rackauckas 圍繞以下 7 個問題,解答了網友比較關心的內容。Rackauckas 是 MIT 和馬里蘭大學的數學家和藥理學家,主要用Julia進行編程。Rackauckas 為Julia、數學和隨機生物學開了專門博客,來介紹相關內容,并且 Rackauckas 在Julia中開發了一些庫,包括(但不限于)DifferentialEquations.jl 和 Pumas。
Christopher Rackauckas
問題包括:
-
今天Julia中的 ML 在哪些地方真正大放異彩?在不久的將來該生態系統在哪些方面優于其他流行的 ML 框架(例如 PyTorch、Flax 等),為什么?
-
目前Julia的 ML 生態系統在功能或性能方面存在哪些缺點?Julia在這些領域變得具有競爭力的時間節點在哪?
-
Julia的標準 ML 包(例如深度學習) 在性能方面與流行的替代方案相比如何(更快、更慢、相同數量級)?
-
有沒有重要的Julia實驗,可以針對流行的 ML 替代方案進行基準測試?
-
如果一家公司或機構正在考慮創建職位來為Julia的 ML 生態系統做出貢獻,有沒有最佳案例?為什么他們應該這樣做?哪些貢獻最有影響力?
-
為什么與其他框架合作的獨立開發人員應該考慮為Julia的 ML 生態系統做出貢獻?
-
對于某些特定任務,Julia開發人員傾向于使用哪些軟件包?Julia開發人員希望添加目前不存在的哪些內容?
下文中我們挑選了幾個大家比較關心的問題進行報道:
問題 3:Julia在「標準 ML」中的表現如何?
Julia的內核速度很好:在 CPU 上,我們做得非常好,在 GPU 上,每個人都只是調用相同的 cudnn 等;Julia的 AD 速度也很好。不過 Zygote 可能會有一些開銷,但與 Jax/PyTorch/TensorFlow相比,Zygote 在大多數情況下速度是很快的。具體來說,PyTorch 開銷要高得多,在標準 ML 工作流程中甚至無法測量。一個足夠大的矩陣乘法會解決分配問題或其他 O(n) 問題;Julia不融合內核,因此在大多數基準測試中,如果用戶查看它,就會發現它沒有融合 conv 或 RNN cudnn 調用。
問題 4:我們應該跟蹤哪些重要的實驗和基準?
XLA 的分布式調度器非常好。當我們考慮擴展時,我們應該忽略 PyTorch,去考慮 DaggerFlux 與TensorFlow/Jax。XLA 有更多的靈活性來改變操作,所以我認為 XLA 才是贏家,我們需要使用 e-graphs 技巧來匹配它。另一件需要注意的事情就是「自動微分中缺少中間部分」,這種情況還需要解決。
問題 7:有什么推薦的軟件包?
我傾向于在需要時使用 Flux,但大家還是盡量使用 DiffEqFlux。就現有內核而言,Flux 是最完整的,但它的風格讓我感到厭煩。我希望有一個 Flux 不使用隱式參數,而是使用顯式參數。我希望這些參數由 ComponentArrays 表示。