CAM cam_feature 分支深度分析:Pybind 层、Examples、Docker 部署与 Release Notes

分析日期: 2026-07-21 分支: remotes/origin/cam_feature 分析范围: pybind 层完整代码、examples、docker 部署、release notes、测试体系


目录

  1. Pybind 层完整分析
  2. PyTorch NPU Extension Bridge
  3. Examples 变化
  4. Docker 部署与 SHMEM 配置
  5. Release Notes 解读
  6. 测试体系变化
  7. 编译系统变化
  8. 综合洞察与架构研判

1. Pybind 层完整分析

1.1 文件清单与架构概览

cam_feature 分支的 pybind 目录实际包含以下文件(注意:用户指定的 moe_dispatch_prefill.cpp、moe_combine_prefill.cpp、get_dispatch_layout.cpp、NPUBridge.h/.cpp、NPUStorageImpl.h/.cpp 在该分支上不存在,这些是其他分支或旧版的内容):

文件 功能 创建日期
pybind.cpp 模块入口,注册所有 Python 绑定 2025-12-10
functions.h 所有 autograd 函数声明 2025-12-10
torch_bind_exception.h 自定义异常类 2026-02-28
fused_deep_moe.cpp FusedDeepMoe 算子绑定 2025-12-10
a2e.cpp A2E (Attention-to-Expert) 算子绑定 2026-02-06
e2a.cpp E2A (Expert-to-Attention) 算子绑定 2026-02-06
all2_all_detour.cpp All2All Detour 算子绑定 2026-01-22
reduce_scatter_detour.cpp ReduceScatter Detour 算子绑定 2026-01-22
buffer.h/.cpp SHMEM ZeroBuffer 管理 2026-05-30
ext_utils.h/.cpp CamComm 通信管理工具 -
pytorch_npu_helper.hpp NPU 命令执行辅助宏 2025-11-29
setup.py whl 包构建脚本 2025-12-11
bdist_wheel_build.py wheel 打包辅助 2025-11-29

1.2 pybind.cpp — 模块注册核心

PYBIND11_MODULE(TORCH_EXTENSION_NAME, m) 注册了以下 Python 可调用函数:

m.def("fused_deep_moe", &FusedDeepMoeImplAutograd, "fused_deep_moe");
m.def("all2_all_detour", &all2_all_detour_impl_autograd, "all2_all_detour");
m.def("reduce_scatter_detour", &reduce_scatter_detour_impl_autograd, "reduce_scatter_detour");
m.def("cam_get_comm", &cam_get_comm, "cam_get_comm");
m.def("cam_free_comm", &cam_free_comm, "cam_free_comm");
m.def("cam_get_rank_size", &cam_get_rank_size, "cam_get_rank_size");
m.def("cam_get_and_increase_magic", &cam_get_and_increase_magic, "cam_get_and_increase_magic");
m.def("cam_get_magic", &cam_get_magic, "cam_get_magic");
m.def("a2e", &A2eImplAutograd, "a2e");
m.def("e2a", &E2aImplAutograd, "e2a");

同时注册了 FusedDeepMoeBuffer 类(SHMEM ZeroBuffer 的 Python 接口),暴露 init、zb_fused_deep_moe、is_initialized、get_ext_info、get_shmem_workspace 方法。

1.3 TORCH_LIBRARY 注册 — 算子 Schema 定义

TORCH_LIBRARY(umdk_cam_op_lib, m) 定义了 6 个算子的完整 schema:

(1) fused_deep_moe — 最复杂的算子

m.def("fused_deep_moe(Tensor x, Tensor expert_ids, Tensor[] gmm1_weight, Tensor[] gmm1_weight_scale, \
    Tensor[] gmm2_weight, Tensor[] gmm2_weight_scale, Tensor expert_scales, \
    Tensor? share_gmm1_weight, Tensor? share_gmm1_weight_scale, \
    Tensor? share_gmm2_weight, Tensor? share_gmm2_weight_scale, \
    Tensor? expert_smooth_scales, Tensor? share_smooth_scales, Tensor? x_active_mask, \
    Tensor[] gmm1_bias, Tensor[] gmm2_bias, \
    Tensor? share_gmm1_bias, Tensor? share_gmm2_bias, \
    str group_ep, int ep_rank_size, int ep_rank_id, int moe_expert_num, \
    int quant_mode, int global_bs) -> Tensor[]");

