memfabric-hybrid:基于昇腾生态的内存池化软件项目

内存池化基础软件, 基于超节点总线、服务器网络实现DRAM与显存混合池化,提供极简的内存访问接口和高性能的内存直接访问能力,支撑多种场景下的数据共享与传输

分支8Tags17
文件最后提交记录最后更新时间
2 个月前
2 个月前
2 个月前
3 个月前
1 个月前
3 个月前
1 个月前
1 个月前
1 个月前
1 个月前
1 个月前
1 个月前
1 个月前
1 个月前
1 个月前
3 个月前
3 个月前
1 个月前
8 个月前
2 个月前
1 个月前
4 个月前
1 个月前
2 个月前
3 个月前
1 个月前
2 个月前
3 个月前


DRAM&HBM hybrid pooling, memory semantic interface, high-performance cross-machine memory direct access

Docs PyPI PyPI - Python Version PyPI - Downloads GitCode commit activity license


🔄Latest News

  • [2026/01] DRAM池化相关配套已发布支持,详见软件硬件配套

  • [2025/12] MemFabric + MemCache已作为vllm-ascend backend使能大模型推理加速,详情查看vllm-ascend开源社区,使用示例

  • [2025/11] MemFabric项目于2025年11月开源,在昇腾上提供高效的多链路的D2RH,RH2D,RH2H,D2D,D2H,H2D等内存直接访问能力。

🔜 Roadmap

MemFabric roadmap和版本分支策略详见:Roadmap

🎉概述

MemFabric是一款开源内存池化软件,面向昇腾超节点和服务器等,其设计目的与核心思想是:

  • 异构设备的统一池化: 将多节点的异构设备内存(DRAM|HBM等)池化, 提供高性能的全局内存"直接访问"的能力
  • 简单的北向接口: 提供内存语义访问接口, 即xcopy with global virtual address, 向传统的memcpy概念靠近, 支持D2RH\RH2D\RH2H\D2D等
  • 南向高可扩展: 通过插件的方式支持多种DMA引擎和LD/ST及多种网络/灵衢互联(Device UB、Device RoCE、Host UB、Host RoCE等)

architecture

如上图所示, MemFabric主要分为四大模块: Global Memory Management、Data Operation、Transport Management、API

  • Global Memory Management: 实现全局统一内存地址(Global Virtual Address, GVA)的统一编排、页表映射策略制定及通过驱动将映射策略注入页表
  • Data Operation: xcopy的实现,驱动xDMA、LD/ST实现全局内存直接读写
  • Transport Management: 链接管理; xcopy驱动Host RDMA、Device RDMA、UDMA时,需要建立QP、Jetty链接,xcopy使用SDMA、MTE、LD/ST时不需要Transport Management
  • API: 统一且简单的API及其实现, 包括BM API、SHM API、Trans API,三种API适用于不同的场景

其中, Global Memory Management、Data Operation、Transport Management都实现了逻辑的抽象, 可以轻松扩展实现不同硬件的对接。当前已支持的南向包括:

  • 昇腾A3超节点: DRAM+HBM pooling over Device UB 1.0, DRAM pooling over Host RoCE
  • 昇腾A2服务器: DRAM+HBM pooling over Device RoCE, DRAM pooling over Host RoCE
  • 鲲鹏服务器: DRAM pooling over Host RoCE
  • 鲲鹏超节点: DRAM pooling over Host UB

MemFabric以动态库的形式支持应用快速,简便的集成,支撑大模型KV缓存、生成式推荐缓存、强化训练参数Reshard、模型参数缓存、PD传输等多种业务场景。

🧩核心特性

  • 池化与全局统一编址

MemFabric通过构建逻辑上的全局内存语义统一编址,对分布在不同层级、不同节点的内存单元进行统一管理与使用,使系统能够像管理单一物理资源一样,对跨CPU、NPU的内存资源进行统一寻址和透明访问,核心目的是实现内存资源的整合与统一调度,最大程度的释放硬件性能。 GVA的特点:

  • 它是一个简单的uint64
  • 所有进程的GVA的起始地址一致
  • 所有进程的GVA按线性排布且一致

unified_global_address

  • 跨机跨介质直接访问

    基于MemFabric内存语义统一编址,数据可以在跨节点的多级存储间实现透明、直接访问。

    典型跨节点跨介质的访问路径有:

    • D2RH:本机HBM到跨机DRAM
    • RH2D:跨机DRAM到本机HBM
    • RH2H:跨机DRAM到本机DRAM

    Note: D为Device, RH为Remote Host

MemFabric跨机访问数据流和控制流如下图所示(昇腾A3超节点):

one_copy

当前MemFabric池化的硬件支持情况如下:

  • 昇腾A3超节点:Device UB 1.0,Host rdma
  • 昇腾A2服务器:Device rdma,Host rdma
  • 鲲鹏服务器: Host rdma
池化类型 访问方向 host rdma device rdma Device UB 1.0
DRAM POOL LD2GH ✅ ✅ ✅
DRAM POOL GH2LD ✅ ✅ ✅
DRAM POOL LH2GH ✅ ✅ ✅
DRAM POOL GH2LH ✅ ✅ ✅
HBM POOL GD2LH ❌ ✅ ✅
HBM POOL LH2GD ❌ ✅ ✅
HBM POOL GD2LD ❌ ✅ ✅
HBM POOL LD2GD ❌ ✅ ✅
HBM + DRAM POOL GH2GD ❌ ✅ ✅
HBM + DRAM POOL GD2GH ❌ ✅ ✅
HBM + DRAM POOL GH2GH ❌ ✅ ✅
HBM + DRAM POOL GD2GD ❌ ✅ ✅

