攝影_洪政偉

對企業來說,擁抱新語言好比展開一大筆投資,動手前總有許多問題要釐清。我們整理出企業有興趣的問題,請教了Julia臺灣社群發起人杜岳華。

這位Julia的臺灣推廣者,不只對Julia這年輕又優雅的語言充滿熱忱,更親自寫了兩本Julia程式語言指南,要把這個連Google、臉書、美國聯邦民航局、輝瑞和莫德納製藥都愛用的語言,帶入臺灣。iThome彙整他的回答和相關資料後,整理出這12題問答,供Julia的觀望者參考。

 Q:Julia有哪些特性,讓它被稱為資料科學新女神?

 A  快速、效率高。

Julia是為科學運算而生的程式語言,速度比Python、R、MatLab還要快,而且執行效率高。以往,程式語言不是好寫、速度慢(比如Python),就是難寫但執行效能很好(比如C),幾乎沒有一種語言兼具這兩種優點。Julia的設計初衷,就是要解決這個問題,要整合C、C++等高效能語言,以及Python這類適合撰寫複雜程式的高階語言優點。

Julia好寫、好讀、執行效能快,而且容易入門。這是因為,Julia有很好的編譯器。Julia核心開發者專注於打造更好的編譯器,除了採用LLVM編譯器框架進行即時編譯(JIT)來提高效率外,也盡量讓程式語言,更貼近人類使用的自然語言。

以往,C、C++、Java這類靜態語言對語法有諸多要求,比如開發者要在變數加上解釋,告訴程式這是整數、浮點數,但屬於動態語言的Julia,就將這些資訊放到編譯器處理。開發者撰寫程式碼時,也相對輕鬆。

另一方面,Julia內建套件管理器,方便使用者管理和查詢套件,這是在語言生態系中非常重要的基石。過往的程式語言需額外安裝套件管理器,來處理所需套件,有些語言甚至沒有套件管理器,開發者得自行管理。

Q:Julia在全球多紅?有哪些著名應用案例?

 A  從2012年開源至今,Julia下載量達2,900多萬次,獲得全球1萬多家企業採用。像是Google、AZ製藥公司、莫德納藥廠、德勤、Intell、NASA、美國聯邦儲蓄銀行、全球第5大保險公司英傑華(Aviva)等大型企業或機構。

著名案例包括Julia Computing與輝瑞共同模擬新藥、與AZ打造毒性預測AI,另外還與歐洲保險大廠Aviva解決合規問題、與思科打造ML資安方案,最近,Julia也往半導體領域擴張。

Q:Julia在臺使用狀況為何?有企業用嗎?

 A  目前臺灣以學界採用較多,但仍有少數企業採用,如卡米爾、創源生技等。

臺灣學界的Julia應用範圍,包括了生物資訊、自然語言處理、物理模擬、量子光學,還有智慧製造領域,比如有大學研究中心以Julia實作生產排程系統,來改善Python速度卡關的痛點。

卡米爾則是一家21歲的大數據分析公司,他們嘗試以Julia來執行迴圈運算,速度可比Pandas快上10倍。創源生技則是一家成立超過10年的生醫大數據分析公司,用Julia來加速分析作業,一方面也與擅長生物資訊處理的R語言互相搭配、相輔相成。

Q:主要推動Julia的企業,是哪一家?

 A  Julia Computing是主要推動企業,負責維持Julia語言生態系的發展,近期更推出JuliaHub、JuliaSim、Pumas、JuliaSure等4大產品。

這家公司的創立者也就是Julia4位發明人Jeff Bezanson、Alan Edelman、Stefan Karpinski、Viral B. Shah。他們原本是MIT的師生,2009年發起Julia專案, 2012年正式發表,也於2015年成立了Julia Computing這家公司,希望提供相關的技術顧問等服務,來支持Julia語言生態系發展。

每個語言背後幾乎都會有一家企業支持,才會走得長久。比如Java仰賴Oracle、Go靠Google、Rust依靠Mozilla,而Julia就靠Julia Computing來獲得金流,來開發更好的編譯器。

Julia Computing提供了一個公雲服務JuliaHub,可想像是一個簡易Google雲端平臺(GCP)。開發者寫好軟體,打包成Docker容器,可以上傳到這個平臺上執行,Julia Computing也提供協助部署的服務。

