免費論壇 繁體 | 簡體
Sclub交友聊天~加入聊天室當版主
分享
返回列表 發帖

【Julia臺灣社群發起人親自解答】

【Julia臺灣社群發起人親自解答】12個問答快速認識Julia
iThome 2021/11/02 07:11(19小時前)
對企業來說,擁抱新語言好比展開一大筆投資,動手前總有許多問題要釐清。我們整理出企業有興趣的問題,請教了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來實作智慧生產排程系統(APS),速度快、容易撰寫。

卡米爾則是一家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雲端平臺,加速模型開發、部署和擴展,同時也要向半導體領域擴張。
分享到: QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友

【Julia臺灣企業實例:卡米爾】用Julia改寫超慢2成程式碼,讓龐大空污監測資料前處理快10倍
iThome 2021/11/02 07:11(18小時前)
對一家成立21年的IT公司來說,擁抱新技術難嗎?「一點都不!」專攻政府大數據分析和AI服務的卡米爾創辦人暨技術長邱泊寰自說。

2018年,擁有資料科學新女神頭銜的Julia程式語言釋出1.0版,邱泊寰馬上就注意到了。這個能用表情符號和中文撰寫程式的語言讓他非常驚艷,更在一次讀書會中把Julia帶到團隊面前,讓毫無程式經驗的專案經理,都能快速上手這個語言。他們還用來加速資料前處理工作,改善了原有IT架構,甚至,重要專案20%核心程式碼改用Julia後,得到比Python快10倍的執行速度。

快速嚐鮮新技術,讀書會帶團隊認識Julia

快速嘗試新技術,一直是卡米爾的傳統。邱泊寰回憶,2000年是個Java備受推崇的年代,但卡米爾成立之初,就決定擁抱當時還未爆紅的Python。他們一路跟隨Python網頁框架的變化,從早期的Zope、Django,再到後來的Flask和FastAPI,都在一出現就嚐鮮試用。

累積至今,卡米爾用Python開發的專案就有299個。其中最具代表性的,就是與環保署合作的「AI空污溯源平臺」,透過8,000個遍布全臺的IoT感測器和演算法,來揪出偷排廢氣的工廠。他們的努力,更協助政府有證據開出2億多元的空污罰款。

儘管卡米爾十分仰賴Python,他們對新技術仍充滿好奇。2018年Julia 1.0現身,成為資料科學界口耳相傳的新聞,邱泊寰也格外關注。「Julia是一個驚喜!」他解釋,當他與團隊看到Julia高效、快速的新聞後,就立刻展開研究。

一試卻發現,當時的Julia不但啟動速度沒有更快,在Linux Shell的啟動時間反而比Python的0.02秒慢上10倍,在開發環境Jupyter Notebook中更是可怕。與一鍵啟動的Python相比,Julia在Jupyter Notebook的啟動時間就等上10幾秒,而且穩定性不如Python,常常沒回應,若執行超過50行的程式碼,每10分鐘就得重新啟動一次。這些嘗試,讓卡米爾對Julia官方宣稱的高速說法產生懷疑。

但他們不放棄,摸索多次後才得知,Julia要先熬過第一次啟動慢、第一次編譯慢的階段,才會在後續的運作時間取得速度優勢。他們實戰一星期後,再三驗證這個說法,才放心大力擁抱Julia。

領導者帶頭做,用來終結ElasticSearch + K8s大架構迷信

於是,邱泊寰開始在卡米爾推廣Julia,內部舉辦多次讀書會和共學團來研究。不過,他坦言,當時多數夥伴仍在觀望,直到有一天,他決定拆掉原本ElasticSearch搭配K8s的技術架構,用Julia改寫部分核心程式碼時,團隊才對Julia驟然改觀:原來邱泊寰是玩真的。

這個「ElasticSearch + K8s」架構,是卡米爾多年前因喜愛新技術而導入。但這個叢集架構較適合處理1萬臺機器以上的大型作業,而業務需求未達這個規模的卡米爾,採用叢集作法來執行,反而比直接用單臺機器執行來得更慢。

邱泊寰也認為,直接使用資料庫系統的作法,容易讓程式設計師偷吃步,他們反而不會自行撰寫資料結構,也不會用單純的CSV和JSON檔案格式來處理大量資料流,反而仰賴資料庫的橫向擴展架構,來解決龐大資料量處理。

