昇腾绑核优化推理性能
/**************************如有任何问题和疑问,请评论区留言*********************************/
本文介绍如何通过绑核提高并发推理任务性能。
1. 绑核概念
所谓绑核,其实就是设定某个进程/线程与某个CPU核的亲和力,设定以后,Linux调度器就会让这个进程/线程只在所绑定的核上面去运行。将进程/线程与CPU绑定,可以显著提高CPU Cache命中率,从而减少内存访问损耗,提高应用性能。
2. 绑核方法
方法1:使用taskset命令将一个或多个进程绑定到指定的CPU核心上,具体步骤
1)使用lscpu命令可查看当前环境有多少CPU
2)使用taskset 启动要执行的任务
例如:taskset -c 0,2,5-12 task.sh
task.sh会被指定在 CPU 0,2,5-112 上运行
方法2:使用numactl命令将一个或多个进程绑定到指定的node上,具体步骤
1)使用numactl –H查看当前环境有多少node,如下图共有4个node
2)使用numactl启动要执行的任务
例如numactl --cpunodebind=0-1 --membind=0-1 task.sh
task.sh将在node0、1上执行
3. 绑核策略
不同CPU核之间的通信开销有所不同,为了达到最优性能,需要指定线程的亲和性;合理规化不同线程/进程使用的CPU,达到更优的资源分配,使系统整体性能更优,尤其对于arm系统,arm核比较多而且跨numa能力不如x86, 所以对于arm系统,尽量不跨不跨numa node,减少节点间内存访问开销。另外需要注意不是绑定的核数越多性能提升就越多,绑核还需要根据具体任务并发情况来确定绑核策略。
4. 绑核案例
(1)任务:在300 iDUO 4卡8芯上启动24个并发推理任务
(2)未绑核测试推理
1)推理脚本如下:
2)任务执行过程中使用htop命令查看CPU使用情况,在任务开始和快要结束的时候,监测到96个CPU使用率都很高
3)最大推理时间 enhance_time : 208.09s
(3)绑核测试1
1)推理脚本修改如下
说明:本机器上有4张300 Iduo卡,每个卡2个芯,此次绑核是将0、1芯上的任务和0-23号CPU绑定, 2、3芯上的任务和24-47号CPU绑定,4、5芯上的任务和 48-71号CPU绑定,6、7芯上的任务和72-95号CPU绑定。
2)任务执行过程中使用htop命令查看CPU使用情况,在任务开始和快要结束的时候,监测96个CPU使用率依然都很高
(4)绑核测试2
1)分析绑核测试1发现,绑核后推理时间有近3s的提升,但是96个CPU多次监控到使用率高,这种情况CPU跨node调度很容易出现,故尝试调整绑核策略,将 0、1、2、3芯上的任务和0-23号CPU绑定,将4、5、6、7芯上的任务和24-47号CPU绑定,推理脚本修改如下:
2)任务执行过程中使用htop命令查看CPU使用情况
3)最大推理时间enhance_time : 187.45s,相比于不绑核,推理性能提高了10%。
(5)案例总结
通过不同的绑核策略,调整CPU Cache命中率,减少跨node调用,可以有效提高推理性能。
- 点赞
- 收藏
- 关注作者
评论(0)