iT邦幫忙

2023 iThome 鐵人賽

DAY 29
0
AI & Data

Rust 加 MLOps,你說有沒有搞頭?系列 第 29

[Day 29] - 期末專欄 🎞️ | Rust 是資料分析的未來嗎?

  • 分享至 

  • xImage
  •  

今日份 Ferris

今天要來談未來,所以是超級未來感擬人化 Ferris,越畫越放飛自我了哈哈哈
https://ithelp.ithome.com.tw/upload/images/20231014/20141304trlH2wZP4p.jpg

Rust 是資料分析的未來嗎?

正如在這個系列文前半段提到的,Rust 是一門安全、高效的程式語言,這兩個特點是其在資料科學和 AI 領域的兩大優勢,然而最令人擔心的就是沒有圍繞著資料相關的社群。
但實際上這兩年 DatabricsData and AI Summit 也開始出現了 Rust 的蹤影,例如去年就邀請到 Polars 的作者親自講解 Polars: Blazingly Fast DataFrames in Rust and Python

我想這代表 Rust 在資料科學和 AI 領域的應用逐漸普及,而隨著應用逐漸普及,我們可以期待未來有更多優秀的資料科學和 AI 應用開發在 Rust 的幫助下誕生。

而今年由 lakeFS 共同創辦人暨技術長 Oz Katz 所演講的 Delta-rs, Apache Arrow, Polars, WASM: Is Rust the Future of Analytics? 則講述了為什麼 Rust 和相關的新技術(如 WebAssembly)將在未來幾年在資料生態系統中發揮重要作用,今天就一起來聽聽他怎麼說吧。

lakeFS 是 資料的 Git,可以使用和 Git 類似的方式對資料湖泊進行可擴展且與格式無關的版本控制。
然後吉祥物很可愛!
lakeFS logo

資料分析的 "現在"

我相信大家對下圖中的各個縮圖並不陌生,甚至大部分的孩子可以說是專精。
這是當今最普遍會看到的資料基礎設施與工具:
https://ithelp.ithome.com.tw/upload/images/20231014/20141304F81BsRAoDg.png
*圖片修改自 Delta-rs, Apache Arrow, Polars, WASM: Is Rust the Future of Analytics?
我們可以發現這麼多的工具卻僅與兩種語言有關:

  • Java (與其它基於 JVM 的語言,例如 Scala) 從 2006 年 Hadoop 發表以來就是當之無愧的 "大數據" 之王。
  • Python 則因其強大的科學與資料導向函式庫生態系 (Numpy、Pandas、Scipy 等) 而成為互動性或研究專案的首選。

也就是說,要在現代成為一個好的資料工程師,精通這兩種語言 (加上 SQL) 是無可避免的。
噢對,可能或許還需要會用一點 Excel:
https://ithelp.ithome.com.tw/upload/images/20231014/20141304maqQf2IOzo.png

Java 和 Python 的侷限性

然而,過往使這些語言紅極一時的優點,如今已成了枷鎖,舉例來說:

  • 虛擬機自身與對底層機器的抽象化,使得我們難以進一步優化已經不再變快的硬體,例如對 CPU 來說,效能上的瓶頸已經不是等個兩年讓摩爾定律生效就能解決的了。
    從下圖就能看出在 2011 年左右就 CPU 在單執行緒的表現成長就趨緩了:
    https://ithelp.ithome.com.tw/upload/images/20231014/20141304kE1Pr57Oil.png
    A Look Back at Single-Threaded CPU Performance
  • 垃圾回收機制,雖然是為了確保記憶體安全性的必要之舉,但同時也會與程式表現爭奪越來越珍貴的運算資源。
  • 發佈與部署,依賴於將運行環境中的多個 artifacts 帶進來,這使得很難以高資源效率的方式運行它們,對,我就是在說 CLASSPATH 跟一堆 JAR 😛
  • Python 重度依賴於以 C 撰寫的低階函式庫 (例如 NumpyPillow),雖然表現上來了,但卻難以確保其記憶體安全性。

Rust 如何解決其中的一些侷限性