「這是資深程式設計師不該做的決策,但,我們做了。」他表示,卡米爾後來花了2年拆掉這個架構,改以Julia搭配Python,再利用POSIX 純檔案系統來處理複雜運算,甚至連資料庫都不用。「這是個非常好的體驗!」他說。

在拆解過程中,他們用Julia改寫原本資料處理速度最慢的部分程式,結果得到10倍速度提升。這一收穫驚艷了團隊,他們將這20%的改寫程式碼納入「AI空污溯源平臺」核心程式碼,解決了原本Python效能卡關的瓶頸。

當Numba無法囂張,就用Julia來加速揪出空污兇手

這套AI空污溯源平臺是利用全臺IoT感測器數據,即時預測排放空污的可疑工廠,讓環保署稽查人員有更多時間前往稽查。平臺所處理的資料量每天不同,但最高可達到2GB的CSV資料,一個月也會累積到30GB的CSV資料,再加上必須即時運算,運算量非常大。

在這個專案中,卡米爾採用Python資料處理工具Pandas和自行設計的數學演算法來執行任務,不過,這個作法需要將CSV檔案中的每一列(Row)的資料取出來運算,就算以Pandas apply命令來處理,執行速度還是非常慢。

他們原想借助Python圈的慣用作法,用Numba即時編譯器和NumPy函式庫來加速,但自行設計的數學演算法,卻讓Pandas中的巢狀結構,難以用Numba和NumPy來實現高速運算。這時,「Julia的迴圈運算就能派上用場,」邱泊寰指出,只要簡單地用陣列執行,速度至少比Python快上10倍,非常驚人!

資料前處理時間從1個月縮短為3天,也間接省下雲端成本

在這個專案中,Julia厲害之處在於空氣污染數值的前處理,像是數值合併、刪除格式錯誤和經緯度的處理等。甚至,3年期PM2.5資料清理原需1個月才能完成,改用Julia後,3天內就能解決。

另一方面,由於IoT感測器每天會產生大量CSV格式資料,卡米爾也自行改良Julia套件,直接將CSV資料轉換為Parquet儲存格式來減少資料大小,「只需1秒轉換,資料量就能縮小100倍。」光是資料精簡就幫卡米爾省下不少雲端儲存和運算的成本。

成本的節省,在整個IT架構整骨後更是明顯。邱泊寰透露,卡米爾原本每年租用Google雲端平臺服務得花上60萬元,但拆掉ElasticSearch搭配K8s的舊架構,改用Julia + Python + POSIX純檔案系統後,雲端租用成本降為20萬元,減少三分之二的費用。雖不全然是Julia的緣故,但它間接促成這個效益。

這也說明了公雲平臺對Julia的支援。邱泊寰指出,卡米爾能輕易將Julia程式打包為Docker檔案,再部署到Google雲端平臺上,以平臺上的虛擬機器來執行,也能直接用Google Cloud Run來執行Julia Docker檔案,過程並不費力。

5招法則擁抱Julia,接下來還要學習AI應用

回首來時路,邱泊寰總結出說服團隊採用Julia的5招關鍵。首先,企業必須要有非常堅定的傳道者,要在公司內持續推廣半年以上,讓同事認識Julia後,再開始將Julia導入真實專案中,並挑選執行速度最慢的20%程式碼來改寫。

第三招,必須實際測量成效,進行新舊方法比較,親眼見證加速10倍的好處,團隊成員就更認可Julia的優勢。第四,還要將改寫後的新程式碼,納入專案核心程式碼中持續使用。最後,為了進一步擴散Julia,要讓接手專案維運的成員一面學習Julia,一面負責維運,讓開發部門以外也有更多成員會使用它。

但卡米爾目前對Julia的運用,幾乎是資料前處理,還未用於AI。雖然Julia號稱AI優於Python,但邱泊寰認為,對熟悉Julia AI底層演算法的人來說,很容易以Julia打造一套演算法,而對Julia入門者或只想用現成Julia演算法的人並非易事,因為現有AI框架如TensorFlow仍以Python為主,多不支援Julia,且Python的學習資源遠大於Julia。這也是卡米爾積極參與Julia臺灣社群的緣故,要從不同管道獲得更多資源。

