DeepSeek第五天開源猛料,3FS并行文件系統榨干SSD!6.6 TiB/s吞吐量堪比光速
最后一天,DeepSeek開源了全生命周期數據訪問引擎Fire-Flyer File System(3FS),以及基于3FS的數據處理框架Smallpond。
3FS(螢火蟲文件系統)是一個充分利用現代SSD和RDMA網絡帶寬的并行文件系統,其特點是:
- 在180節點集群中實現了6.6 TiB/s的總讀取吞吐量
- 在25節點集群的GraySort基準測試中達到了3.66 TiB/min 的吞吐量
- 每個客戶端節點的KVCache查詢峰值吞吐量超過40+ GiB/s
- 采用分離式架構,確保了強一致性
- 全面支持V3/R1的訓練數據預處理、數據集加載、檢查點保存/重載、嵌入向量搜索和KVCache查詢推理
Smallpond是輕量級的數據處理框架,其特點是:
- 基于DuckDB的高性能數據處理
- 可擴展性,能夠處理PB級別數據集
- 無需持續運行的服務,操作簡便
3FS和Smallpond兩大開源項目,正在為AI數據處理設立新的標準——超快的處理速度和無縫集成。
讓許多人驚嘆不已的是,DeepSeek竟自己編寫了分布式文件系統。
它的成功背后強大得理念,便是將小事做到極致。這種精神,體現了車庫黑客的精髓。
3FS文件系統
The Fire-Flyer File System(3FS)專為應對人工智能訓練和推理任務挑戰而設計的高性能分布式文件系統。
項目鏈接:https://github.com/deepseek-ai/3FS
它采用現代固態硬盤(SSD)和遠程直接內存訪問(RDMA)網絡技術,構建了共享存儲層,極大簡化了分布式應用的開發過程。
核心優勢
- 性能與易用性
- 分布式架構:該系統整合了數千個SSD的高吞吐量和數百個存儲節點的網絡帶寬,使得應用程序能夠無視位置差異,高效訪問存儲資源。
- 強一致性保證:通過采用鏈式復制與分配查詢(CRAQ)技術,確保了數據的一致性,使得應用程序代碼更加簡潔易懂。
- 標準文件接口:系統提供了基于事務性鍵值存儲(如FoundationDB)的無狀態元數據服務,使用的文件接口通用且易于上手,無需學習新的存儲API。
- 多樣化工作負載支持
- 數據準備:系統有效地將數據分析管道的輸出組織成分層目錄結構,并高效管理大量的中間數據。
- 數據加載優化:通過支持計算節點間對訓練樣本的隨機訪問,無需進行數據預取或洗牌操作,提升了數據處理效率。
- 高效檢查點支持:為大規模訓練任務提供高吞吐量的并行檢查點功能。
- KVCache推理加速:提供了一種成本效益高的DRAM緩存替代方案,具有高吞吐量和更大的存儲容量,適用于推理任務。
性能
1. 最大吞吐量
下圖展示了一個大型3FS集群在執行讀壓力測試時的吞吐量表現。
該集群包含180個存儲節點,每個節點均配置有2張200Gbps的IB網卡和16塊14TiB的NVMe固態硬盤。
測試中使用了約500個客戶端節點,每個節點配備1張200Gbps的IB網卡。
在存在訓練任務背景流量的情況下,集群的總讀取吞吐量達到了約6.6TiB/s。
2. GraySort
采用GraySort基準測試,評估smallpond在處理大規模數據集時的排序能力。
實現采用了兩階段的處理方法:(1) 首先通過鍵的前綴位進行數據重排來分區數據,(2) 然后在各個分區內部進行排序。這兩個階段的數據讀寫都依賴于3FS。
測試所用的集群包括25個存儲節點(每個節點有2個NUMA域,每個NUMA域運行1個存儲服務,每個節點配備2×400Gbps網卡)和50個計算節點(每個節點有2個NUMA域,192個物理核心,2.2 TiB內存,每個節點配備1×200 Gbps網卡)。
在8,192個分區中排序110.5 TiB的數據,整個過程耗時30分鐘14秒,平均吞吐量達到3.66TiB/min。
3. KVCache
KVCache是一種用于提升大型語言模型(LLM)推理效率的技術。
它通過緩存解碼器層中先前token的鍵和值向量,避免了重復的計算過程。
頂部圖表展示了所有KVCache客戶端的讀取吞吐量,其中既包括了峰值也包括了平均值,峰值吞吐量可達40GiB/s。
底部圖表則展示了在同一時間段內,垃圾收集(GC)過程中操作次數的變化情況。
設計與實現
3FS系統由四個主要部分組成:集群管理器、元數據服務、存儲服務和客戶端。這些組件通過RDMA網絡(InfiniBand或RoCE)相互連接。
元數據和存儲服務定期向集群管理器發送心跳信號,以報告其狀態。集群管理器負責處理集群成員的變更,并將集群的配置信息分發到其他服務和客戶端。
系統中部署了多個集群管理器,其中一個被選為主管理器。當主管理器發生故障時,另一個管理器會被提升為主管理器。
集群配置信息通常存儲在一個可靠的分布式協調服務中,例如ZooKeeper或etcd。在生產環境中,為了減少依賴性,我們使用與文件元數據相同的鍵值存儲來保存集群配置。
文件元數據操作(如打開或創建文件/目錄)被發送到元數據服務,由其實現文件系統的語義。由于文件元數據是存儲在一個事務性鍵值存儲(例如FoundationDB)中的,因此元數據服務是無狀態的,客戶端可以連接到任何元數據服務。
每個存儲服務管理一些本地SSD,并提供一個塊存儲接口。
為了確保強一致性,存儲服務實現了鏈式復制與分配查詢(CRAQ)機制。CRAQ的寫入全部讀取任意的方法有助于充分利用SSD和RDMA網絡的高吞吐量。在3FS中,一個文件被分割成相等大小的數據塊,并在多個SSD上復制。
使用
使用以下命令從GitHub克隆3FS倉庫到本地文件系統:
git clone https://github.com/deepseek-ai/3fs
cd 3fs
git submodule update --init --recursive
./patches/apply.sh
# for Ubuntu 20.04.
apt install cmake libuv1-dev liblz4-dev liblzma-dev libdouble-conversion-dev libprocps-dev libdwarf-dev libunwind-dev \
libaio-dev libgflags-dev libgoogle-glog-dev libgtest-dev libgmock-dev clang-format-14 clang-14 clang-tidy-14 lld-14 \
libgoogle-perftools-dev google-perftools libssl-dev ccache libclang-rt-14-dev gcc-10 g++-10 libboost1.71-all-dev
# for Ubuntu 22.04.
apt install cmake libuv1-dev liblz4-dev liblzma-dev libdouble-conversion-dev libprocps-dev libdwarf-dev libunwind-dev \
libaio-dev libgflags-dev libgoogle-glog-dev libgtest-dev libgmock-dev clang-format-14 clang-14 clang-tidy-14 lld-14 \
libgoogle-perftools-dev google-perftools libssl-dev ccache gcc-12 g++-12 libboost-all-dev
確保安裝了libfuse 3.16.1或更新版本,FoundationDB 7.1或更新版本,以及Rust工具鏈。
在構建目錄中構建3FS:
cmake -S . -B build -DCMAKE_CXX_COMPILER=clang++-14 -DCMAKE_C_COMPILER=clang-14 -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_EXPORT_COMPILE_COMMANDS=ON
cmake --build build -j 32
Smallpond:基于3FS的數據處理框架
項目鏈接:https://github.com/deepseek-ai/smallpond
快速入門
目前smallpond支持從3.8到3.12的Python版本。
pip install smallpond
使用下列命令獲取示例數據:
# Download example data
wget https://duckdb.org/data/prices.parquet
輕松上手:
import smallpond
sp = smallpond.init()
#加載數據
df = sp.read_parquet("prices.parquet")
#數據處理
df = df.repartition(3, hash_by="ticker")
df = sp.partial_sql("SELECT ticker, min(price), max(price) FROM {0} GROUP BY ticker", df)
#保存結果
df.write_parquet("output/")
#顯示結果
print(df.to_pandas())
文檔
mallpond同時提供了高級和低級API。
注意:目前,smallpond提供了兩種不同的API,分別用于數據流圖的動態和靜態構建。由于歷史原因,這兩種API使用了不同的調度器后端,并支持不同的配置選項。
- 高級API:目前使用Ray框架作為后端,支持數據流圖的動態構建和執行。
- 低級API:使用內置調度器,僅支持靜態數據流圖的一次性執行。然而,它提供了更多的性能優化和更豐富的配置選項。正在努力將這兩種API合并,以便在未來,可以使用統一的高級API,并在Ray框架和內置調度器之間自由選擇。
下列鏈接提供入門教程、API參考、性能評估等更多內容。
鏈接:https://github.com/deepseek-ai/smallpond/blob/main/docs/source/api.rst
開發
pip install .[dev]
# run unit tests,單元測試
pytest -v tests/test*.py
# build documentation,構建文檔
pip install .[docs]
cd docs
make html
python -m http.server --directory build/html
性能
采用GraySort基準測試腳本,在一個由50個計算節點和25個運行3FS的存儲節點組成的集群上,對smallpond進行了評估。
該基準測試在短短30分鐘14秒內完成了對110.5TiB數據的排序,平均吞吐量達到了3.66 TiB/min。
pip install .[dev]
# run unit tests
pytest -v tests/test*.py
# build documentation
pip install .[docs]
cd docs
make html
python -m http.server --directory build/html
連更五天,最新匯總
DeepSeek開源周,這么快就過去了。連更5天,次次都是小驚喜。
接下來,我們匯總了過去四天所有的開源項目,參見:
第一天:為英偉達Hopper GPU打造的高效MLA解碼內核FlashMLA,5天項目GitHub星標唯一過10k的。
第二天:支持MoE訓推的EP通信庫DeepEP,GitHub斬獲6.4k星。
第三天:支持稠密和MoE模型的FP8 GEMM計算庫DeepGEMM,GitHub已達4.2k星。
??第四天:優化并行策略——DualPipe、EPLB、V3/R1模型中的計算與通信重疊機制??。
本文轉自 新智元 ,作者:新智元
