首先介紹要陪伴我們 30 天旅程的小朋友,它叫 Ferris,是一隻被煮熟的螃蟹!
*Animated Ferris for Rust Fest Berlin by A. L. Palmer
選擇螃蟹是因為 Rust 用戶的稱呼是 Rustacean (就跟 Python 用戶有時候會被叫做 Pythonista 一樣)。
而 Rustacean 是 Rust 與 crustacean 的混成詞 (portmanteau,不用擔心,這不會考)。
其中 crustacean 是甲殼綱動物,所以非官方吉祥物熟螃蟹 Ferris 應運而生!
你說把吉祥物煮熟好像有點太粗殘了?
其實它的顏色是氧化鐵紅啦,畢竟是生鏽的 Rust 嘛。
今年初 Pandas 2.0 發布,踏上離開 Numpy 的旅程,轉而投向 Arrow 的懷抱,因此大家都對其速度表現上有很高的期待,而許多人也馬上將它與同樣用以處理 DataFrame 但基於 Rust 的 Polars 進行對比。
從結果上來說,Polars 在很多方面表現還是好一點,而剛好在工作上有機會將本來在 Pandas 較繁重的計算處理遷移到 Polars 上,實際上也真的得到了表現上的提升。
其中最令我印象深刻的是在某些任務上使用 polars.struct 將原始資料轉為 Rust 的 struct
型別時可以得到數量級的差異 (而且程式碼還很簡潔,Pythonic!)。
讓人不禁想如果能在每個環節都多引入一點 Rust 不就飛天了,但為此拋棄成熟的 Python 生態系也太不切實際了,所以我也只是想想而已 🤪
但這次鐵人賽報名到挑戰開始的最後期限正巧一個多月,是一個不多不少剛剛好的時間,正好可以衝一下!
所以我緊急把本來想寫的題目加上 Rust,裸跑開賽,用一個腦熱 bootcamp 的方式記錄一下這一個多月以來從 0 開始學習的過程哈哈哈
由於網路上資源較分散,所以這個系列文主要會參考 Duke 大學教授 Noah Gift 的 Small Rust Tutorial For MLOps、Brown 大學版本的 The Rust Programming Language (大致同樣的內容有中文翻譯版,主要差別在第 4 章關於所有權的說明) 以及許多 Youtube 影片。
大致上的結構會分為四個部分:
以所有軟體專案都會經歷的工作流程來說明如何優雅地從 Python 轉換到 Rust
基本上就是說服大家為什麼要學 Rust 🤣
完成一個利用 Huggingface LLM 模型的 chatbot 專案
喘口氣,聊聊 Rust 的學習資源與如何與 Rust 最勸退人的 Borrow checker 相處
回到 MLOps 的主題,以 ML 系統設計的角度談談 Rust 如何在這裡發揮
這部分會參考 Chip Huyen 的著作 Designing Machine Learning Systems 以兩至三天為一組的架構來介紹以 ML 系統設計的角度如何看待 ML 系統的三個面向 — 資料、模型、產品,以及 Rust 可以如何被應用在 MLOps 中。
這個月過後你將得到:
因為 MLOps 有非常多面向,講概念太過發散,講工具又太不泛用,所以這次挑戰聚焦於以 Rust 來實作機器學習的應用專案,旨在引導熟悉 Python 的孩子進入 Rust 的世界。
總的來說,這並不是一個 Rust 語言教學,但會提供足夠的說明以讀懂程式碼,另外這個系列文對於 MLOps 的方法論上著墨會比較少,有興趣的孩子可以參考之前的系列文章 然後模型就死在 Jupyter Notebook 了 (ಥ﹏ಥ) 系列。
坦白說,Rust 目前在資料科學領域的工作機會比較少,在忙碌的工作之餘還要學習或許會顯得沒什麼動力,但透過學習 Rust 可以補足許多關於 System programming 的底層知識,在成為更好的自己的同時,也能拓展職涯的可能性:
*Machine Learning Operations (MLOps): Overview, Definition, and Architecture
另外,正如 Rust 的官方標語所強調的:
A language empowering everyone to build reliable and efficient software.
我想 MLOps 的目標都是使產品更好,而 Rust 賦權 (empowerment) 的精神讓我們無論現在寫的是何種程式碼,都能因為 Rust 被賦予更多能力,寫出更穩健且高效的產品。
所以給它一個機會吧~ 最後不免俗的來一張熊俠貼圖
明天見!