模型 / 資料集
openlake-project/openlake avatar
openlake-project/openlake

OpenLake 評估:Rust 與 io_uring 打造的 GPU 儲存引擎,值不值得放進你的推論叢集

OpenLake is a high performance storage engine for efficient LLM inference and GPU Training

2,604 個 Star423 個 ForkRustApache-2.0

秒懂

它是什麼?
OpenLake 以 Rust 加 io_uring 為基礎,訴求把 GPU 節點本身變成 KV cache 池與 S3 相容物件儲存。這篇拆解它的實際機制、啟動指令、以及官方文件沒有明講的取捨。
適合誰用?
如果你的團隊已經在用 vLLM 服務長上下文模型,而且節點上有閒置的 host RAM 與本地 NVMe,OpenLake 的 KV offload 路徑值得先在單機 local 模式試一輪,因為它不需要改動推論程式碼,只需換掉 kv-transfer-config 裡的 connector。反過來說,如果你的瓶頸在於跨區域資料一致性、多租戶權限或需要成熟的 S3 API 覆蓋率,這個專案目前的定位不在那裡,把它當成通用物件儲存會失望。
可以商用嗎?
可以。Apache-2.0 是寬鬆授權:你可以使用、修改並販售以它為基礎的軟體,只需保留著作權與授權聲明。
還在維護嗎?
有在維護。儲存庫最近一次提交在 1 天前。
用什麼語言寫的?
主要是 Rust(依據 GitHub 的語言統計)。

以上回答依據專案的 GitHub 資料(最近同步於 2026年9月15日)與我們的分析,不構成法律意見。

開源專案深度解析

OpenLake 想解的是 GPU 等資料的那段空轉

訓練與推論的 GPU 閒置,來源通常不是算力不足,而是資料路徑跟不上。README 把痛點講得很直接:讓 GPU 在訓練與推論期間持續有資料可吃,減少閒置時間。它列出的適用場景有五類,分別是 KV cache offload、VectorDB 的索引建立與向量服務、RL 與 ML 工作負載的 checkpoint 儲存與取回、模型訓練的小檔案 I/O 與隨機讀取,以及 agentic 應用需要的長對話與記憶體上下文儲存。

這些場景表面分散,共同點卻很清楚:都是大量小 I/O 加上對延遲敏感的隨機讀取。傳統做法是把這些資料放到遠端物件儲存,代價是每次讀取都要跨網路往返;OpenLake 的答案是把儲存層直接放到 GPU 主機上,用本地 host RAM 與磁碟承接。README 對 KV cache 的描述是「inference engine writes KV once and reads it back in milliseconds」,並在 128K 上下文視窗下給出 66× 的 time to first token 加速數字。這些數字出自專案自己的部落格與圖表,我沒有獨立驗證,讀者應該把它當成專案宣稱而非中立量測。

目標讀者是誰?從安裝路徑就能看出來。第一條路是 pip install openlake-vllm 加 openlaked,這是給已經在用 vLLM 的推論團隊。第二條路是 cargo build 加 S3 客戶端,這是給需要自建儲存後端的平台團隊。兩條路的門檻差很多,前者接近零改動,後者要能自己編 Rust 並管理設定檔。

KV offload 的資料流:connector 寫入、共享池讀回

OpenLake 在 vLLM 裡的角色是一個 KV connector。啟動方式是把 kv_connector 設為 OpenLakeConnector、kv_connector_module_path 指向 openlake_client.openlake_connector、kv_role 設為 kv_both,並在 kv_connector_extra_config 裡給出 openlake_nodes 與 openlake_device 兩個鍵。kv_both 意味著同一個 connector 同時負責寫入與讀取,這也是為什麼單一 GPU 主機就能自成一個池。

單機模式最單純:openlake_nodes 填 ["127.0.0.1:9400"],openlake_device 填 local,openlaked 以預設設定啟動即可。README 特別註明「By default OpenLake offloads to the same host」,要跨整個 GPU 機隊才需要帶 --config。這一點對評估很重要:單機路徑不需要任何網路設定,你可以先量測本地 offload 的實際收益,再決定是否投入 RDMA。

多主機模式走的是 RDMA。設定檔以 crates/openlake_server/configs/kv_rdma.toml 為範本,每台節點帶入自己的 self_id,README 的例子是 0、1、2 這樣遞增,並以 kv_rdma_0.toml、kv_rdma_1.toml 分別啟動。vLLM 端的 openlake_nodes 改成各節點的 10.0.0.x:9400,openlake_device 則從 local 改成 RDMA 裝置名,例如 mlx5_ib0。README 對這個模式的描述是「A prefix computed on one GPU host is served to any other from the shared pool」,也就是前綴計算一次、全池共用。

