You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

RK3588平台OnnxRuntime ACL EP节点已分配但GPU零负载问题咨询

Orange Pi 5(RK3588)上强制ACLExecutionProvider使用OpenCL后端的解决方案

是的,Arm Compute Library(ACL)集成到OnnxRuntime的ACLExecutionProvider时,默认会优先采用CPU(NEON)后端,而非OpenCL后端——这通常是因为编译阶段未明确启用OpenCL支持,或是运行时未指定后端参数导致的。以下是强制启用OpenCL后端的具体步骤:

  • 编译阶段确保启用OpenCL支持
    编译OnnxRuntime时,必须通过cmake参数明确开启ACL的OpenCL后端支持,同时确保环境中已安装Mali OpenCL开发库:

    # 配置ORT编译参数
    cmake ../onnxruntime \
      -DONNXruntime_BUILD_ACL=ON \
      -DONNXruntime_ACL_ENABLE_OPENCL=ON \
      -DONNXruntime_ACL_USE_OPENCL=ON \
      # 其他必要编译参数...
    

    若ORT自动拉取ACL源码编译,需确保上述参数会传递给ACL的编译流程,也可单独编译ACL时指定:

    # 单独编译ACL的参数
    cmake ../ComputeLibrary \
      -DARM_COMPUTE_OPENCL=ON \
      -DARM_COMPUTE_CL=ON \
      # 其他参数...
    
  • 运行时显式指定OpenCL后端
    在初始化ORT推理会话时,给ACLExecutionProvider传入参数强制使用OpenCL:

    • C++示例:
      Ort::SessionOptions session_options;
      std::unordered_map<std::string, std::string> acl_opts;
      acl_opts["backend"] = "opencl";
      acl_opts["device_id"] = "0"; // 对应Mali-G610的设备ID,通常为0
      Ort::ThrowOnError(Ort::GetApi().SessionOptionsAppendExecutionProvider_ACL(session_options, acl_opts));
      Ort::Session session(env, "your_model.onnx", session_options);
      
    • Python示例:
      import onnxruntime as ort
      sess_opts = ort.SessionOptions()
      acl_provider_config = {"backend": "opencl", "device_id": "0"}
      sess = ort.InferenceSession(
          "your_model.onnx",
          sess_opts,
          providers=[("ACLExecutionProvider", acl_provider_config)]
      )
      
  • 环境变量快速验证
    运行推理程序前,设置全局环境变量强制ACL使用OpenCL后端,适合快速测试:

    export ARM_COMPUTE_BACKEND=OpenCL
    # 然后启动你的推理程序
    ./your_inference_app
    

内容的提问来源于stack exchange,提问作者이호연

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 00:33:21