对于鲲鹏服务器,如果出现多卡的算子调度不齐整导致的性能问题,如下图,不同卡的算子调度时长不一致。可以尝试使用“TASK_QUEUE”和“NUMA”绑核进行优化。
NUMA绑核前,需要通过命令lspci -vs Bus-Id查看每张卡亲和的NUMA节点,以减少调度时间。
参考下图,Bus-Id可以通过命令npu-smi info查询。
使用绑核,多卡进程启动方式需要使用Python脚本方式,绑核参考脚本如下:
# 请根据机器上的NUMA亲和性配置每个芯片对应的NUMA node映射,并通过numactl进行绑核 # 查询NUMA node命令示例:lspci -vs c1:00.0 declare -A map map["0"]="3" map["1"]="3" map["2"]="2" map["3"]="2" map["4"]="0" map["5"]="0" map["6"]="1" map["7"]="1" export HCCL_WHITELIST_DISABLE=1 RANK_ID_START=0 WORLD_SIZE=8 for((RANK_ID=$RANK_ID_START;RANK_ID<$((WORLD_SIZE+RANK_ID_START));RANK_ID++)); do export LOCAL_RANK=$RANK_ID export WORLD_SIZE=$WORLD_SIZE bind=${map["$RANK_ID"]} echo "Device ID: $RANK_ID, bind to NUMA node: $bind" numactl --cpunodebind=$bind --membind $bind python3 ddp_test_shell.py & done wait
绑核后,多卡算子调度情况如下图,可以看到不同卡算子调度时长变得齐整。