Pull Request已成功合入, 合并人@chenxin
(感谢 wlwen 的贡献)变更摘要
本次 PR 新增了 acc_offload 模块,用于支持 DSA KV offload 场景下的稀疏批量 H2D/D2H 拷贝算子。该模块基于 hybm 提供池化能力完成 host 内存向 device 内存的注册,算子侧基于 MTE(Multi-Task Engine)分核完成批量拷贝,并通过 pybind11 暴露 Python 接口集成到 memfabric_hybrid 包中,同时支持图模式。
主要改动
-
新增
acc_offload核心模块与公共 API:在src/acc_offload/下新增完整的 C++ 实现,包括入口acc_offload.cpp(提供offload_init、offload_uninit、offload_malloc、offload_free、offload_sparse_copy五个 C 接口)、单例类AccOffloadLocalDramEntry管理 hybm 大页内存的创建/销毁与稀疏拷贝调度,以及公共头文件acc_offload.h定义offload_config_t结构体与所有 API 原型。 -
新增内存池管理器
AccOffloadMemManager:在src/acc_offload/csrc/allocator/acc_offload_mem_manager.h中实现基于std::map和std::set的大小优先伙伴分配器,支持 16 字节对齐的连续内存分配与释放,可自动合并相邻空闲块。 -
新增 AscendC 稀疏拷贝算子:
OffloadSparseCopyKernel(acc_offload_sparse_copy.h)基于 AscendC 框架实现,按 key/value 将拷贝任务均匀分配到所有 AI Vector Core,通过DataCopyPad以 176KB 为粒度完成 GM-to-GM 传输;实际编译在安装时(install.sh)通过 bisheng 编译器完成,运行时通过dlopen动态加载libmf_hybm_accoffload.so。 -
新增 Python 封装与集成:
pymf_acc_offload.cpp通过 pybind11 将 C API 绑定为offload子模块;mf_acc_offload.py提供empty()(从 offload 内存池分配张量)和sparse_copy()(封装稀疏拷贝调用);__init__.py中预加载libmf_acc_offload.so并将offload模块暴露给用户。 -
构建与打包体系适配:
build.sh、make_run.sh、install.sh、setup.py以及多处BUILD.bazel文件均相应更新,新增libmf_acc_offload.so和_pymf_acc_offload.so的编译、复制与打包逻辑,并为acc_offload模块开放acc_tcp_net_static、hybmm_static、config_store_object等依赖的可见性。


代码审查
All 35 files have been reviewed. Here is the closing summary:
审查总结
本次审查覆盖了全部 35 个变更文件,共发现 7 个问题:
| 优先级 | 数量 | 简述 |
|---|---|---|
| P1 | 1 | AccOffloadSparseCopy 中函数指针 pAccOffloadSparseCopy 无锁读取,与 CleanupLibrary 存在竞态条件,可能导致空指针调用崩溃 |
| P2 | 3 | 调试日志 dst 字段误打印 srcPtrs;deviceId 从 uint16_t 窄化为 uint8_t 高位丢失;AscendC kernel 中 aivNum_ 为零时除零未定义行为 |
| P3 | 3 | oriSize 为奇数时最后一条记录静默丢弃;函数名 UnInitalize 拼写错误(缺少 'i');install.sh 中 cp 目标路径多余双斜杠 |
整体风险判断:中等风险。P1 的竞态条件在多线程环境(如 Python 多进程/多线程同时调用 uninit 和 sparse_copy)下可能触发崩溃,建议优先修复。P2 中的 deviceId 窄化在高设备 ID 场景下会导致数据写入错误设备,也值得关注。其余 P2/P3 问题影响范围有限或触发概率较低。
已审查且无问题的文件(31 个):CMakeLists.txt、doc/API.md、doc/feature.md、doc/pythonAPI.md、examples/kv_offload/local_dram_offload/README.md、examples/kv_offload/local_dram_offload/local_dram_offload.py、script/build.sh、script/run_pkg_maker/make_run.sh、src/BUILD.bazel、src/CMakeLists.txt、src/acc_links/csrc/BUILD.bazel、src/acc_offload/csrc/BUILD.bazel、src/acc_offload/csrc/CMakeLists.txt、src/acc_offload/csrc/acc_offload.cpp、src/acc_offload/csrc/allocator/acc_offload_mem_manager.h、src/acc_offload/csrc/common/acc_offload_define.h、src/acc_offload/csrc/common/acc_offload_logger.h、src/acc_offload/csrc/launch/acc_offload_launch.cpp、src/acc_offload/csrc/launch/acc_offload_operators_launch.cpp、src/acc_offload/csrc/operators/acc_offload_operators.h、src/acc_offload/csrc/operators/acc_offload_sparse_copy.cpp、src/acc_offload/csrc/python_wrapper/BUILD.bazel、src/acc_offload/csrc/python_wrapper/CMakeLists.txt、src/acc_offload/csrc/python_wrapper/pymf_acc_offload.cpp、src/hybm/csrc/BUILD.bazel、src/smem/csrc/config_store/BUILD.bazel、src/smem/python/memfabric_hybrid/memfabric_hybrid/__init__.py、src/smem/python/memfabric_hybrid/memfabric_hybrid/mf_acc_offload.py、src/smem/python/memfabric_hybrid/setup.py。
| 类型 | 数量 |
|---|---|
| 🔴 阻塞 | 2 |
| 🟡 建议 | 5 |
⛔ 需要修改


| 阶段 | 任务名 | 状态 | 详情 |
|---|---|---|---|
| 编译构建 | Build_memfabric-hybrid | ✅ | >>> |
| Build_memfabric-hybrid-bazel | ✅ | >>> | |
| 恶意代码检查 | Antipoison_mf | ✅ | >>> |
| 编码安全与规范检查 | pre-commit | ✅ | >>> |
| CodeCheck_mf | ✅ | >>> | |
| 开源片段检查 | SCA_mf | ✅ | >>> |
| 开发者测试 | UT_memfabric-hybrid | ✅ | >>> |
| 流水线 | PR-pipeline_memfabric_hybrid | ✅ | >>> |
- compile : 运行流水线
- retry : 重试流水线所有失败子任务
- retry <任务名> : 仅重试指定失败子任务
- stop : 停止流水线


合入来源
问题/功能描述
单卡场景,支持 dsa kvoffload 稀疏批量h2d/d2h算子
修改方案描述
1、新增 acc_offload 模块用于kv offload场景及后续功能扩展。
2、acc_offload 基于 hybm 提供池化能力,完成host内存向device内存注册。
3、算子侧基于MTE分核完成h2d/d2h拷贝。
4、支持图模式。
是否涉及UT/ST
开发自检