Skip to content

Latest commit

 

History

History
282 lines (212 loc) · 12.3 KB

File metadata and controls

282 lines (212 loc) · 12.3 KB
DLSlime logo

文档 | 路线图 | Slack | 微信群 | 知乎 | English | 中文

面向 AI 服务的可组合、可嵌入通信运行时

DLSlime 是一个以 PeerAgent 为中心的分布式 AI 通信与微服务工具包。 PeerAgent 是运行时枢纽:SlimeRPC、DLSlimeCache 等应用服务构建在 PeerAgent 之上;NanoCtrl 围绕 PeerAgent 提供服务治理和协调元数据; 下层 endpoint API 则驱动 RDMA、NVLink、Ascend Direct 等异构传输。

DLSlime 支持按层接入:应用可以从直接使用 endpoint 开始,也可以加入 PeerAgent 协调、使用 NanoCtrl 做服务治理,或在其上构建 SlimeRPC 和 DLSlimeCache 这样的服务化组件。这些能力同时以 Python/C++ API、本地服务和 HTTP 控制面契约暴露,因此 DLSlime 可以嵌入已有的服务框架、推理系统、缓存 系统或 RL 系统,而不要求替换整套运行栈。

新闻动态

2025
  • [2025/12] DLSlime 亮相全球 C++ 及系统软件技术大会,分享“兼顾灵活性和高效性的异构传输库的设计与实现”。查看会议页面
  • [2025/09] DLSlime 以“面向高效异构训推的统一通信库 DeepLink DLSlime”开源发布。阅读微信文章
  • [2025/07] DLSlime 支持上海 AI 实验室发布的 DeepLink 超大规模跨域混训技术方案,包括“3D 并行 + PS”架构及千公里级跨域异构混训落地。查看上海 AI 实验室新闻
  • [2025/06] DLSlime 为 LMDeploy 提供 DeepSeek-V3 PD 分离支持。。

PeerAgent 中心架构

DLSlime 围绕 PeerAgent 组织。应用服务挂载到 PeerAgent 上,NanoCtrl 提供服务治理和协调元数据,endpoint API 驱动底层传输引擎和设备。下图展示 这些层级关系,同时避免应用逻辑绑定到单一传输或拓扑。

DLSlime PeerAgent-centered architecture

各层如何协同

  1. 服务启动后以通用 entity 的形式注册到 NanoCtrl,例如 kind=cachekind=rpc-worker
  2. 每个服务挂载到 PeerAgent 上,而不是自己直接管理 transport state。
  3. PeerAgent 将 resource record 和 memory region 注册到 NanoCtrl。
  4. 客户端按 kind 和 scope 发现服务,并通过服务对应的 PeerAgent 访问它。
  5. PeerAgent 通过 NanoCtrl/Redis 交换连接意图和内存区元数据。
  6. Endpoint 对象通过 RDMA、NVLink、Ascend Direct 或所选 backend 发起实际传输。

使用场景

直接使用 Endpoint

当应用已经自行控制 peer placement、metadata exchange 和 memory lifetime 时, 可以直接使用 Endpoint API。这是 DLSlime 中最低层的使用方式:它绕过 NanoCtrl 和 PeerAgent,将应用传输逻辑直接映射到 endpoint-to-endpoint 数据移动。

Direct endpoint-to-endpoint access

典型例子包括两进程 RDMA read/write 测试、NVLink 传输检查,以及需要显式控制 初始化过程的 backend bring-up。

示例:p2p_rdma_rc_read.py, p2p_rdma_rc_write.py, p2p_nvlink.pyp2p_ascend_read.py

python dlslime/examples/python/p2p_rdma_rc_read.py
python dlslime/examples/python/p2p_rdma_rc_write.py
python dlslime/examples/python/p2p_rdma_rc_write_with_imm_data.py
python dlslime/examples/python/p2p_rdma_rc_send_recv_gdr.py
torchrun --nproc_per_node=2 dlslime/examples/python/p2p_nvlink.py
python dlslime/examples/python/p2p_ascend_read.py

Ascend Direct 设置见 docs/huawei_ascend/README.md

PeerAgent-to-PeerAgent 访问

当应用希望做点对点数据移动,但不想自己管理连接建立、内存区发现和过期状态 清理时,可以使用 PeerAgent。每个进程拥有一个 PeerAgent,通过 NanoCtrl 注册 资源,然后使用 PeerAgent facade 读写远端内存。

这条路径和直接使用 Endpoint 复用同一套数据面,但将协调工作交给 NanoCtrl 和 PeerAgent。它适合多进程服务、动态 peer 发现,以及 SlimeRPC、DLSlimeCache 这类更高层组件。

PeerAgent-to-PeerAgent access

示例: p2p_rdma_rc_read_ctrl_plane.pyp2p_rdma_multi_agents_ctrl_plane.py

nanoctrl start
python dlslime/examples/python/p2p_rdma_rc_read_ctrl_plane.py

DLSlimeCache 服务

当多个 PeerAgent client 需要共享一个 RDMA-backed cache service 时,可以使用 DLSlimeCache。PeerAgent A 和 PeerAgent B 通过 NanoCtrl 发现 Cache Service, 从服务获取 cache assignment metadata,然后通过同一套 PeerAgent 和 endpoint 数据面读写 cache slabs。