说明

  • L为Local,D为Device,G为Global,H为Host
  • GH:代表一块DRAM内存,其属于DRAM内存池空间,可能在本地,也可能在远端其他节点
  • GD:代表一块HBM显存,其属于HBM内存池空间,可能在本地,可能在远端其他节点
  • LH:代表一块DRAM内存,其不属于任何内存池空间,其位置在当前进程
  • LD:代表一块HBM显存,其不属于任何内存池空间,其位置在当前进程

🔥性能表现

时延测试

  • 使用2个昇腾A3节点组成双机内存池,将MemFabric对接到MoonCake Transfer Engine(MoonCake是业界开源的一款的分布式缓存软件, memfabric对接mooncake代码)进行读写时延测试,模拟构造DeepSeek-R1模型KV大小的block size,即:61x128K + 61x16K = 8784KB ≈ 8.57MB,共122个离散地址,性能表现如下:

a3-Latency-performance

带宽测试(单DIE+单CPU)

  • 在昇腾A3超节点跨机数据访问性能(DRAM and HBM pooling over UB 1.0)如下:
数据传输方向 单次数据大小(GB) 带宽(GB/s)
RH2D 1 110.23
RH2D 2 110.19
D2RH 1 74.54
D2RH 2 74.54
RD2D 1 166.47
RD2D 2 166.47
D2RD 1 138.01
D2RD 2 138.01

说明

和昇腾官方带宽测试工具ascend-dmi一样,A3超节点测试采用的通信带宽的统计方式,1 GB/s = 1000 * 1000 * 1000 B/s。

  • 在昇腾A2服务器跨机数据访问性能(DRAM and HBM pooling over Device RoCE)如下:

A2-Bandwidth-performance

👆 性能测试参考 benchmark

🔍目录结构

├── LICENSE                    # LICENSE
├── .clang-format              # 格式化配置
├── .gitmodules                # 三方库git配置
├── .gitignore                 # git忽视文件
├── CMakeLists.txt             # 项目的CMakeList
├── doc                        # 文档目录
├── examples                   # 样例
│  ├── memory_pool             # 内存池化样例(含基础/扩展/优化/特性/可观测性)
│  ├── transfer                # 传输样例(含batch data write/read)
│  └── hbm_share_memory        # HBM共享内存样例(AllReduce/ShiftPutGet/RDMADemo)
├── script                     # 构建脚本
│  ├── build_and_pack_run.sh   # 编译+打包脚本
│  ├── build.sh                # 编译脚本
│  ├── run_ut.sh               # 编译+运行ut脚本(详见 [script/run_ut.md](script/run_ut.md))
├── test                       # test目录
│  ├── 3rdparty                # 三方库
│  ├── certs                   # 证书生成脚本
│  ├── python                  # python测试用例
│  └── ut                      # 单元测试用例
├── src                        # 源码
│  ├── acc_links               # 内部通信层 (用于进程间控制命令的通信, 基于Host TCP实现)
│  └── hybm                    # 内存管理与内存访问层 (Global Memory Management、Data Operation、Transport Management)
│  └── smem                    # 语义与接口层 (big memory + transfer + share memory等语义与接口实现)
│  └── util                    # 公共函数
├── README.md

🚀快速入门

请访问以下文档获取简易教程。

  • 编译安装:介绍组件编译和安装教程。

  • DevContainer 快速入门:VS Code Remote + DevContainer 一键环境搭建 + 全量用例运行指南。

  • 样例执行:介绍如何端到端执行样例代码,包括C++和Python样例。

📑学习教程

  • API介绍:MemFabric提供的多种API的简介

  • C接口:C接口介绍以及C接口对应的API列表

  • python接口:python接口介绍以及python接口对应的API列表

  • ptracer:MemFabric内置性能打点工具简介

📦软件硬件配套说明

  • 硬件型号支持

    • Atlas 200T A2 Box16
    • Atlas 800I A2/A3 系列产品
    • Atlas 800T A2/A3 系列产品
    • Atlas 900 A3 SuperPoD
  • 平台:aarch64/x86

  • 配套软件:CANN 8.1.RC1及之后版本

  • cmake >= 3.19

  • GLIBC >= 2.28

  • Ascend HDK配套驱动(npu-driver)、固件(npu-firmware)依赖(使用不同介质所需最低版本不同):

    特性 HDK最低版本需求 HDK推荐版本
    HBM池化 24.1.RC2 24.1.RC2
    DRAM池化 25.5.0 25.5.1
  • LingQu Computing Network: 1.5.0版本,A3 DRAM池化需要配套升级1520 L1,升级指导书如下:

📌FAQ

常见问题请参考:FAQ

📝相关信息

说明

此开源项目非华为产品,仅提供有限支持。

项目介绍

内存池化基础软件, 基于超节点总线、服务器网络实现DRAM与显存混合池化,提供极简的内存访问接口和高性能的内存直接访问能力,支撑多种场景下的数据共享与传输

https://gitcode.com/Ascend/memfabric_hybrid定制我的领域