已合并
【反合】[core] 单卡场景,支持 dsa kvoffload 稀疏批量h2d/d2h算子 #993
【反合】[core] 单卡场景,支持 dsa kvoffload 稀疏批量h2d/d2h算子 #993
已合并
wlwen创建于 7月22日
wlwen成员
7月22日

合入来源

问题/功能描述

单卡场景,支持 dsa kvoffload 稀疏批量h2d/d2h算子

修改方案描述

1、新增 acc_offload 模块用于kv offload场景及后续功能扩展。
2、acc_offload 基于 hybm 提供池化能力,完成host内存向device内存注册。
3、算子侧基于MTE分核完成h2d/d2h拷贝。
4、支持图模式。

是否涉及UT/ST

image.png

开发自检

likedislike
Pull Request已成功合入, 合并人@chenxin
(感谢 wlwen 的贡献)
Wwlwen成员
7月22日 关联了issue:[Feature]: dsa kvoffload 支持批量稀疏h2d/d2h
atomgit-bot
atomgit-bot
7月22日 评论:

变更摘要

本次 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 等依赖的可见性。

likedislike
不准确?
atomgit-bot
atomgit-bot
7月22日 评论:

代码审查

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

⛔ 需要修改

likedislike
不准确?
ascend-robot
ascend-robot成员
7月22日 评论:
流水线 PR-pipeline_memfabric_hybrid#4605 (重试第2次) [ commitID:46915e8c ] 已完成
阶段 任务名 状态 详情
编译构建 Build_memfabric-hybrid ✅ >>>
Build_memfabric-hybrid-bazel ✅ >>>
恶意代码检查 Antipoison_mf ✅ >>>
编码安全与规范检查 pre-commit ✅ >>>
CodeCheck_mf ✅ >>>
开源片段检查 SCA_mf ✅ >>>
开发者测试 UT_memfabric-hybrid ✅ >>>
流水线 PR-pipeline_memfabric_hybrid ✅ >>>
此流水线已支持下列评论快捷指令,仅PR创建者和白名单成员评论有效
  • compile : 运行流水线
  • retry : 重试流水线所有失败子任务
  • retry <任务名> : 仅重试指定失败子任务
  • stop : 停止流水线
likedislike
此处折叠了46条消息 查看更多
Zzhangjinshi成员
7月22日 通过审查
chenxinchenxin成员
7月22日 通过审查
chenxinchenxin成员
7月22日 将chenyz6设为评审人
chenxinchenxin成员
7月22日 通过了评审
chenxinchenxin成员
7月22日 合入了pull request