這裡有個容易被忽略的順序約束:vLLM worker 必須依照 id 順序指向叢集。順序錯了會發生什麼,README 沒有交代,這是我認為文件最薄的一塊。

從原始碼編譯出 S3 相容端點的四個步驟

第二條路徑是把 OpenLake 當成物件儲存來用。README 給的流程是四步。先裝系統依賴:build-essential、pkg-config、clang、cmake、libhwloc-dev、libudev-dev、curl、git、awscli,接著用 rustup 安裝工具鏈。再來 clone 專案並執行 cargo build --release --bin openlaked。第三步是建立資料目錄,README 的例子是 data/d0 到 data/d3 四個,然後以 crates/openlake_server/configs/storage-tcp-local.toml 啟動。

最後一步是用任何 S3 客戶端連上去。README 的示範是設定 AWS_ACCESS_KEY_ID 與 AWS_SECRET_ACCESS_KEY 為 openlakeadmin、AWS_DEFAULT_REGION 為 us-east-1,再以 --endpoint-url 指向 http://127.0.0.1:90 呼叫 aws 命令。

有兩件事要直接講清楚。第一,預設帳密 openlakeadmin 是寫在文件裡的示範值,任何非隔離環境都必須換掉,README 沒有示範如何變更。第二,資料目錄的數量與設定檔之間的對應關係,README 只給了四個目錄配一個 toml,沒有說明這個數字是否必須一致、或能否增減。這類細節在評估初期無關緊要,但要進正式環境就會變成必答題。

Rust 版本要求是 1.91 以上,寫在 rust-toolchain.toml 裡。授權是 Apache-2.0,對商業整合相對友善。

io_uring 與百萬 IOPS 的宣稱,以及它沒說的部分

README 對效能的說法是「state of the art storage engine delivering million+ iops within 1ms」,技術基礎標明是 Rust 加上 io_uring。io_uring 是 Linux 的非同步 I/O 介面,能大幅降低系統呼叫開銷,這個選型與小檔案隨機讀取的目標一致。

但這裡有個推論讀者必須自己做的判斷:io_uring 是 Linux 核心特性,這意味著 OpenLake 的部署環境基本上被鎖在 Linux,且核心版本不能太舊。README 沒有列出支援的核心版本範圍,也沒有提到 macOS 或 Windows 的支援情況。如果你們的開發機是 Mac,本地端測試的路徑會比預期曲折。

另一個沒有交代的是「million+ iops within 1ms」的測試條件。這個數字是單節點還是整個叢集?是 4K 隨機讀還是大區塊循序?佇列深度多少?README 只給了結論,沒有給條件。專案的 compare.html 頁面或許有更細的拆解,但那不在我手上這份材料裡。

還有一點值得注意:OpenLake 宣稱在 MLPerf Storage v3.0 的 2026 object checkpointing 項目領先,並被描述為領先 NVIDIA 與 Nebius。MLPerf 是有公開規則的基準,比自製圖表可信,但這則更新出自專案自己的部落格,我沒有核對官方結果表。把它當成一個值得去查證的線索,而不是結論。

什麼情況下 OpenLake 是錯的工具

最明顯的錯配是把 OpenLake 當成通用物件儲存來取代既有的 S3 部署。README 展示的 S3 相容性只涵蓋基本連線與認證,沒有提到版本控制、生命週期規則、跨區域複製、IAM 政策或事件通知。這些是企業物件儲存的日常需求,OpenLake 目前的定位是 GPU 工作負載的資料層,不是通用儲存服務。如果你的應用依賴這些功能,遷移會卡住。

第二種錯配是資料必須跨節點強一致的場景。OpenLake 的多主機模式靠 RDMA 把各節點的本地儲存串成共享池,本質上仍是分散式本地儲存。README 沒有描述一致性模型、衝突解決或節點失效時的資料歸屬。對於 checkpoint 與 KV cache 這類可重建的資料,這個模糊地帶可以接受;對於帳務或狀態機這類不可重建的資料,就不行。

