专栏算法工具链J6M是否支持SparseConvolution算子?如果不支持,有什么比较好的解决方案?

J6M是否支持SparseConvolution算子?如果不支持,有什么比较好的解决方案?

默认828489小时前
10
1
  1. 环境信息

    • 芯片/架构:J6,march: nash-m
    • OE 工具链:HBDK 4.1.17,HB compile 3.3.11
    • 运行环境:Docker

  2. 问题描述

    1. J6 OE 当前是否支持 CenterPoint 这类 SparseConvolution / ScatterDense 算子?
    2. 如果不支持,官方推荐的 CenterPoint 适配方式是什么?

算法工具链
技术深度解析征程6
评论1
0/1000
  • HuangHui
    Lv.5
    你好,BPU 硬件架构主要针对密集张量(Dense Tensor)计算进行优化,稀疏卷积所需的非规则内存访问和索引计算在 BPU 上无法直接高效执行。J6M目前不支持原生的 SparseConvolution(稀疏卷积)算子。SparseConvolution也不是ONNX标准算子。 你可以:
    方案一:转换为密集卷积(推荐)

    如果模型的稀疏度不高,或者稀疏结构可以通过填充变为规则结构,建议将稀疏卷积替换为标准密集卷积。

    • 操作方法
      1. 在模型导出前,将稀疏张量(Sparse Tensor)转换为密集张量(Dense Tensor)。

      2. 使用标准的 torch.nn.Conv2d 或 torch.nn.Conv3d 替代稀疏卷积层。
      3. 利用 BPU 对密集矩阵乘法的高度优化特性,通常能获得比 CPU 运行稀疏算子更高的整体吞吐量。

    • 优点:完全兼容 BPU,无需自定义算子,编译部署流程最简单,推理性能可预测。
    缺点:如果数据极度稀疏,会引入大量的零值计算,导致算力浪费

    方案二:CPU 预处理 + BPU 密集推理(混合部署)

    如果必须保留稀疏性以大幅减少输入数据量(如点云处理),可将稀疏索引提取逻辑移至 CPU或DSP,处理好的数据在给BPU处理。

    5小时前
    0
    0