在这条路径中,NanoCtrl 让 Cache Service 作为已注册服务可被发现;Cache Service 拥有 cache memory region 和 assignment manifests;PeerAgent client 负责数据移动,而应用进程不需要内嵌 cache placement 逻辑。

DLSlimeCache service access

示例:cache_client_example.pydlslime-cache design

nanoctrl start
dlslime-cache start --ctrl http://127.0.0.1:4479 \
  --host 127.0.0.1 --port 8765 --memory-size 1G

python dlslime/examples/python/cache_client_example.py --url http://127.0.0.1:8765

dlslime-cache stop

SlimeRPC 服务

当应用逻辑需要调用 Python service,同时希望将传输和 peer 协调留在 DLSlime 内部时,可以使用 SlimeRPC。客户端进程在自己的 PeerAgent 之上使用 SlimeRPC proxy,服务进程在自己的 PeerAgent 之上通过 SlimeRPC server 暴露 Python methods,NanoCtrl 负责让 RPC service 可被发现。

RPC request 和 response 由 PeerAgent transport 承载,而不是走 control plane。 这样 service invocation 保持在应用层,同时复用下层 PeerAgent、endpoint 和 mailbox 数据路径。

SlimeRPC service access

示例:rpc_example.pyrpc_flatbuf_example.py

nanoctrl start
python dlslime/examples/python/rpc_example.py --ctrl http://127.0.0.1:4479

PD 分离推理服务

当 prefill 和 decode 作为独立服务角色运行时,可以用 DLSlime 支持 PD 分离 推理。它遵循 LMDeploy DistServe 的模式:proxy 将请求路由到专门的 Prefill 和 Decode workers,Prefill 计算 prompt KV cache,Decode 生成 token,KV cache 迁移/数据面 backend 在两类角色之间传输 KV cache。

在 DLSlime 中,每个 Prefill 或 Decode worker 都可以建模为一个拥有自己 PeerAgent 的服务。NanoCtrl 按 kind 发现 worker 角色,保存 PeerAgent 的 resource 和 memory metadata,并让 serving proxy 或 worker 建立所需的 prefill-to-decode 连接。KV cache 传输使用 PeerAgent 和 endpoint 数据面, 不经过 control plane。

Disaggregated inference service

LMDeploy 参考: DistServe with DLSlimeBackendDistServe with MooncakeBackend.

RL 服务

Coming soon.

安装

PyPI 安装

pip install dlslime dlslime-ctrl

PyPI 包使用默认 CMake flags 构建。需要可选传输后端或本地 C++ 改动时,建议 从源码构建。

源码构建

git clone https://github.com/deeplink-org/DLSlime.git
cd DLSlime
pip install -v --no-build-isolation -e dlslime
pip install -e dlslime-ctrl                 # 可选:Rust 控制面

通过环境变量传递 CMake flags:

BUILD_NVLINK=ON BUILD_TORCH_PLUGIN=ON \
  pip install -v --no-build-isolation -e dlslime

仅构建 C++:

cmake -S dlslime -B build -GNinja -DBUILD_PYTHON=OFF -DBUILD_RDMA=ON
cmake --build build

构建选项

Flag 默认值 说明
BUILD_RDMA ON 构建 RDMA 传输引擎
BUILD_PYTHON CMake 中为 OFFpyproject.toml 中为 ON 构建 Python bindings
BUILD_NVLINK OFF 构建 NVLink 传输引擎
BUILD_ASCEND_DIRECT OFF 构建 Ascend Direct 传输
BUILD_TORCH_PLUGIN OFF 构建 DLSlime torch backend
BUILD_BENCH OFF 构建 C++ 传输引擎 benchmark
BUILD_TEST OFF 构建 C++ 测试
USE_MACA OFF 为 torch backend 构建启用 Metax 平台支持

Benchmark

Benchmark 命令和历史性能表格已经移动到独立目录:

常用入口:

# 两节点聚合 RDMA 传输 benchmark
torchrun --master-addr <addr> --master-port 6006 \
  --nnodes 2 --nproc-per-node 8 --node-rank <rank> \
  dlslime/bench/python/agg_transfer_bench_spmd.py \
  --qp-num 8 --transfer-engine dlslime \
  --batch-size 64 --num-iteration 100 --num-concurrency 8

# SlimeRPC vs Ray 本地 benchmark
bash dlslime/bench/python/run_rpc_bench.sh

仓库结构

dlslime/         核心 Python package、C++ bindings 和运行时 primitives
  ├── dlslime/   Python 源码
  ├── examples/  Endpoint、PeerAgent、cache、RPC 示例
  ├── bench/     Benchmark 脚本和 benchmark README
  └── tests/     Python 和 C++ 测试
dlslime-ctrl/    Rust 控制面(服务注册、可观测性)
docker/          dlslime-ctrl 的 Docker Compose 部署
docs/            设计文档、路线图和平台说明
scripts/         仓库级自动化(release.sh 等)

文档

License

See LICENSE.