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