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