iT邦幫忙

2023 iThome 鐵人賽

DAY 21
0
AI & Data

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

[Day 21] - 機器學習系統設計 🏭 x Rust 🦀

  • 分享至 

  • xImage
  •  

今日份 Ferris

接下來是系列文最後一階段囉,一起衝向終點吧!
今天是 Ferris 日本動漫化系列哈哈哈
https://ithelp.ithome.com.tw/upload/images/20231007/20141304DeRg99A5WV.png

MLOps 與機器學習系統設計的關係

前面已經提過,MLOps 中的 Ops 來自於 DevOps,也就是 "Development" (開發) 和"Operations" (運營)。
而 "營運" 某樣東西就代表著把它產品化,其中包含了部署、監控和維護。
換句話說,MLOps 實際上就是一套工具和最佳實踐,以將機器學習應用近一步產品化。

ML 系統設計則是使用系統性的方法來進行 MLOps,它會從更整體的角度考慮 ML 系統,以確保所有部件與其利益相關者能夠共同合作,以滿足預先訂好的目標和需求。

下圖即為 ML 系統的各個部件 (正如在上次挑戰 [Day 01] 前言 — 是誰殺了模型? 提到的 ML code 在實務上的機器學習系統中所佔的部分遠小於支持它運作所需的基礎架構):
https://ithelp.ithome.com.tw/upload/images/20231006/20141304s3GLQHuDva.jpg
*圖片修改自 Designing Machine Learning Systems Figure 1-1.

今天選擇將主題定為 ML 系統設計而非 MLOps 是因為我認為這兩者雖然是相輔相成的關係,但在談論 MLOps 時,或許更應該優先考慮系統設計。
以下是我認為為什麼考慮系統設計比 MLOps 更為關鍵的幾個原因:

  • 整體視角:系統設計從整體視角考慮機器學習系統,因此必須從系統的架構、組織、工作流程,以及如何將機器學習應用融入現有基礎設施中等角度切入,以確保各個環節都能合作無礙。
  • 問題定義:系統設計確保在開始機器學習專案之前,問題被正確定義,目標被清晰界定,並確保機器學習是解決問題的最佳方法。
    這有助於確保投資在機器學習上的時間和資源是有價值的。
  • Data pipeline:系統設計包括設計與實作資料管線,而資料正是任何機器學習應用的基礎。
    如何獲取、清理、轉換和存儲數據是系統設計的關鍵部分,並且它對機器學習模型的性能和可靠性有重大影響。
  • 模型整合:系統設計考慮如何將機器學習模型無縫整合到現有系統中。
    這可能涉及到API設計、服務化、複雜的工作流程管理,以確保模型的實際價值可以被實現。
  • 可擴展性:系統設計考慮如何應對未來的擴展需求。
    機器學習模型和相關基礎設施需要具有擴展性,以應對數據量的增加或新功能的引入。
  • 性能和安全性:系統設計關注系統的性能、安全性和可靠性,這對確保機器學習應用能夠在生產環境中穩定運行至關重要。
  • 費用效益:系統設計有助於確保機器學習項目的成本得到有效控制,並確保資源投資是有價值的。

也就是說,儘管 MLOps 是將機器學習模型引入生產環境的關鍵步驟,但它依然在系統設計的框架內運作。
如果系統設計不正確,MLOps 便難以施行,更可能導致機器學習應用的不成功。
因此,優先考慮系統設計是確保機器學習項目成功的一個重要步驟。
在系統設計階段,我們也可以更針對機器學習產品的生命週期進行全面性的考量,確保問題定義清晰,資料管線設計正確,並建立一個堅實的基礎,以便有效地實施 MLOps:
Life cycle
*圖片修改自 Introduction to Machine Learning in Production

關於機器學習產品的生命週期可以參考之前的系列文 [Day 03] 機器學習產品生命週期 — 救救我啊我救我

Rust x 機器學習系統設計

而 Rust 作為一門安全、高效、可靠的語言,在 ML 系統設計和 MLOps 中具有許多優勢。
讓我們依照不同方面逐一說明:

  • 資料處理和特徵工程:
    Rust 的高性能和記憶體安全性使其成為處理大型數據集以進行特徵工程的理想語言。
    而 Rust 的模式匹配和型別系統則有助於定義和轉換特徵,提高特徵工程的穩定性和可維護性。
    我們可以輕鬆地撰寫高效的資料處理管線,而不必擔心記憶體泄漏或執行緒安全性問題。
    舉例來說,Rust 的 rayon crate 可以用於平行處理大規模資料,而無需擔心同步和互斥。
  • 機器學習演算法:
    雖然 Rust 不像 Python 那樣擁有廣泛的機器學習庫,但實際上也有許多人致力於將機器學習框架以 Rust 實現,例如 Rust 版的 Scikit-learn - Linfa 或讓我們能在 Rust 中使用 LibTorch (C++ API PyTorch) 的 tch-rs,我們也可以使用 Rust 自行實作機器學習演算法,像是 llama2.rs
    另外,Rust 可以用於開發能夠在嵌入式設備上運行的機器學習演算法,並同時能在高性能伺服器上運行的機器學習演算法,這點或許是未來將 AI 落地在各個領域中的關鍵。
  • 評估模型表現:
    [Day 08] - Rust x 單元測試 x MLOps (下) 也談到 Rust 測試在 ML 環境中的功用,我們可以使用 Rust 建立自定義的測試框架,以測試機器學習模型的性能,並確保模型正確處理不同情況。
    而且 Rust 也允許我們轉寫高效的模型評估,讓我們快速測試不同模型和參數的性能。
  • 基礎設施:
    Rust 作為系統性語言,構建高性能基礎設施正是它的強項,例如,我們可以使用 Rust 撰寫高性能的資料處理服務、API 服務和分佈式系統,以支援機器學習工作流程。
    另外 Rust 也完全支援容器化技術,如 Docker,這讓我們更加容易地將 ML 模型封裝為容器以便部署。
  • 部署、監控和維護:
    Rust 可以用於創建自定義部署腳本,以自動化機器學習模型的部署過程,將訓練好的模型封裝為容器,並在生產環境中進行部署,這有助於確保模型在生產中的穩定性。
    在監控與維護方面,同樣可以編寫用於監控模型性能的 Rust 監控工具,以及用於自動化模型維護的腳本,以實時監控機器學習模型的性能,並在需要時執行維護操作。

總之,Rust 在 ML 系統設計和 MLOps 中的優勢體現在其性能、記憶體安全性、可靠性和可擴展性方面。
它可以用在整個機器學習產品生命週期中,從數據處理到模型訓練,甚至於部署和維護機器學習應用,確保系統的高效運行和可靠性。

在剩下的幾天,我會以先從 ML 系統設計的角度切入上述各個部件常見的挑戰,然後再探索可以引入 Rust 的地方,那我們就明天見吧~
/images/emoticon/emoticon17.gif


上一篇
[Day 20] - 中場休息 🏖️ 如何度過 Rust 新手村? 我要打十個 Borrow checker!
下一篇
[Day 22] - 資料處理和特徵工程 🔢 (上) | ML 系統設計 🏭
系列文
Rust 加 MLOps,你說有沒有搞頭?30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言