
DeepSeek R1 × 飞书多维表格赋能教育领域
DeepSeek开源周的最后一天,迎来的是支撑其V3/R1模型全生命周期数据访问需求的核心基础设施 — Fire-Flyer File System(3FS) 和构建于其上的Smallpond数据处理框架。
3FS:https://github.com/deepseek-ai/3FS
3FS是一种充分利用现代SSD和RDMA网络全带宽的并行文件系统,在180节点集群上实现了6.6 TiB/s的聚合读取吞吐量,在25节点集群的GraySort基准测试中达到3.66 TiB/分钟的吞吐量,并且在KVCache查找中每个客户端节点可达40+ GiB/s的峰值吞吐量。
Smallpond:https://github.com/deepseek-ai/smallpond
Smallpond则是建立在3FS之上的轻量级数据处理框架,具有高性能、可扩展性和易用性特点。
Fire-Flyer文件系统(3FS)专为解决AI训练和推理工作负载的挑战而设计,具有以下关键特性:
性能与可用性
多样化工作负载支持
在一个由180个存储节点组成的大型3FS集群上,每个节点配备2×200Gbps InfiniBand网卡和16个14TiB NVMe SSD,使用约500+客户端节点进行读取压力测试(每个客户端有1x200Gbps InfiniBand网卡),最终聚合读取吞吐量达到约6.6 TiB/s,并且这一性能在有训练作业的背景流量下仍然保持稳定。
DeepSeek使用基于3FS的Smallpond进行GraySort基准测试,这是衡量大规模数据排序性能的标准测试。其实现采用两阶段方法:
测试集群由25个存储节点(每节点2个NUMA域/节点,每NUMA 1个存储服务,2×400Gbps网卡)和50个计算节点(每节点2个NUMA域,192个物理核心,2.2 TiB RAM,1×200Gbps网卡)组成。对110.5 TiB数据进行8,192个分区的排序在30分14秒内完成,平均吞吐量达到3.66 TiB/分钟。
KVCache是优化LLM推理过程的技术,通过缓存解码器层中之前token的键值向量避免重复计算。3FS的KVCache实现提供了显著的性能优势:
# 从GitHub克隆3FS仓库
git clone https://github.com/deepseek-ai/3fs
# 初始化子模块
cd 3fs
git submodule update --init --recursive
./patches/apply.sh
# 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
# 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或更新版本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是一个构建在DuckDB和3FS之上的轻量级数据处理框架,具有以下特点:
Smallpond支持Python 3.8到3.12:
pip install smallpond
首先下载示例数据:
# 下载示例数据
wget https://duckdb.org/data/prices.parquet
然后可以使用以下Python代码处理数据:
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())
Smallpond已在GraySort基准测试中进行了评估,在由50个计算节点和25个存储节点组成的3FS集群上,成功在30分14秒内对110.5TiB数据进行排序,平均吞吐量达3.66TiB/分钟。