关键设计点: - 返回 Tensor[](3 个输出:output, shareOutput, expertTokenNums) - 支持 Shared Expert(share_gmm1/2_weight 可选) - 支持 Smooth Quantization(expert_smooth_scales) - 支持 Active Mask(x_active_mask,用于 MC2 动态 batch) - 支持 Bias(gmm1/2_bias) - quant_mode 参数控制量化模式(0=W8A8, 1=其他)

(2) all2_all_detour — All-to-All 通信 Detour

m.def("all2_all_detour(Tensor sendData, Tensor commRankIds, Tensor commArgs, int commId) -> Tensor");

(3) reduce_scatter_detour — ReduceScatter 通信 Detour

m.def("reduce_scatter_detour(Tensor sendData, Tensor commRankIds, Tensor commArgs, int commId, int op) -> Tensor");

(4) cam_get_comm / cam_free_comm — 通信域管理

m.def("cam_get_comm(int comm_id, int rank, int group_size, str server_ip_port) -> Tensor");
m.def("cam_free_comm(int comm_id) -> Tensor");

(5) a2e — Attention 到 Expert 的数据路由

m.def("a2e(Tensor x, Tensor? expert_ids, Tensor? scales, int batch_size, int hidden_size, \
    int topk, int expert_rank_size, int atten_rank_size, int rank, str group_ep, \
    int aiv_num, int compute_gate) -> Tensor[]");

(6) e2a — Expert 到 Attention 的数据回传

m.def("e2a(Tensor expand_x, Tensor atten_batch_size, int batch_size, int hidden_size, \
    int topk, int expert_rank_size, int attention_rank_size, int rank, str group_ep, \
    int aiv_num) -> Tensor");

1.4 统一的 Autograd 注册模式

所有算子遵循完全相同的四层注册架构(以 fused_deep_moe 为例):

FusedDeepMoeImplAutograd  (入口,调用 apply)
  └─ FusedDeepMoe::apply  (torch::autograd::Function)
      └─ FusedDeepMoe::forward → FusedDeepMoeImpl
          └─ Dispatcher::findSchemaOrThrow → 分发到具体实现

三层 TORCH_LIBRARY_IMPL 注册:

后端 注册函数 用途
PrivateUse1 FusedDeepMoeImplNpu NPU 实际执行
AutogradPrivateUse1 FusedDeepMoeImplAutograd Autograd 支持
Meta FusedDeepMoeImplMeta 元设备(shape 推断)

关键实现细节: - FusedDeepMoeImplNpu 中调用 EXEC_NPU_CMD(aclnnFusedDeepMoe, ...) 执行实际 NPU 命令 - backward 返回全空 Tensor(所有算子反向传播均未实现,仅支持推理) - Meta 实现仅做 shape 推断,不分配实际内存

1.5 ext_utils — CamComm 通信管理

constexpr int MAX_COMMS = 64;
extern CamCommPtr g_comms[MAX_COMMS];
  • 全局通信域数组,最多支持 64 个并发通信域
  • cam_get_comm 通过 CamCreateComm 创建通信域,返回 commArgs Tensor
  • cam_get_and_increase_magic 用于获取并递增 magic 号(防 ABA 问题)
  • cam_get_rank_size 查询通信域 rank 数量

1.6 torch_bind_exception.h — 异常处理

class TorchBindException : public std::exception {
    // 格式: "Failed: <name> error <file>:<line> error message or error code is '<error>'"
};
#define TORCH_BIND_ASSERT(cond)  // 不满足则抛出 TorchBindException

这是一个轻量级断言宏,用于在 C++ 层捕获错误并转换为 Python 异常。


2. PyTorch NPU Extension Bridge

2.1 pytorch_npu_helper.hpp — 核心执行引擎

这是整个 pybind 层最底层的基础设施,提供了 ATen → ACL 类型转换 和 NPU 命令执行 两大功能。

类型转换体系

