RDK S100可以指定某个算子运行在BPU上吗

使用RDK X5时,看量化参数手册是有run on BPU 的选项的,但是S100似乎没有,那么如何调整算子运行在哪呢?

从提供的网页内容来看,RDK S100确实支持通过 quant_config 配置文件来指定算子的计算精度(如 int8、int16、float16),但没有直接提供“运行在BPU上”的选项。不过,可以通过配置算子的输入/输出数据类型(如 int16)来间接影响算子的执行位置。

以下是关键信息总结:


:white_check_mark: 如何控制算子运行位置?

虽然 S100 没有像 X5 那样提供 run on BPU 的显式选项,但可以通过以下方式间接控制算子的执行位置

1. 使用 node_configop_config 配置算子精度

  • quant_config.json 中,你可以为特定节点或算子类型配置其输入/输出数据类型。
  • 例如:
    "node_config": {
      "Conv_0": {
        "qtype": "int16"
      }
    }
    
    这会强制该节点以 int16 运行,而工具链会自动处理上下文(如前驱和后继算子)是否支持 int16,从而决定是否在 BPU 上执行。

2. int16 配置会触发 BPU 优化

  • 根据文档说明,当配置某个算子为 int16 时,工具链会自动检查其上下文是否支持 int16,并尝试将其分配到 BPU 上执行(如果硬件支持)。
  • 如果不支持,会回退到 int8 或 float32。

:pushpin: 注意:并非所有算子都支持 int16,具体支持列表请参考 工具链算子支持约束列表


:red_exclamation_mark: 常见误区

  • “run on BPU” 选项不存在于 S100 —— 这是用户提问中提到的 X5 的功能,S100 不支持显式指定。
  • 但通过精度配置可以间接控制执行位置 —— 工具链会根据算子类型、数据类型和硬件能力自动选择最优执行设备(CPU/BPU)。

:hammer_and_wrench: 实际操作建议

  1. 先确认算子是否支持 int16
    查阅 S100 Torch 算子支持列表BPU 约束列表

  2. quant_config.json 中添加配置
    示例:

    {
      "node_config": {
        "conv1": {
          "qtype": "int16"
        }
      }
    }
    
  3. 编译模型并观察日志
    编译时工具链会打印算子执行位置(如 “Conv1: run on BPU” 或 “Conv1: fallback to CPU”),以此验证配置是否生效。


:books: 参考文档


:light_bulb: 总结

RDK S100 不支持直接指定“运行在BPU上”,但可以通过 quant_config 配置算子为 int16 来间接控制其执行位置。工具链会根据硬件能力和算子兼容性自动选择最优执行设备(BPU/CPU)。

如果你希望某个算子必须在 BPU 上运行,建议优先配置为 int16,并结合日志确认执行位置。如果某些算子不支持 int16,可能需要调整模型结构或接受回退到 CPU 执行。

如有进一步问题,可提供具体的算子名称或模型结构,我可以帮你分析是否支持 int16 或推荐替代方案。