开发者
资源
图像识别场景调优报告

图像识别场景调优报告

原生开发DevKit性能调优指令集

发表于 2026/06/12

0

1      调优背景

图像识别项目在鲲鹏迁移替换后,性能劣化严重,具体来说,其中某个向量化计算benchmark当前鲲鹏机型运行时长为20398920新型号< 38232920),期望920新型号运行时长达到17000,急需通过调优释放鲲鹏服务器潜力

2      测试环境

机型:920新型号256核心(开启超线程),共4numa,总内存470G

测试条件:

docker内部测试,测试前保证环境空载,仅使用10个工作线程,引入环境变量如下:

OMP_THREAD_LIMIT=10

OMP_NUM_THREADS=1

OMP_WAIT_POLICY=PASSIVE

OPENBLAS_NUM_THREADS=1

MKL_DYNAMIC=FALSE

KMP_BLOCKTIME=0

3      负载分析

3.1      benchmark代码分析

根据对benchmark代码进行详细解读分析,发现以下特征:

1、代码逻辑为使用faiss根据向量化内积计算相似度,几乎纯吃cpu计算和内存资源,

2、性能指标为所有线程的总运行时长(总计算量固定的情况下可以近似看作为单线程的计算时间)

3、当前benchmark配置中固定了线程池大小为100

3.2      特征分析及优化方向初探

根据3.1中所提到特征,怀疑可能的调优方向如下:

1、  faiss数据库并未做arm上的特殊适配,可以通过向量化替换改造开源faiss以及其三方库openBLAS,充分发挥鲲鹏向量化能力

2、  由于近似看做单线程的计算时间,所以当前benchmark测试方向为单核性能,而鲲鹏服务器在多核计算场景下更具优势,所以本测试场景对鲲鹏服务器并不友好,可以尝试关闭超线程等手段进一步提升单核性能

3、  当前OMP工作线程仅为10,而上层设置线程池数量远大于10,会导致线程切换、系统资源使用不平衡等问题,可以将线程池大小设置为与OMP 工作线程数相同。

4      测试基线

使用faiss1.5.3+ openBLAS0.3.8),使用章节二中的环境变量测试得到的性能指标为22113

测试过程中通过DevKit tuner/ksys采集的关键性能指标为:

numa

topdown

频率:

指令:

可以明显发现:

1、  存在较大的跨numa流量访问的情况,可以后续通过绑核优化

2、  由于先验在920测试所得的SIMD占比(14%),而920新型号上该项占比达到68%,提升非常明显,怀疑可能是openBLAS中使用了较多sve指令的优化,也进一步印证了现场测试过程中38232920)远大于20398920新型号

3、  CPU频率存在明显减低,当前频率模式为ondemand,后续可以通过使用性能模式稳定频率

4、  由于benchmark场景比较固定,当前IPC已处于较高水平

5      调优过程

5.1      向量化替换改造

通过对faiss进行向量化改造,并升级openBLAS0.3.31版本,其他测试条件不变,得到性能指标为20124

测试过程中通过DevKit tuner/ksys采集的关键性能指标为:

topdown

指令:

根据上述数据分析得到

1IPC相较于基线有进一步提升,验证了向量化改造的效果

2SIMD指令从68% -> 69%,提升比例不大,进一步采集hotspot,发现所改造的faiss向量化指令并不在热点中,热点中占比最高的部分均在openblas的汇编模块,faiss所占比例较小,且经过源码查看,该部分并不能进行向量化改造。


5.2      线程池调整+绑核

5.1的基础上,设置线程池大小为10,并通过numactl -C 2,4,6,8,10,12,14,16,18,20,2211个核(主线程和线程池内10个线程) ,偶数绑核是考虑在SMT开启情况下,充分使用物理核;最后得到性能指标为17474

测试过程中通过DevKit tuner/ksys采集的关键性能指标为:

numa

可以看到IPC已达到3.65,处于特别高的水平,说明此时程序指令执行效率高,且无跨numa流量

5.3      开启CPU频率性能模式

5.2的基础上,把cpu频率均设置为性能模式,最终测试得到性能指标为16633,已满足调优诉求

echo performance > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor

复测一次后,结果为17054,取两者平均为16844

5.4      关闭超线程

考虑到主要测试对象为单核性能,因此在BMC中尝试关闭超线程后测试,在5.3的基础上,最终测试得到性能指标为18383,性能发生劣化,舍弃

5.5      调优手段汇总

考虑到上述手段在调优过程中存在交叉使用的情况,为了方便评估每项调优手段的影响,将每种调优手段独立应用进行调优,且为保证测试结果所得结果如下所示:


性能指标(基线22113)

相对基线提升比例

向量化替换faiss

22055

0.3%

openBLAS升级

20124

9.0%

线程池设置为10

18096

18.2%

设置cpu频率性能模式

20831

5.8%

绑核(线程池100,绑numa 0,1

22652

-2.4%

绑核(线程池10,偶数绑核)

17865

19.2%

关闭超线程

20350

8.0%

向量化替换faiss+openBLAS升级+线程池替换+绑核

17474

21.0%

向量化替换faiss+openBLAS升级+线程池替换+绑核+ cpu频率性能模式

16844

23.8%


6      测试结论

通过向量化替换faiss+openBLAS升级+线程池替换+绑核+ 设置cpu频率性能模式,在本地测试中,调优后的性能指标最终为16844,相比本地基线(22113)提升23.8%,相比现场测试基线(20398)提升18.5%,基本满足调优诉求




本页内容