绑核优化

功能描述

在PyTorch的训练或推理场景,可以通过设置环境变量CPU_AFFINITY_CONF来控制CPU端算子任务的处理器亲和性,即设定任务绑核。该配置能够优化任务的执行效率,避免跨NUMA(非统一内存访问架构)节点的内存访问,减少任务调度开销。

可选的绑核方案如下:

参数配置格式:

export CPU_AFFINITY_CONF=<mode>,npu<value1>:<value2>-<value3>

可选参数设置:

  • NUMA节点对应的CPU核组可以通过命令lscpu查看。
  • 绑核注意虚拟机与物理机的拓扑结构是否一致。默认情况下,npu0或Device 0对应的核组是NUMA0,但是docker等虚拟机环境可能会改变映射关系,推荐根据映射关系自定义绑核范围。
  • 由于绑核特性触发时机较后,一般会覆盖外界的绑核,比如taskset
  • 绑核对于不同模型优化程度不同,对于CPU瓶颈的模型会有较大提升,对于NPU瓶颈的模型能保证性能持平。

配置示例

示例一:粗粒度绑核
export CPU_AFFINITY_CONF=1
示例二:细粒度绑核
export CPU_AFFINITY_CONF=2
示例三:自定义多张NPU卡的绑核范围
export CPU_AFFINITY_CONF=1,npu0:0-1,npu1:2-5,npu3:6-6