昇腾绑核优化推理性能

举报
昇腾适配 发表于 2024/10/12 11:24:03 2024/10/12
【摘要】 绑核优化推理性能

/**************************如有任何问题和疑问,请评论区留言*********************************/


本文介绍如何通过绑核提高并发推理任务性能。

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.png

   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调用,可以有效提高推理性能。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。