邱泊寰建議,想上手Julia的企業,可先以Julia執行資料前處理運算,特別是已有CSV資料的企業。因為,「Julia光讀寫CSV資料就比Python快10倍,」他指出,企業可先找出程式碼最慢的環節,再以Julia改寫,就能享受驚喜。

TOP

【Julia亮點套件3】臺灣開發|Julia圈首款Transformer模型套件:Transformers.jl
iThome 2021/11/02 07:11(19小時前)
Julia圈首款Transformer模型套件  Transformers.jl


開發者  臺灣NLP研究生鄭景文

熱門特色  支援Hugging Face預訓練模型格式轉換

未來發展重點  電腦視覺任務實作及更完整的分詞工具API

舉凡翻譯、語音助理、聊天機器人,或是摘要生成、文章創作和情緒分析,都靠自然語言處理(NLP)完成。

其中,最受開發者愛戴的NLP模型,非BERT和GPT-3莫屬。它們不只是NLP界的指標模型,更是科技巨頭爭相研究的對象。

但它們本是同根生,都是基於4年前Google開發的Transformer類神經網路架構改良而成。也因此,在主流的程式語言Python中,Transformer模型開發資源十分充沛,但在Julia這個年輕語言裡,並非如此,甚至連專屬工具都沒有。

2019年,這個局面扭轉了,Julia終於有自己的Transformer開發套件,其完整度更受社群好評,成為開發NLP模型的首選工具。這個Transformers.jl套件的貢獻者,就出自臺灣一位碩士生鄭景文手中。

無心插柳柳成蔭,以Julia完整實作出最熱門NLP模型

談起最初的起心動念,專攻NLP研究的鄭景文笑說,當時只因手上的研究進行不順利,於是想轉換心情,「做點別的事。」

那年2019年,正是Google發布NLP里程碑模型BERT的隔年,也是他加入Julia臺灣社群的隔年。鄭景文指出,NLP領域研究多聚焦於Transformer,為了讓Julia愛好者能以最愛的語言進行Transformer研究,他決定自己動手實作看看。

他選擇了最費工也最紮實的方式,來開發這款套件。在資料科學圈,主流模型和工具大多以Python開發,年輕的Julia尚未具備完整的工具鏈,因此,打造Julia模型套件時,開發者通常得以PyCall.jl套件,來將現有的Python工具介接到Julia套件中。

但這麼做,「就丟失了不少Julia本身的良好特性。」所以,鄭景文決定不借用任何Python模組,全部用Julia重新實作,比如,NLP流程中有一個重要的分詞(Tokenization)步驟,需要使用分詞工具將長文章分解為字詞單位,才能進行後續的分析。鄭景文自己從零打造出Julia原本缺少的分詞工具。

Transformer套件提供元件和模型,還能轉換格式

經過幾個月,Transformers.jl完成開發後,很快就受到關注,被收錄到Julia深度學習開發框架Flux中。使用者不只能在Transformers.jl中,找到開發模型所需的元件和開箱即用的預訓練模型,還能用來轉換格式,尤其是從Hugging Face下載的NLP模型格式。

這個格式轉換功能,是鄭景文套件設計之初的重點特色之一。Hugging Face是一家專攻NLP技術的美國新創,在NLP圈擁有大型開源平臺和社群,宛如GitHub般,常提供熱門的高階預訓練模型如Transformer,供NLP愛好者下載、使用。

但,這些熱門模型只能在PyTorch、TensorFlow和Jax等深度學習框架上執行,並不支援Julia專用的Flux框架。因此,為了讓Julia使用者也能採用這些模型,鄭景文就在Transformers.jl中加入了格式轉換功能,讓開發者在Flux上也能執行。

至此,這個套件具備了Julia開發所需的基本功能,也成為Julia開發Transformer的首選工具。鄭景文透露,接下來還要新增更多元素,比如納入Transformer用於電腦視覺任務的實作,以及更完整的分詞工具API。

TOP

【Julia亮點套件2】臺灣開發|秒解複雜偏微分方程式:NeuralOperators.jl
iThome 2021/11/02 07:11(19小時前)
秒解複雜偏微分方程式  NeuralOperators.jl

