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

如何减少onnxruntime.InferenceSession调用的大量线程数?

减少ONNX Runtime创建的CPU线程数

这是因为ONNX Runtime默认会根据CPU核心数自动创建大量线程用于并行计算,想要减少留存的线程数,可以通过以下几种方式调整配置:

  • 直接配置InferenceSession的线程参数
    创建SessionOptions对象,手动设置算子内和算子间的并行线程数,按需调整数值(比如根据CPU核心数或实际推理性能需求):

    import onnxruntime
    from time import sleep
    sleep(20)
    
    sess_options = onnxruntime.SessionOptions()
    # 控制单个算子内部的并行计算线程数
    sess_options.intra_op_num_threads = 2
    # 控制不同算子之间的并行调度线程数
    sess_options.inter_op_num_threads = 2
    
    model = onnxruntime.InferenceSession('my.onnx', sess_options=sess_options, providers=['CPUExecutionProvider'])
    

    把这两个参数设为较小的数值(比如1-4),就能明显降低留存的线程数量。

  • 通过环境变量限制OpenMP线程数
    ONNX Runtime的CPU后端依赖OpenMP实现并行,你可以在导入onnxruntime前设置环境变量来限制线程数:

    import os
    # 设定OpenMP线程数为2,可根据需求调整
    os.environ["OMP_NUM_THREADS"] = "2"
    
    import onnxruntime
    from time import sleep
    sleep(20)
    model = onnxruntime.InferenceSession('my.onnx', providers=['CPUExecutionProvider'])
    

    注意环境变量必须在导入onnxruntime之前设置才会生效。

  • 完全禁用并行(适合对速度要求不高的场景)
    如果不需要任何并行计算,直接把两个线程数都设为1,线程数会降到最低:

    import onnxruntime
    from time import sleep
    sleep(20)
    
    sess_options = onnxruntime.SessionOptions()
    sess_options.intra_op_num_threads = 1
    sess_options.inter_op_num_threads = 1
    
    model = onnxruntime.InferenceSession('my.onnx', sess_options=sess_options, providers=['CPUExecutionProvider'])
    

    这种设置会牺牲部分推理速度,需要根据实际场景权衡使用。

内容的提问来源于stack exchange,提问作者olivia

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 12:20:11