Rust 作為相對較新的語言,截長補短之下,也解決了上述的一些侷限性

  • 它具有不需要負擔 "垃圾回收稅" 的記憶體安全性,歸功於所有權模型 ([Day 20] - 中場休息 🏖️ 如何度過 Rust 新手村? 我要打十個 Borrow checker!),與記憶體管理相關的 Bug 都被一網打盡,而且大部分情況都是在編譯時就檢查,所以完全不會浪費 runtime cycles!
  • 表現與 C、C++ 相當,因為 Rust 編譯器是 LLVM 的前端,所以能編譯成可直接訪問作業系統與架構的原生二進制檔。這使得 Rust 應用程式能以高效的方式直接利用底層硬體,而不需隔著一層抽象。
  • 最後,Rust 應用程式不需要包含 runtime,所以可以使用小小的靜態編譯二進制檔發佈。
    這也使 Rust 非常適合在各種環境中發佈與部署,從高性能伺服器到嵌入式系統,甚至是瀏覽器都暢行無阻!

另外,Rust 也具有很高的 互操作性,例如 FFI to C,或是 pyo3.rs 讓我們可以用 Rust 建構邏輯,但同時享有 Python 平易近人的 API。

WebAssembly 加入對話 — 未來的 runtime?

https://ithelp.ithome.com.tw/upload/images/20231014/20141304ouFcPR5rnm.png

在這個系列文已經多次重複提起 WebAssembly ("WASM"),而講者也對 WASM 的出現格外興奮,因為它讓人想起當年 JAVA "一次編寫,到處執行 (WORA)" 的願景:
https://ithelp.ithome.com.tw/upload/images/20231014/20141304h3rPo5BdJb.png
雖然 Java 說可以在車上執行,但想像一下自駕車在千鈞一髮之際還在垃圾回收 😉

回到 Rust,它能編譯成 WebAssembly,而我們在前面的專案也做過,只需要建立一個小型且易於發佈的程式,就能在幾乎任何環境中運行。

想像一下,同一套商業邏輯能在操作型資料庫、分析引擎與使用者的瀏覽器執行有多讚?

"後現代" 資料分析的願景

如果資料分析能夠利用上述的優勢並採用 Rust 工具呢?
https://ithelp.ithome.com.tw/upload/images/20231014/20141304Qun5pV4MTM.png
*圖片修改自 Delta-rs, Apache Arrow, Polars, WASM: Is Rust the Future of Analytics?

其中的各個縮圖分別為 (Polars 跟 DataFusion 應該是不用說再說明了):

  • redpanda - 資料串流平台,有 Kafaka 的 API,但沒有 JVM,快 10x。
  • Arrow - 用於資料分析的語言無關行式記憶體格式。
  • delta-rs - Delta lake 的 Rust 函式庫 (綁定到 Python)。
  • Materialize - 針對操作型工作的資料倉儲。
  • burn - Rust 的深度學習框架。
  • Apache Arrow Flight - 高速資料傳輸。

如果我們從資料來源就利用 WASM 來讓它們 "乾淨" 一點,所有的環節都能在掌控之下,而在另一端,繁重的工作將從基於 JVM 的資料框架轉移到基於 Rust 的框架,我們可以充分的利用手邊的硬體,並且我們的 Rust 程式碼將在邊緣端 (直接在瀏覽器中) 重新用於報告或互動性的工作,是不是很棒?
https://ithelp.ithome.com.tw/upload/images/20231014/20141304PePqY3hXfL.png

也就是說,Rust 在資料科學領域的應用整體來說還是很值得期待的,不只是在速度上的提升,還有可能從根本上解決一些常見的痛點。
今天就談到這啦,最後一次,明天見!!!!
/images/emoticon/emoticon46.gif


上一篇
[Day 28] - 預測服務 🚀 (下) | Rust x Docker 部署鋼鐵草泥馬 🦙🦀
下一篇
[Day 30] - 打完收工 🫰|Rust 加 MLOps,你說有沒有搞頭?
系列文
Rust 加 MLOps,你說有沒有搞頭?30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言