開發者  清大光電所碩士生甯敬宇



攝影_洪政偉

熱門特色  內建傅立葉和馬可夫神經算子套件,比原作者Python版功能更完整

未來發展重點  打造完整框架,可設計專屬核函數、建置專屬類神經網路

不論是天氣預報、氣溫預測還是飛機動力模擬,甚至是單一疾病的傳播模式,都得靠偏微分方程計算。但,偏微分方程的傳統解法,得花上數十個小時才能算完。

不過,學術圈用AI技術找到了快速解題的新方法。加州理工學院在去年秋季和今年夏季相繼發表了兩篇重磅論文,成功用傅立葉神經算子(Fourier Neural Operators)和馬可夫神經算子(Markov Neural Operators)這兩種AI模型,可以快速計算出偏微分方程難題和流體力學方程式的解,就連最令學術人頭疼的混沌運算,也只要幾秒就能算出結果。

這與傳統數十小時相比,是數萬倍的加速。

臺灣開發者半年內用Julia實作出2種模型

不過,「這兩篇論文作者,只用Python撰寫出實驗性質的Demo模型。」就讀清大光電所的研究生甯敬宇解釋,使用者要用這些模型解特定問題,就得重新實作一次,入門門檻高。

於是,在Julia臺灣社群發起人杜岳華的鼓勵下,甯敬宇花了幾個月,以Julia開發出開箱即用的NeuralOperators.jl套件,內含以Julia撰寫的傅立葉神經算子和馬可夫神經算子,讓使用者可直接在Julia深度學習框架Flux上執行。也因此,這個能快速處理複雜運算的套件,在今年9月中,正式被納入Julia官方網站。

一如Julia這個年輕的程式語言,NeuralOperators.jl的開發者甯敬宇也很年輕。才20出頭的他,開發的套件不僅比原作者的Python版本還實用,而且還更完整。這對主打科學計算的Julia套件生態系來說,也因此更完善。

手工補齊Julia基礎套件不足,解決虛數比較問題

話鋒一轉,甯敬宇坦言,開發過程並非一帆風順。因為,Julia這套問世不到10年的年輕語言,不如30多歲的Python擁有完整的套件開發工具或基礎架構。因此,甯敬宇得自己手工解決這些不足。

比如,傅立葉神經算子中有一項「快速傅立葉轉換」演算法,會將輸入的訊號轉換為頻率空間上的訊號,並以帶有虛數的複數來呈現。「但Julia無法妥善處理這個問題,」甯敬宇舉例,因為帶有虛數,類神經網路無法比較複數大小,因此,甯敬宇得手動將虛數部分「封印」在類神經網路層中,不讓它影響計算過程。

這個挑戰很大。因為,甯敬宇一面要更改模型結構、解決虛數問題,一面又要保持模型準確度。

加速模型600倍訓練時間,未來還要完善

經過一段折騰、克服挑戰後,他也在自己就讀的研究所實驗室,用NerualOperators.jl來解決模型訓練問題。

舉例來說,他的實驗室專攻量子光學,需要在機率空間上,壓縮一道雷射光,並量測這道光的變化。但,這種變化非常微小,誤差甚至低於量子力學保證能觀察到的最小範圍,為求更精確的數據,他們打造了一套卷積網路模型,可達到極高的保真度(0.99)。

但是,「缺點是訓練時間得花上好幾天,」甯敬宇解釋,因為卷積網路的特徵抽取機制受限,特別花時間,後來他改用自己開發的NeuralOperators.jl後,就解決了特徵抽取的效能瓶頸,「10幾分鐘就有結果,比原有模型快上600倍,保真度還能達到0.9999!」

不只能用於學術研究,NeuralOperators.jl還能用在生活化的影像處理場景上,比如,它可將經壓縮、解析度較差的照片,還原為高解析度的影像,又或是,它能根據影片的第一幀影像,來預測下一幀。

甯敬宇也透露,未來,他還要優化套件,要提供一套完整的框架,來讓使用者用來設計專屬的核函數、建置專屬的類神經網路。

TOP

【Julia亮點套件1】臺灣開發|超完整圖學深度學習套件:GeometricFlux.jl
iThome 2021/11/02 07:11(19小時前)
超完整圖學深度學習套件  GeometricFlux.jl