而JuliaSim、Pumas、JuliaSure則是三種不同用途的套件組。JuliaSim包含各種物理模擬所需的Julia套件,可用來訓練機器人。Pumas是以微分方程為基礎的藥物動力學套件組,特別的是,Pumas還獲得美國FDA認證,是一款能被採信的藥物模擬工具。至於JuliaSure,則是針對金融運算打造的套件組,企業用戶可用來開發、實作和生產。這些套件組都由開源的Julia套件組成,但使用者可委託Julia Computing安裝、執行。

Q:Julia套件生態系的完整度如何?

 A  Julia套件生態系大致完備,但仍不如Python豐富,使用者可用PyCall.jl等套件來與其他語言介接。

Julia社群註冊的套件超過5,000個,在資料科學、AI方面的套件相對完善,其他用途如網站架設、資料庫處理類等的套件仍只是基本功能為主。Julia初衷是科學計算,因此套件橫跨傳統統計、經濟學,物理模擬所需的微分方程、代理人模型,甚至是氣候模擬、藥物開發和資料科學等領域。

以微分方程來說,JuliaSim中包含一系列開源套件如DifferentialEquations.jl、DiffEqFlux.jl、DataDrivenDiffEq,製藥部分則有Pumas.jl,而資料科學包含深度學習框架Flux.jl,其中不乏臺灣開發者貢獻的套件。

可組合(Composable)是Julia語言的重要特色,不同套件容易並用混用,也不像Python套件常有高度相依性,比如,Python資料處理工具Pandas高度依賴Python函式庫NumPy,沒有安裝NumPy就無法使用Pandas,這種狀況不會在Julia套件上發生。

更大的特色是,Julia可以直接載入Python和C語言撰寫的套件,也能透過PyCall套件來與Python程式碼互動。因為Julia架構部分底層採用C語言開發而成,因此等於說,也內建了C語言支援,可用ccall來執行C函式。Julia對其他語言的支援上,如C++、Java、R和Mat Lab都有類似的介接機制。

Q:Julia最大缺點是什麼?

 A  程式碼第一次執行得等很久,但最新的Julia 1.6版已改善這個問題。

1.6版前,Julia第一次執行程式碼時,都會出現速度很慢的問題,比如光是開啟繪圖套件就需要等上1分鐘。因為Julia編譯器有一個「方法無效」(Method invalidation)的問題,導致第一次進行JIT編譯時,速度過慢。

Julia核心開發者從編譯器下手,來提高這個語言的執行效能。因此,在編譯時,會先判斷程式碼中的變數型別(Tpye),先了解所有函數中的變數是整數還是浮點數,讓整個程式依照整數或浮點數的規則執行。這是其他動態語言中,少見的速度優化作法。

但,使用者若執行了帶有未知元素的型別,或因修改函式、呼叫時找不到有效函式等導致重新編譯,就會造成方法無效,就會拖慢編譯速度。Julia核心開發團發現這個問題後,去年中成功改善。在最新的1.6版中,第一次編譯的速度已大幅提升。

Julia團隊對編譯器下的苦功不只如此,由於動態語言的編譯工作,無法事先預測、得在Runtime期進行,為加速這個過程,Julia核心開發者在編譯器中加入型別判斷(Type Inference)技術,先在1.4版加入平行運算,隨後在1.6版增加了平行編譯功能,讓編譯器可同時針對多個函式進行型別判斷,不必如過往,一個判斷完才輪下一個。這些編譯過的函式會保存下來,編譯器第二次執行程式時,就能迅速完成。

Q:能否比較Julia與Python各自擅長?

 A  Julia優點是簡潔快速,而Python最大強項則是社群和套件資源非常豐富。

Julia本是為科學運算而生,整體語言設計上,講求快速、簡潔、易懂。比如,Julia具備即時編譯和型別判斷技術,執行效率比未優化的Python還高。由於Python採直譯式設計,而非編譯式設計,因此無法先行判斷變數型別,得在執行時一一判斷,造成執行效率不高,得靠其他方法來加速。

在語法上,Julia的簡潔程度與Python相當,但在平行運算上,Julia的語法比Python還簡單。對研究者來說,Julia的數學運算語法,看起來更像是普通的數學公式,對科研人員更友善。

