專攻政府大數據和AI應用的卡米爾,利用Julia來改寫環保署AI空污溯源平臺的20%核心程式碼,突破Python速度卡關瓶頸,得到10倍加速。(圖片來源/邱泊寰)

對一家成立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改寫,就能享受驚喜。

熱門新聞

Advertisement