開發者  中研院生物資訊學程博士候選人 杜岳華



攝影_洪政偉

熱門特色  內建2種熱門GNN架構、支援CUDA能靠GPU加速,更是官網力推的生態系

未來發展重點  加入更多類神經網路層、模型和GNN專屬資料集

舉凡美國FBI用來追查犯人的犯罪嫌疑人網絡、科技巨頭阿里巴巴用來推薦商品的人際關係網絡,都離不開圖(Graph)。就連生活中常見的交通網路、好友社交關係,甚至是複雜的化學分子結構、基因分析,都靠圖類神經網路(GNN)計算。

可以說,GNN是卷積網路(CNN)的延伸模型,可涵蓋CNN可解的任務,更進一步延伸至圖上。GNN比深度學習更擅長處理複雜關係網絡,對需要大量複雜運算的生醫、物理和工業製造等領域學科,更是如此。

因此,主打科學運算的程式語言Julia,視GNN為一個非發展不可的領域。Julia核心開發團隊早在幾年前,就布局圖學套件生態系JuliaGraphs,收錄各種圖學套件和工具,讓開發者用來建立自己的圖學模型。

2019年,Julia進一步多了個功能強大的專屬圖學深度學習套件:GeometricFlux.jl,甚至被官網列為六大生態系之一。它不只提供常見的圖學模型元件,還支援CUDA,可以用GPU來加速,更與JuliaGraphs相容,就像是Julia深度學習框架Flux多了一對翅膀。

這個套件的貢獻者,就來自Julia臺灣社群發起人杜岳華。

出身生醫領域需圖學運算,挽起袖子刻出專屬套件

專攻生物資訊的他指出,當初開發這個套件,是因為生資領域有許多研究得靠圖學運算,比如基因分析。

一般來說,AI社群常用的深度學習,是以向量(Vector)或陣列(Array)來運算,不論是影像辨識、語音分析、文字或訊號處理,資料輸入模型後都會編碼為向量。處理這類資料的方法,通常是以一層層的卷積網路或迴歸網路(RNN)來計算。

但,還有許多資料無法以向量或陣列來處理,比如交通網路、社交關係和科學資料,都屬於發散式的圖形,適合用GNN處理。

因此,2019年,身為Julia愛好者的杜岳華,決定動手做一套GNN深度學習套件,讓使用者可在Julia深度學習框架Flux上開發GNN模型,並整合Julia原有的圖學工具生態系JuliaGraphs。

內建圖學模型和類神經網路層,支援2款熱門GNN架構

GeometricFlux.jl看來複雜,但杜岳華形容,套件的中心精神就是「Graph + Deep learning」。他指出,這個套件中包含了建立GNN所需的元件,比如圖卷積層,使用者可用來建立GNN,使用方法就如Julia深度學習套件Flux一樣。而且,這些圖卷積層也與以Flux建造的層相容,可搭配使用。

其他元件還包括卷積層、池化層,以及搭配自動編碼器的特殊層,可用來預測圖形的邊(Edge)。此外,GeometricFlux.jl還與JuliaGraphs生態系介接,允許使用者以SimpleGraph或SimpleWeightedGraph建造圖形,並將整張圖放置到既有的類神經網路層中,來縮短運算時間。

這款套件支援兩種熱門的GNN架構,一個是訊息傳遞(Message Passing),另一個則是由Google提出、較為通用的圖網路(Graph Network)。在這裡,杜岳華加入一個巧思,將訊息傳遞設計為圖網路的子類型,讓兩種架構相容。

就連研究者關心的變數問題,杜岳華也想到了。意思是,這個套件支援可變圖輸入(Variable graph input),可讓圖需隨資料或樣本而改變。再來,杜岳華也讓套件支援一套全新的FeaturedGraph架構,也就是帶有特徵的圖結構,使用者可輸入節點特徵、圖結構、邊特徵和全局特徵來運算。

杜岳華透露,至今,這個套件仍在擴增中,他還要在GeometricFlux.jl裡,加入更多類神經網路層、模型和GNN專屬資料集,來豐富GeometricFlux生態系。

TOP

