1
本文作者: 三川 | 2017-01-22 18:50 |
早在 2009 年,Jeff Bezanson、Alan Edelman、Stefan Karpinski 和 Viral Shah 四個(gè)人聚到一起決心創(chuàng)造一種全新的編程語言。新語言要快速、有表達(dá)力,結(jié)合 C 語言、Matlab、Java、Ruby、Python、Perl 和 R 各自的優(yōu)勢,并能直接與 R、Matlab、Python 等最受歡迎的機(jī)器學(xué)習(xí)語言,以及其他動(dòng)態(tài)工具展開競爭。聽起來這思路很直接、很簡單,是吧?這想法的背后有著幾名創(chuàng)始人對開發(fā)者“痛點(diǎn)”的長期切身體會(huì):工程師們?yōu)榱嗽跀?shù)據(jù)分析中獲得速度和易用性,不得不首先用一種語言編碼,然后用另一種語言重寫——這實(shí)在很“坑爹”。而這就是很多人口中的“雙語言問題”。
這背后的努力,促成了 Julia 的誕生。
創(chuàng)始人之一的 Viral Shah 解釋道:
“為什么一個(gè)編程語言不能同時(shí)具有性能和生產(chǎn)力,這難道是一個(gè)物理定律嗎?或者,現(xiàn)有的編譯器-語言技術(shù)還沒有發(fā)展到那個(gè)階段?我們認(rèn)為,在同個(gè)封裝中獲得易用性和性能是可能的。于是,我們開始投入到這個(gè)項(xiàng)目之中,并把它命名為 Julia?!?/p>
Viral Shah
隨后,幾名 Julia 創(chuàng)始人聯(lián)合 Keno Fischer 創(chuàng)立了“Julia Computing” ——一家咨詢公司,為使用 Juia 語言的企業(yè)客戶提供幫助。
Julia 是一門開源語言,允許開發(fā)者創(chuàng)建性能更為強(qiáng)大的數(shù)字算法——相對于采用 Just In Time (JIT) 解釋的語言而言。它易于使用,大幅減少了需要寫的代碼行數(shù);并且能夠很容易地部署于云容器(cloud containers )。
2012 年,Julia 的第一個(gè)公開版本 Julia 0.1 正式發(fā)布。2016 年九月發(fā)布了Julia 0.5,涵蓋了 1100 個(gè)工具包,比一年前的 0.4 版本增加了 57%。Julia 開發(fā)者社區(qū)的規(guī)模還很小,目前在全世界范圍內(nèi)大約有 15 萬用戶。但隨著計(jì)劃于今年 6 月在加州大學(xué)伯克利分校舉辦的 JuliaCon 峰會(huì),以及將在峰會(huì)上發(fā)布的 Julia 1.0;屆時(shí),它的用戶群有望快速增長。Viral Shah 表示,他們的下一個(gè)目標(biāo)是 150 萬用戶。另外,現(xiàn)有 Julia 版本的技術(shù)支持期限是一年,而 Julia 1.0 將會(huì)是五年。
Julia 已經(jīng)引起了華爾街的注意。投資銀行 Berkery Noyes 的 CTO Keith Lubell 評論道:
“真正讓我們感到激動(dòng)的是,你可以編寫高層級的科學(xué)、數(shù)字計(jì)算,而不需要重新編譯。通常來講,當(dāng)你用 R 或 Matlab 寫了一些東西,想讓它運(yùn)行得更快。你需要把它重新翻譯至 C++,或者其他更快的語言。而使用 Julia 就不需要這樣——它的速度是拔尖的。”
Julia 仍是搖籃中的新生兒。因此,若要成為大數(shù)據(jù)、機(jī)器學(xué)習(xí)工程師們的普遍選擇,它需要在多個(gè)領(lǐng)域成長起來。其中最重要的是開發(fā)者社區(qū),它亟需壯大以提供更多的工具包和庫。只有這樣, Julia 才能吸引更多用戶到它的平臺(tái),與基礎(chǔ)設(shè)施完善的老牌數(shù)據(jù)分析語言直接競爭。
如果你跟任何使用 Julia 的開發(fā)者聊聊,他們會(huì)告訴你,選擇“上車”、使用這個(gè)萌芽期編程語言的首要原因是速度。據(jù) Julia Computing 的宣傳,在七項(xiàng)基礎(chǔ)算法的測試中,Julia 比 Python 快 20 倍,比 R 快 100 倍,比 Matlab 快 93 倍。
Julia 精簡的代碼行數(shù),對其性能提升貢獻(xiàn)巨大。迄今為止最引人注目的 Julia 應(yīng)用案例是紐約聯(lián)邦儲(chǔ)備銀行( Federal Reserve Bank of New York )
大約兩年前,諾貝爾經(jīng)濟(jì)學(xué)獎(jiǎng)得主、紐約大學(xué)經(jīng)濟(jì)學(xué)教授、咨詢公司 QuantEcon 的創(chuàng)始人 Thomas Sargent,以及澳大利亞國立大學(xué)的經(jīng)濟(jì)學(xué)教授 John Stachurski,共同建議紐約聯(lián)邦儲(chǔ)備銀行( Federal Reserve Bank of New York )把其用于市場走勢預(yù)測和政策分析的“動(dòng)態(tài)隨機(jī)一般均衡模型(DSGE)”轉(zhuǎn)到 Julia 語言平臺(tái)。
Thomas Sargent
此前,紐聯(lián)儲(chǔ)的 DSGE 模型一直用 Matlab 運(yùn)行。該項(xiàng)目背后的邏輯是,探索像 DSGE 這樣的大型模型能否輕易轉(zhuǎn)移至 Julia,以及其運(yùn)行速度究竟會(huì)不會(huì)有大幅提升。紐聯(lián)儲(chǔ)采納了建議,并利用該機(jī)會(huì)與 QuantEcon 合作。紐聯(lián)儲(chǔ)宏觀經(jīng)濟(jì)與貨幣研究部門副主席 Marco Del Negro 表示:
“對我而言,這是一個(gè)絕妙的注意。我們當(dāng)時(shí)正在考慮脫離 Matlab ——既出于成本,也有速度方面的原因。我們希望進(jìn)一步提升我們的模型,并探索新事物?!?/p>
在項(xiàng)目第一階段后,他們發(fā)現(xiàn),Julia 把模型運(yùn)行時(shí)間縮短至原先 Matlab 代碼的十分之一到四分之三。模型中,Metropolis-Hastings 采樣(從概率分布獲取一系列隨機(jī)樣本的馬爾可夫鏈蒙特·卡羅方法)是最耗費(fèi)時(shí)間的環(huán)節(jié)。而在該環(huán)節(jié),Julia 的運(yùn)行速度是 Matlab 代碼的 10 倍。相對于原先的 Matlab 版本,基于 Julia 的全新 DSGE 模型把代碼行數(shù)減少了將近一半。
雷鋒網(wǎng)獲知這些性能提升不能全歸功于 Julia。紐聯(lián)儲(chǔ)表示,Matlab 版本的 DSGE 模型開發(fā)周期相當(dāng)長,是一個(gè)累積式的過程。另外,它還支持了過多的模型和特征。這些原因?qū)е缕溆泻芏嗖煌昝乐帲\(yùn)行效率本身就有不足。新項(xiàng)目下,這些專家們用 Julia 把該模型從頭設(shè)計(jì)了一遍,針對此前發(fā)現(xiàn)的一系列問題做了改進(jìn)。因此,新模型可被看做是經(jīng)歷了兩重升級:架構(gòu)優(yōu)化以及 Julia。當(dāng)然,兩者是結(jié)合在一起實(shí)現(xiàn)的。不過,一些“經(jīng)歷了較小優(yōu)化以及重設(shè)計(jì)”的算法,比如測量算法以及 kalman_filter 函數(shù),新版本仍然比舊的、基于 Matlab 的模型提升了大約五分之一至四分之三的運(yùn)算速度,見下圖。
雷鋒網(wǎng)獲知,目前紐聯(lián)儲(chǔ)已經(jīng)開啟了項(xiàng)目的第二階段:改進(jìn) DSEG 模型的預(yù)測能力。由于他們需要不斷為模型添加數(shù)據(jù)和層級,紐聯(lián)儲(chǔ)認(rèn)為 Julia 能更好應(yīng)付提升的復(fù)雜性——他們估算基于 Julia 的模型運(yùn)行時(shí)間大約只需要一至兩天,而 Matlab 可能需要一個(gè)月才能等到輸出結(jié)果。但這仍需第二階段完成后進(jìn)行證實(shí)。
Julia 最大的短板在于社區(qū)。雷鋒網(wǎng)獲知,Python 已經(jīng) 25 歲了, R 語言快 25 歲了,Matlab 超過 30 歲了。它們有非常扎實(shí)的社區(qū)群眾基礎(chǔ)——不斷加入新工具包以及庫的支持。有觀點(diǎn)認(rèn)為這些主流語言會(huì)不斷改進(jìn),并在未來的某個(gè)時(shí)間點(diǎn),在原本的短板上一舉超越這些新興、但強(qiáng)大的小眾語言。Keith Lubell 就表達(dá)了類似的觀點(diǎn),但他補(bǔ)充道:投資銀行業(yè)正受到來自金融科技公司越來越大的競爭壓力,迫使他們考慮利用 Julia 這些新興語言實(shí)現(xiàn)創(chuàng)新。
為了對開發(fā)者社區(qū)提供支持,AOT 的 Duve 說他有信心 Julia Computing 會(huì)成為 RStudio 那樣的機(jī)構(gòu)。后者為 R 語言開發(fā)開源的免費(fèi)工具及商用級的專業(yè)產(chǎn)品。Duve 認(rèn)為,Julia 采取的開發(fā)、發(fā)布方式會(huì)鼓勵(lì)更多的企業(yè)級用戶采用它。尤其 Julia 的用戶體驗(yàn)友好,它的架構(gòu)使得金融和經(jīng)濟(jì)學(xué)領(lǐng)域的專家們很容易使用,因而已受到金融圈部分人士的歡迎。紐聯(lián)儲(chǔ)就是一個(gè)例子。
Duve 說道:“Julia 開發(fā)者社區(qū)推動(dòng)、改進(jìn)該語言的方式,比 R 語言歷史上的任何時(shí)候都有條理地多?!?/p>
另外,BestX 的 Thind 表示,雖然 Julia 能被輕易部署于云端容器,但與云交互存在著風(fēng)險(xiǎn):
“在云端服務(wù)上,用 Julia 在整個(gè)簇(cluster)部署多個(gè)處理進(jìn)程,就像 MapReduce 那樣,是非常簡便、高效的。但如果你需要與 DynamoDB 或 RedShift 這樣的特定服務(wù)交互,Python 的 API 要比 Julia 的原生庫成熟、強(qiáng)大得多?!?/p>
想要拿 Julia 試手的開發(fā)者,需要仔細(xì)考慮他們使用該語言的用途,以及拿什么與之配合。
“所有想要加入 Julia 陣營的公司都需要弄清楚,你想要用它來實(shí)現(xiàn)哪些不一樣的功能?它能不能為其中至少一半的功能提供原生支持?你可以用 C 語言或者 Python 來完成剩下的那些,并且這會(huì)是完全無縫的體驗(yàn)。但是,如果你的大部分應(yīng)用都需要其他語言來彌補(bǔ),你應(yīng)該暫時(shí)緩一緩轉(zhuǎn)向 Julia,或者聯(lián)系 Julia Computing 看看能否得到缺失的功能支持?!?/p>
最后,我們來看看 Julia 創(chuàng)始人之一的 Viral Shah 的愿景:
“某一天,開發(fā)者社區(qū)會(huì)傳來一個(gè)信號(hào)—— Julia 已經(jīng)做好準(zhǔn)備,將進(jìn)入指數(shù)級增長軌道?!?/strong>
via waterstechnology
相關(guān)文章:
機(jī)器學(xué)習(xí)新星:Scala 優(yōu)于 Java 的五大理由!
入門必讀 機(jī)器學(xué)習(xí)六大開發(fā)語言
Python、R、Java、 C++ 等:從業(yè)界反饋看機(jī)器學(xué)習(xí)語言趨勢
Lisp 家族迎來新成員,函數(shù)式語言 Lux 是什么?
雷峰網(wǎng)版權(quán)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。