at::Tensor → aclTensor*    (ConvertType)
at::Scalar → aclScalar*    (ConvertType)
at::IntArrayRef → aclIntArray*  (ConvertType)
at::TensorList → aclTensorList* (ConvertType)
c10::optional<T> → T* or nullptr  (ConvertType)

ScalarType → ACL DataType 映射表:

constexpr aclDataType kATenScalarTypeToAclDataTypeTable[] = {
    at::ScalarType::Byte → ACL_UINT8,
    at::ScalarType::Char → ACL_INT8,
    at::ScalarType::Short → ACL_INT16,
    at::ScalarType::Int → ACL_INT32,
    at::ScalarType::Long → ACL_INT64,
    at::ScalarType::Half → ACL_FLOAT16,
    at::ScalarType::Float → ACL_FLOAT,
    at::ScalarType::Double → ACL_DOUBLE,
    at::ScalarType::BFloat16 → ACL_BF16,
    // ... Complex 类型
};

Format 推断逻辑: - dim=3 → ACL_FORMAT_NCL - dim=4 → ACL_FORMAT_NCHW - dim=5 → ACL_FORMAT_NC1HWC0 - INT8 + (dim=2 or 3) → ACL_FORMAT_FRACTAL_NZ - 其他 → ACL_FORMAT_ND

EXEC_NPU_CMD 宏 — 核心执行宏

#define EXEC_NPU_CMD(aclnn_api, ...)

这是整个 CAM 算子执行的统一入口,执行流程:

  1. 动态加载 OpAPI 函数:通过 dlsym 从 libopapi.so / libcust_opapi.so 加载
  2. 初始化大页内存:InitHugeMemThreadLocal
  3. 类型转换:ConvertTypes(__VA_ARGS__, workspace_size_addr, executor_addr)
  4. 获取 Workspace 大小:调用 GetWorkspaceSize
  5. 分配 Workspace:通过 at::empty 分配 NPU Tensor
  6. 执行算子:lambda 捕获所有参数,通过 OpCommand 提交到 NPU 流
  7. 释放资源:ReleaseConvertTypes + ReleaseHugeMem + UnInitHugeMemThreadLocal

关键设计点: - 使用 static 局部变量缓存函数地址(首次调用时解析,后续复用) - 线程本地存储 g_hashBuf[8192] 用于算子 hash 计算 - 支持 InitHugeMemThreadLocal / UnInitHugeMemThreadLocal 可选大页内存管理 - 通过 at_npu::native::OpCommand 提交命令,支持自定义 handler

2.2 关于 NPUBridge/NPUStorageImpl

注意: NPUBridge.h/.cpp 和 NPUStorageImpl.h/.cpp 在 cam_feature 分支上不存在。这些文件可能是: - 其他分支(如 main 或 master)的内容 - 旧版 CAM 的 PyTorch 存储扩展实现 - 已被 pytorch_npu_helper.hpp 取代

当前 cam_feature 分支使用 pytorch_npu_helper.hpp 作为唯一的 NPU 交互层,不再需要单独的 Bridge/StorageImpl 层。


3. Examples 变化

3.1 文件清单

文件 功能 创建日期
fused_deep_moe_sample.py FusedDeepMoe 基础示例 2025-12-11
fused_deep_moe_sample_w4A8.py W4A8 量化变体示例 2026-06-29
fused_deep_moe_shmem_sample.py SHMEM ZeroBuffer 示例 2026-04-22
a2e_e2a_sample.py A2E/E2A 路由示例 2026-03-02

3.2 fused_deep_moe_sample.py — 基础精度验证

核心设计: 对比 FusionOp(融合算子)与 SmallOps(小算子组合)的输出精度。

# 调用方式
output, expert_token_nums = torch.ops.umdk_cam_op_lib.fused_deep_moe(
    x=x,
    expertIds=expert_ids,
    gmm1PermutedWeight=self.gmm1_weight,
    gmm1PermutedWeightScale=self.gmm1_weight_scale_fp32,
    gmm2Weight=self.gmm2_weight,
    gmm2WeightScale=self.gmm2_weight_scale_fp32,
    expertSmoothScalesOptional=smooth_scales,
    expertScalesOptional=expert_scales,
    groupEp=self.ep_hcomm_info,
    epRankSize=self.ep_world_size,
    epRankId=self.global_rank_id,
    moeExpertNum=self.moe_expert_num,
    sharedExpertNum=1,
    sharedExpertRankNum=self.shared_expert_rank_num,
    quantMode=0,
    globalBs=self.batch_size * self.ep_world_size
)