資料科學語言新選擇,Julia女神風也吹進臺灣了
iThome 2021/11/02 07:11(19小時前)
歷經10多年默默無聞的折騰和耕耘,2018年才釋出1.0版的開源程式語言Julia,終於站上大型企業程式碼現代化的舞臺中心。


至今,全球已有1萬多家企業採用這個年輕語言,包括科技巨頭Google、微軟、IBM,還有製藥大廠莫德納、AZ和輝瑞,以及全球第5大的保險公司英傑華、紐約聯邦儲蓄銀行、NASA、思科、德勤和澳洲政府。這些重量級用戶都以Julia取代舊有程式語言,來加速各領域的複雜模型運算。

程式語言後浪推前浪,Python的禪意催生Julia

在IT界,新程式語言的誕生,不外乎是要保留舊語言的好,改善舊語言的不足。Python就在這個脈絡下誕生。1980年代,在程式語言ABC開發團隊任職數年的Guido van Rossum,深知這個語言的強項與侷限,於是決定發展一款新語言,既要保留ABC容易上手的好處,又要彌補它難以實用的缺陷。

這就是Python的雛形。在另一位Python創始人Tim Peters撰寫的「Python的禪意」中,也清楚點明這個宗旨:簡單優於複雜,複雜好過繁瑣,稀疏勝於密集,可讀性是關鍵。於是,Python兼具簡單易懂又實用這兩大優點,成為系統管理專用的腳本語言,專門解決日常系統管理工作。

但當時,Python之父從沒想過,這個專為系統工作設計的腳本語言,會在30年後成為另一個目的的專用語言:資料科學,而且還在今年10月的TIOBE熱門程式語言排行中拿下冠軍,擊敗蟬聯榜首20多年的Java和C語言。

Python入門門檻低、功能強大、擁有豐富的套件生態系和社群支援,但它終究不是資料科學而生,因此有著先天的缺陷。比如,Python本身執行效率差,執行模型運算時,得靠其他工具或C語言加速,而且仍存在程式語言界長久難治的雙語言問題,無法兼具好讀好寫、執行效能又高的兩大優點。

Julia的野心:保留Python好讀好寫哲學,還兼具高效能執行力

這些不足,再加上資料科學AI大浪掀起,催生出新一代程式語言Julia。

它是麻省理工學院(MIT)在2009年發起的專案,由一位教授和三位學生組成的團隊負責。他們發豪語要打造一款資料科學專用的程式語言,要簡潔易懂,又要能高效執行,要一次終結雙語言痛點。

四位創始人Viral B. Shah、Alan Edelman、Stefan Karpinski和Jeff Bezanson在Julia正式開源的2012年,開宗明義就說:「我們很貪婪。我們要打造一個開源語言,要擁有自由的版權。它具備C的速度和Ruby的動態性,要像Python一樣用於通用程式任務,像R一般輕鬆處理統計學,像Perl自然地處理字串,要像MatLab般擁有處理線性代數的強大能力,也要像Shell一樣擅長不同程式的串接。我們要它容易上手,也要它讓最厲害的高手愛用。我們要它可以互動,還要能編譯。」

因此,在設計之初,開發團隊就全心全力投注在Julia編譯器上,希望透過編譯器的講究設計,讓程式開發者能以接近人類語言的方式撰寫程式,達到如Python般簡潔易懂,又能以平行編譯技術加速執行效率,來兼顧效能表現。

它還解決雙語言問題。一般來說,開發機器學習應用時,開發者得先使用MatLab、Python、R這類高階語言來測試、建模和建立原型,但到了正式上線或擴展時,得用更快、更有效率的低階語言來改寫程式。但若用Julia,一個語言就能搞定兩種工作。

可以說,Julia一開始就為複雜運算的資料科學設計,與以系統管理為出發點的Python有著本質上差異。另外,Julia在早期發展階段,因套件生態系尚未成熟,因此借用不少Python套件資源,這也是為何Julia對Python、R、MatLab、C等主流語言的支援度很高,使用者可以專屬套件來呼叫。

簡單易懂、高效快速,推動企業程式碼現代化

Julia正式開源後,社群成員數開始大幅增長。2015年,四位創始人共同成立IT公司Julia Computing,來支持Julia語言發展。2018年Julia釋出1.0版,告別每個月需要大幅除錯更新的階段,進入穩定期,2021年更新至1.6版,加入平行編譯技術,也解決使用者最頭痛的第一次編譯必慢速的問題,也就是方法無效(Method Invalidation)。