第三種是資源前提不成立的環境。OpenLake 的整個賣點是把儲存放在 GPU 主機的 host RAM 與磁碟上。如果節點記憶體本來就吃緊,或者沒有本地 NVMe,這個設計就沒有立足點。雲端環境裡 GPU 執行個體的本地磁碟容量與壽命差異很大,這一點在選型時比 IOPS 數字更關鍵。

最後是成熟度。0.9.0 版在 2026 年 9 月發布,往前推到 v0.8.0 只有一個月左右。版本節奏快代表功能推進快,也代表設定檔格式與 API 有機會變動。README 提到「please start openlaked with a --config」,但沒有承諾設定檔的向後相容性。

與其他做法的實際差異

最直接的替代方案是 vLLM 內建的 KV cache 卸載機制,例如把 KV 放到 CPU 記憶體或本地磁碟。差別在於 OpenLake 把這件事做成一個可跨節點共享的池,而不是單機的權宜之計。單機模式下兩者差距有限,OpenLake 的價值要在多主機、需要把某一台算出的前綴給另一台重用時才顯現。

第二個替代是既有的分散式檔案系統或物件儲存,例如把 checkpoint 寫到遠端 S3 或掛載 NFS。這條路的優點是成熟、運維知識現成、權限模型完整。代價是延遲:每次讀取都要跨網路,而 OpenLake 的設計前提是把資料放在 GPU 主機本地。如果你的 checkpoint 頻率不高、模型不大,遠端儲存的延遲其實可以忍受,那 OpenLake 帶來的複雜度就不划算。

第三個替代是自建本地快取層,例如在推論程式裡自己接上本地 SSD 做 KV 快取。這條路完全可控,但要自己處理淘汰策略、並發、以及跨節點共享。OpenLake 的 connector 模式等於把這層工作外部化,換來的是對其設定格式與版本節奏的依賴。

選擇的關鍵不在於誰比較快,而在於你的 KV 重用是否跨節點。不跨節點,內建機制通常夠用;跨節點,才輪到 OpenLake 這類設計上場。

維護成本與授權的實際含義

從版本歷史看,v0.8.0 在 8 月中、v0.8.1 兩天後、0.9.0 在 9 月初,一個月內三個版本。這種節奏對早期採用者是雙面刃:修正來得快,但升級也頻繁。如果 OpenLake 進入正式環境,你需要預留每次升級時重新驗證設定檔與 connector 參數的人力,特別是 kv_connector_extra_config 底下的鍵。

維運面有兩個具體負擔。一是 openlaked 這個常駐程序要納入監控與重啟流程,README 沒有提供健康檢查端點或指標匯出的說明。二是資料目錄的容量管理,KV cache 與 checkpoint 都會持續成長,而 README 沒有提到淘汰或配額機制。這兩件事在試用階段可以人工處理,規模化之後會變成日常。

授權是 Apache-2.0,允許商業使用、修改與再散布,並包含專利授權條款。相對寬鬆,對閉源產品整合沒有障礙。要注意的是授權只涵蓋程式碼,README 引用的 MLPerf 成績、部落格圖表與商標不在授權範圍內。以上是一般性說明,不構成法律意見,實際條款請以 LICENSE 檔案為準。

還有一個容易被低估的成本:RDMA 路徑需要 InfiniBand 或 RoCE 環境,這在雲端不是每個執行個體類型都支援。如果你的環境沒有這個前提,能用的只有單機 local 模式,而單機模式的收益上限就是那一台主機的記憶體與磁碟。

編輯結論

如果你的團隊已經在用 vLLM 服務長上下文模型,而且節點上有閒置的 host RAM 與本地 NVMe,OpenLake 的 KV offload 路徑值得先在單機 local 模式試一輪,因為它不需要改動推論程式碼,只需換掉 kv-transfer-config 裡的 connector。反過來說,如果你的瓶頸在於跨區域資料一致性、多租戶權限或需要成熟的 S3 API 覆蓋率,這個專案目前的定位不在那裡,把它當成通用物件儲存會失望。動手前先確認三件事:openlaked 的預設設定檔在單機下的資料目錄佈局、openlake_device 設為 local 與設為 RDMA 裝置時的網路前提、以及 vLLM 版本與 openlake-vllm 套件的相容區間。這三項在 README 裡都只給了片段,需要你實際跑一次 openlaked 加一次 vllm serve 才能定案。

官方來源

  1. License: Apache-2.0
  2. openlake-project/openlake on GitHub
  3. Project website
  4. README
  5. Releases
社群筆記

社群筆記