APP下载

【Julia台湾企业实例:卡米尔】用Julia改写超慢2成程式码,让庞大空污监测资料前处理快10倍

消息来源:baojiabao.com 作者: 发布时间:2024-05-09

报价宝综合消息【Julia台湾企业实例:卡米尔】用Julia改写超慢2成程式码,让庞大空污监测资料前处理快10倍

专攻-大数据和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改写,就能享受惊喜。

2021-11-02 09:46:00

相关文章