而且,Julia也擁有自動記憶體管理的機制,可以高效、快速地分配和回收記憶體資源,使用者不必在乎分配和釋放記憶體的細節,因為,Julia提供了一系列針對垃圾回收的方法。這個好處在於,使用者從Python轉移到Julia時,依然能享有Python的便利性。

不過,Python發展30多年,累積出數量龐大且實用的第三方套件,容易吸引大量開發者。而Julia專案自2009年展開、2012年發表,直到2018年才正式推出1.0版,套件豐富度仍遠不及Python,還有一段路要走。

尤其,今年10月份揭露的TIOBE熱門程式語言排行榜中,Python首次奪下第一名,打破了20多年C和Java輪流第一的記錄,代表著背後有群強大且活躍的社群支持。相反地,Julia問世不到10年,社群規模與Python相比,仍是大巫見小巫,仍在積極發展中。不過,Julia社群成員遍布各大陸,每年也會舉辦技術年會來揭露最新進展。

Q:Python常見深度學習框架支援Julia嗎?

 A  目前熱門的Python深度學習框架如TensorFlow、PyTorch等,並不支援Julia。不過,Julia有專屬的深度學習框架Flux和Knet,其中,Flux生態系資源又比Knet更豐富,也更常受開發者使用。

Q:商用軟體開發環境支不支援Julia?

 A  商用開發工具VS Code或AI圈慣用的Jupyter Notebook等開發工具都能支援Julia程式語言。Jupyter Notebook是由Julia、Python和R三個語言社群發起的專案,因此原生就支援Julia。而VS Code則是可以透過外掛程式(Plugin)來支援Julia開發。

Q:Julia全球社群的發展狀況為何?臺灣社群如何運作?

 A  Julia除了有積極的開發者社群,每年還會定期舉辦技術年會JuliaCon。為了讓更多人認識Julia,我也發起Julia臺灣社群。

Julia全球社群不如Python這麼大,Python已發展30幾年,Julia開源至今也才快10年。但Julia社群針對核心功能積極開發,自2014年起,官方也定期舉辦JuliaCon,來揭露最新進展,到今年也進入第8屆了。

在全球社群支援上,開發者社群有專屬的Slack群組,我自己也是Julia開發者之一。這個社群會討論要開發哪些功能、哪些地方需要除錯等等。

由於Julia社群和學習資源不如Python豐沛,我也發起Julia臺灣社群,來分享Julia新知,疫情前也會舉辦實體交流活動,來分享Julia介紹和使用心得。目前,Julia臺灣社群中約10位是Julia的開發者,使用人數也持續增長。

Q:哪些重要Julia套件開發者來自臺灣?

 A  官網收錄的套件中,有三款來自臺灣開發者,而且都大受好評。

杜岳華自己開發的GeometricFlux.jl套件,包含了開發圖類神經網路(GNN)所需的元件和模型,也與Julia圖學套件生態系JuliaGraphs相容。GNN可說是卷積網路(CNN)的延伸,它不只能完成CNN可解的任務,還能用來處理圖形(Graph)資訊,像是交通網路、人際關係、化學分子反應、基因交互作用分析等。

另一款是國產套件是Transformers.jl,由一位從事自然語言處理(NLP)研究的碩士生打造,以Julia完整實作出了經典的NLP架構Transformer。個套件包含了Transformer模型開發所需的元件和預訓練模型,此外,還能轉換使用者從NLP開源平臺Hugging Face下載的模型格式,讓模型可在Julia深度學習框架Flux上執行。

還有一款官方收錄的國產套件NeuralOperators.jl,作者來自清大光電研究所碩士生,他將去年和今年加州理工學院發表的傅立葉神經算子與馬可夫神經算子這2種AI模型,重新以Julia實作,成果比原作者的Python Demo版還完善,可用於影像超解析度(Superresolution)和量子光學等物理研究領域。

Q:Julia未來的目標為何?

 A  官方承諾會持續精進雲平臺JuliaHub功能,要讓Julia成為複雜運算的產業專用語言。

在Julia演進過程中,核心開發團隊成立Julia Computing之初,就已宣布要將Julia打造為適合製藥、金融、高效能運算和能源等領域的精簡化程式碼。

接下來,他們要專注改善JuliaHub雲端平臺,加速模型開發、部署和擴展,同時也要向半導體領域擴張。

熱門新聞

Advertisement