权重预处理(关键):

# GMM1 权重需要特殊 permute
gmm1_weight = gmm1_weight.transpose(1,2).contiguous()\
    .view(local_expert_num, 2, intermediate // 64, 64, hidden)\
    .transpose(1,2).contiguous()\
    .view(local_expert_num, intermediate * 2, hidden)\
    .transpose(1,2).contiguous()
# 转为 FRACTAL_NZ 格式
gmm1_weight = torch_npu.npu_format_cast(gmm1_weight, Format.FRACTAL_NZ)

测试配置: - batch_size=64, hidden_size=7168, intermediate_size=2048 - ep_world_size=16, moe_expert_num=64, top_k=8 - 精度验证:atol=2.0, rtol=0.02

3.3 fused_deep_moe_shmem_sample.py — SHMEM ZeroBuffer

核心创新: 使用 FusedDeepMoeBuffer 初始化 SHMEM 内存,实现零拷贝通信。

# SHMEM Buffer 初始化
self.buffer = umdk_cam_op_lib.FusedDeepMoeBuffer()
self.buffer.init(
    rank=self.global_rank_id,
    num_ranks=self.ep_world_size,
    memsize=shmem_memsize,  # 默认 3GB
    ip_port="tcp://172.16.0.146:8766"
)

# ZeroBuffer 调用
output, share_output, expert_token_nums = self.buffer.zb_fused_deep_moe(
    x, expert_ids,
    self.gmm1_weight, self.gmm1_weight_scale,
    self.gmm2_weight, self.gmm2_weight_scale,
    expert_scales,
    self.share_gmm1_weight, self.share_gmm1_weight_scale,
    self.share_gmm2_weight, self.share_gmm2_weight_scale,
    self.smooth_scales, self.share_smooth_scales_fp32,
    x_active_mask,
    "", group_ep, ep_rank_size, rank_id, expert_num, quant_mode, global_bs
)

测试场景覆盖: - test_fused_deep_moe_shmem_base — 基础功能 - test_fused_deep_moe_shmem_with_mc2_mask — MC2 Mask 动态 batch - test_fused_deep_moe_shmem_eplb — 动态 EPLB(Expert Load Balancing) - test_fused_deep_moe_shmem_with_share — Shared Expert - test_fused_deep_moe_shmem_with_smooth — Smooth Quantization - test_graph — torchair 图模式编译

3.4 fused_deep_moe_sample_w4A8.py — W4A8 量化

核心特性: - 支持 INT4 权重 × INT8 激活的 GEMM - 包含 TorchSimulator 类用于 CPU 端模拟 NPU 量化行为 - 三段流水线模拟:Pre-process (AIV) → Mid-process (AIC) → Post-process - 验证融合算子与 CPU 小算子组合的精度一致性

3.5 a2e_e2a_sample.py — MoE 与 Attention 分离架构

核心概念: 16 rank 分为 MOE 侧(rank 0-7)和 Attention 侧(rank 8-15)。

# Attention 侧:发送数据到 MOE
a2e_output = torch.ops.umdk_cam_op_lib.a2e(
    x=x, expert_ids=expert_ids, scales=scales,
    batch_size=16, hidden_size=512, topk=2,
    expert_rank_size=8, atten_rank_size=8,
    rank=rank, group_ep=ep_hcomm_info, aiv_num=4, compute_gate=1
)

# MOE 侧:接收数据并处理
e2a_output = torch.ops.umdk_cam_op_lib.e2a(
    expand_x=expand_x, atten_batch_size=atten_batch_size,
    batch_size=16, hidden_size=512, topk=2,
    expert_rank_size=8, attention_rank_size=8,
    rank=rank, group_ep=ep_hcomm_info, aiv_num=4
)

4. Docker 部署与 SHMEM 配置

4.1 Docker 文件缺失

注意: docker/cam/Dockerfile、docker/cam/docker-compose.yml、docker/cam/.env 在 cam_feature 分支上均不存在。docker 目录为空。

4.2 SHMEM 配置机制(从编译系统推断)

虽然 Docker 文件不存在,但从 setup.py 和编译脚本可以完整推断 SHMEM 部署要求:

环境变量依赖

变量 必需 说明
SHMEM_HOME_PATH 否(但 SHMEM 算子需要) Ascend-SHMEM 安装路径
CAM_COMM_PATH 是 cam_comm 库构建路径
ASCEND_HOME_PATH 是 CANN 工具包路径

SHMEM 编译时配置

# setup.py
shmem_home_path = os.environ.get("SHMEM_HOME_PATH")
if shmem_home_path:
    include_dirs.append(os.path.join(shmem_home_path, 'shmem', 'include'))
    library_dirs.append(os.path.join(shmem_home_path, 'shmem', 'lib'))
    libraries.append("shmem")
    compile_args.append("-DSHMEM_ENABLED")

SHMEM 运行时配置

从 buffer.cpp 可知: - 使用 aclshmemx_init_attr 初始化 SHMEM 通信域 - 通过 ip_port(如 tcp://172.16.0.146:8766)建立跨节点连接 - aclshmem_malloc 分配共享内存(默认 3GB) - 分为 ext_info(2MB)和 shmem_workspace(剩余空间)两部分

// buffer.cpp
status = aclshmemx_init_attr(ACLSHMEMX_INIT_WITH_DEFAULT, &attributes);
ext_info_ptr_ = aclshmem_malloc(EXT_INFO_SIZE);  // 2MB
shmem_workspace_ptr_ = aclshmem_malloc(shmem_workspace_size_);  // 剩余

SHMEM 算子自动剔除机制

# select_ops.py
def requires_shmem(registry, op):
    return bool(get_meta(registry, op).get("requires_shmem", False))

当 SHMEM_HOME_PATH 未设置时,所有 requires_shmem=true 的算子自动跳过。

4.3 部署架构推断

┌─────────────────────────────────────────────┐
│  Ascend A2/A3 SuperPod                       │
│  CANN ≥ 8.3.RC1                             │
│  Torch 2.8.0 + Torch-NPU 2.8.0-7.2.0       │
│  Ascend-SHMEM 1.0.0 (可选)                   │
│                                              │
│  Step 1: 安装 .run 包到 opp 目录             │
│  Step 2: source set_env.bash                 │
│  Step 3: pip install umdk_cam_op_lib.whl     │
└─────────────────────────────────────────────┘

5. Release Notes 解读

5.1 版本信息

  • 版本号: v25.12.0
  • 发布日期: 2025/12/30

5.2 核心更新内容

Release Notes 主要描述 UMDK 整体(URMA/URPC/DLock/UMS),CAM 部分未单独列出。关键更新:

URMA — 聚合设备特性

  • Jetty 多路径模式:CTP 通道,RM/RC 双模式,最大 4KB 消息
  • Jetty 单路径模式:TP 通道,仅 RC 模式,最大 64KB 消息,支持本地回环
  • JFS/JFR 多路径模式:CTP 通道,仅 RM 模式,最大 4KB 消息

URPC — 统一远程过程调用

  • 超时机制、连接保活、Channel 多对一
  • UMQ 消息队列(enqueue/dequeue + Post/Poll 两种模型)
  • UMQ Token 安全校验

DLock — 分布式锁

  • 原子锁/公平锁/读写锁的基本和批量操作
  • 分布式对象管理(FAA/CAS 原子操作)
  • 故障恢复(Primary Server 故障后重建)
  • 安全传输加密

UMS — Socket 兼容

  • 标准 Socket API 兼容
  • ums_run 透明替换工具

5.3 CAM 相关更新(从代码推断)

虽然 Release Notes 未直接列出 CAM 更新,但从代码可推断 cam_feature 分支的关键更新:

特性 状态 说明
FusedDeepMoe (W8A8) ✅ 已完成 A3 支持,低延迟模式
FusedDeepMoe (W4A8) ✅ 已完成 量化变体
FusedDeepMoE_fwk ✅ 已完成 独立框架算子
A2E/E2A ✅ 已完成 MoE-Attention 分离架构
All2All Detour ✅ 已完成 自定义 All-to-All
ReduceScatter Detour ✅ 已完成 自定义 ReduceScatter
SHMEM ZeroBuffer ✅ 已完成 零拷贝通信
MC2 Mask ✅ 已完成 动态 batch 支持
EPLB ✅ 已完成 Expert Load Balancing
Shared Expert ✅ 已完成 共享专家支持
torchair 图模式 ✅ 已完成 编译优化

6. 测试体系变化

6.1 测试文件清单

文件 功能 创建日期
test/cam/ut/a2e_e2a/test_a2e_e2a.py A2E/E2A 单元测试 2026-03-02

6.2 测试覆盖分析

当前仅有 1 个测试文件,覆盖范围极其有限:

@MPTest        # 多进程测试
@A3Test        # A3 芯片测试
@SKIP_ENV_RANKSIZE_UNEQUAL(16)  # 需要 16 rank
@pytest.mark.parametrize("mode", [('Eager')])  # 仅 Eager 模式
def test_base_test(mode):
    # 测试配置
    CASE_16RANK = {
        "batchSize": 16,
        "hiddenSize": 512,
        "topk": 2,
        "expertRankSize": 8,
        "attentionRankSize": 8,
        "aivNum": 4
    }

验证内容: - Attention 侧:E2A 输出 shape 与输入一致,数值 atol=1e-3 - MOE 侧:expand_x.shape[1] == hidden_size

6.3 测试缺口

缺口 严重程度 说明
无 FusedDeepMoe UT 🔴 高 最复杂的算子没有单元测试
无 SHMEM 测试 🔴 高 ZeroBuffer 功能无自动化测试
无 W4A8 测试 🟡 中 量化变体无独立测试
无 All2All/ReduceScatter UT 🟡 中 Detour 算子无测试
无图模式测试 🟡 中 torchair 编译路径未覆盖
无精度回归测试 🟡 中 无数值精度自动化验证
无多配置参数化 🟡 中 仅单一配置
无 GE 模式测试 🟢 低 仅 Eager,但注释说明 GE 无法获取覆盖率

7. 编译系统变化

7.1 operator_registry.json — 算子注册表

{
  "soc_versions": {
    "ascend910_93": [
      "a2e", "all_to_all_detour", "e2a",
      "fused_deep_moe", "fused_deep_moe_fwk", "fused_deep_moe_w4a8",
      "moe_combine_lowlatency_zb", "moe_combine_normal_zb",
      "moe_dispatch_layout_zb", "moe_dispatch_lowlatency_zb",
      "moe_dispatch_normal_zb", "moe_notify_dispatch_zb",
      "reduce_scatter_detour"
    ]
  }
}

13 个算子,其中 6 个需要 SHMEM。

7.2 构建选项

选项 功能 cam_feature 特有
-c <soc> 目标 SOC 代际
-a <ops> 选择算子列表
-q W4A8 量化变体
-d Debug 构建
-t 仅构建 UT
-p 仅构建 whl
-r 仅构建 run 包
-m 仅构建 cam_comm 库 ✅ 仅 cam_feature

7.3 关键编译规则

  • fused_deep_moe 与 fused_deep_moe_w4a8 互斥(共享源文件名)
  • fused_deep_moe_fwk 独立,可与任意变体共存
  • SHMEM 算子在 SHMEM_HOME_PATH 未设置时自动跳过
  • -m 选项仅 cam_feature 有(master 无 cam_comm)

8. 综合洞察与架构研判

8.1 架构演进方向

从通信算子到融合算子的跃迁:

Phase 1 (master): dispatch + combine 分离通信算子
Phase 2 (cam_feature): 
  → FusedDeepMoe: dispatch + GMM1 + SwiGLU + GMM2 + combine 五合一
  → A2E/E2A: MoE-Attention 分离通信
  → SHMEM ZeroBuffer: 零拷贝通信
  → All2All/ReduceScatter Detour: 自定义通信原语

8.2 关键设计决策

  1. 全推理导向:所有算子 backward 返回空 Tensor,表明 CAM 定位为推理加速库,训练依赖 PyTorch 原生 autograd 或外部框架。

  2. 三层后端注册:PrivateUse1(执行)+ AutogradPrivateUse1(梯度)+ Meta(shape 推断)是 PyTorch 自定义算子的最佳实践。

  3. SHMEM 可选编译:通过 SHMEM_HOME_PATH 环境变量控制,不依赖 SHMEM 时自动降级,保证兼容性。

  4. Dispatcher 分发模式:所有算子通过 torch::Dispatcher 分发,支持 lazy execution、symbolic tracing 和 torch.compile。

  5. EXEC_NPU_CMD 统一宏:封装了 OpAPI 加载、workspace 管理、内存释放的完整生命周期,大幅降低算子开发复杂度。

8.3 与竞品对比

特性 CAM (Huawei) NCCL (NVIDIA) MS-AMP (Microsoft)
融合 MoE 算子 ✅ FusedDeepMoe ❌ 分离 ❌ 分离
自定义 All-to-All ✅ Detour ❌ 标准 ❌
零拷贝通信 ✅ SHMEM ZB ✅ GPUDirect ❌
MoE-Attn 分离 ✅ A2E/E2A ❌ ❌
量化支持 ✅ W8A8/W4A8 ❌ ✅ FP8
反向传播 ❌ 仅推理 ✅ ✅

8.4 风险与建议

  1. 测试覆盖严重不足:13 个算子仅 1 个 UT,建议优先补充 FusedDeepMoe 和 SHMEM 测试。

  2. 反向传播缺失:如果未来需要训练支持,需实现完整的 backward 函数。

  3. SHMEM 网络配置:ip_port 硬编码在示例中,生产环境需要动态服务发现。

  4. W4A8 量化:示例文件较大(33KB),包含 CPU 模拟器,说明量化精度验证是难点。

  5. Docker 部署缺失:无 Dockerfile/docker-compose,建议补充容器化部署方案。


附录:关键文件路径索引

src/cam/comm_operator/pybind/
├── pybind.cpp                    # 模块入口 + TORCH_LIBRARY 注册
├── functions.h                   # 所有 autograd 函数声明
├── torch_bind_exception.h        # 自定义异常
├── fused_deep_moe.cpp            # FusedDeepMoe 实现
├── a2e.cpp                       # A2E 实现
├── e2a.cpp                       # E2A 实现
├── all2_all_detour.cpp           # All2All Detour 实现
├── reduce_scatter_detour.cpp     # ReduceScatter Detour 实现
├── buffer.h / buffer.cpp         # SHMEM ZeroBuffer
├── ext_utils.h / ext_utils.cpp   # CamComm 通信管理
├── pytorch_npu_helper.hpp        # NPU 执行辅助宏
├── setup.py                      # whl 构建
└── pytorch_extension/
    ├── bdist_wheel_build.py      # wheel 打包
    └── pytorch_npu_helper.hpp    # (同上)

src/cam/examples/
├── fused_deep_moe_sample.py           # 基础精度验证
├── fused_deep_moe_sample_w4A8.py      # W4A8 量化
├── fused_deep_moe_shmem_sample.py     # SHMEM ZeroBuffer
└── a2e_e2a_sample.py                  # MoE-Attn 分离

test/cam/ut/a2e_e2a/
└── test_a2e_e2a.py                    # A2E/E2A 单元测试

build/cam/comm_operator/
├── build.sh                           # 主编排
├── build_pybind.sh                    # pybind 构建
├── compile_ascend_proj.sh             # 算子编译
└── select_ops.py                      # 算子选择

src/cam/comm_operator/ascend_kernels/
└── operator_registry.json             # 算子注册表

RELEASE-NOTES.md                       # 英文版本
RELEASE-NOTES.ch.md                    # 中文版本
README.md                              # 项目 README
src/cam/README.md                      # CAM 模块 README

分析结论: cam_feature 分支代表了 CAM 从"通信加速库"向"融合算子库"的关键转型。FusedDeepMoe 五合一算子、SHMEM ZeroBuffer、A2E/E2A 分离架构是三大核心创新。但测试覆盖和反向传播是当前最大短板。

← ZB 工具 + 编译系统 + HFA 📑 索引 SHMEM 框架 + NDA 层 →