直至今年7月,Julia已有2,900萬次下載,在GitHub上獲得20多萬顆星星,更擁有數千名開發者貢獻6,000多個套件。這個年輕語言不僅被全球上千所學校採用,包括世界一流學府MIT、史丹佛大學與加州大學柏克萊分校,還被1萬多家企業使用,其中不乏國際知名大廠和政府機關,橫跨天文、物理、生醫、製藥、金融和半導體產業。

這些企業用戶都有一個特點,就是用Julia來執行極其複雜的運算。比如,全球第五大的保險公司英傑華,為因應歐盟最嚴格的新監理法規清償能力II(Solvency II),得每日進行複雜的資產風險模擬,來確保自己有能力應付金融危機。

原本,他們採用IBM Algo系統來執行風險模擬預測,但在法規正式上路前,英傑華金融建模總監Tim Thornham就已發現系統有所不足,於是自行以Julia開發一套風險預測系統IM3。法規上路後半年,該系統正式取代舊有Algo系統,因為IM3不只將上萬行程式碼縮短為1,000行,啟動時間也是Algo的十分之一,甚至原本執行風險預測模型所需的伺服器叢集,也從100臺縮減至5臺。

Julia要解決老舊運算工具的現代化難題

Julia核心開發團隊,對Julia還有另一個期許:要改善產業沿用老舊運算工具的難題。「現今的電腦運算技術停滯不前,」Julia創始開發者暨Julia Computing CEO Viral Shah在今年Julia技術大會前夕強調:「因為,現今的資料科學家和工程師仍使用數十年前設計出來的產品,」這些產品,多少阻礙運算效能。

比如,「1970、1980年代設計的SPICE積體電路模擬程式,」Julia Computing技術長Keno Fischer舉例,SPICE的模擬器是以C語言撰寫,但腳本全以Python寫成。使用者若要執行進階任務,比如參數化或整合機器學習模型,就會受到這些老工具的干擾,「但Julia能改善這些問題。」就連知名資料倉儲新創Snowflake前CEO Bob Muglia也應聲認為,現今業界用來開發模型的工具和系統,仍是幾十年前的產物,無法完全發揮雲端優勢。

這也是為何,Julia核心開發團隊這幾年積極打造公雲平臺JuliaHub,要在Julia語言的基礎上,來加速企業級的建模、測試和部署工作。Julia Computing更將Julia定位為,製藥、金融、HPC甚至是半導體產業等需複雜運算的專用語言,要讓程式碼工作更精簡。

臺灣也開始擁抱Julia,更貢獻重量級套件

這股風潮,也漸漸吹進臺灣。不少需要大量科學運算的學校實驗室開始擁抱Julia,比如臺大、清大、陽交大,範圍更涵蓋生醫、物理、自然語言處理和智慧製造,而專攻生物資訊的中研院博士候選人杜岳華,也發起Julia臺灣社群,自己更是Julia重要開發成員之一。

他所開發的圖類神經網路套件GeometricFlux.jl,在2019年被Julia納入官方重要資源中,同樣被Julia官方看上的,還有臺灣碩士生開發的Transformer.jl套件與NeuralOperators套件,紛紛將影響全球AI社群的模型,以Julia實作出來,壯大Julia套件生態系。

除了學界,臺灣還有少數企業也開始用Julia改善作業效率,像是專攻政府大數據和AI的卡米爾,以Julia改寫重要架構中20%核心程式碼,就得到比原本Python還要快10倍的速度,更省下大筆雲端平臺年租費。

在臺灣,Julia的身影越來越清晰了。

快速秒懂Julia

‧ 高效運算:用LLVM編譯器進行即時編譯(JIT)

‧ 直覺語法:簡潔度與Python媲美

‧ 動態型別:可指定變數型別

‧ 支援Python和C套件:可以PyCall呼叫Python程式碼

‧ 內建套件管理器:方便管理、查詢套件

‧ Metaprogramming:可用來生成其他Julia程式

‧ 自動記憶體管理:提供一系列垃圾回收方法

‧ 平行化運算:語法比Python簡單

資料來源:iThome整理,2021年10月

TOP

返回列表