服务器配置相同服务性能不一样排查

背景

  • 查看响应时间日志,新增加的两台GPU机器服务器响应时间要比老的机器要快3倍
  • qps 相似,机型一模一样,同一个服务和同样的模型

排查

  • htop 查看老机器开启了 swap, 新机器关闭了swap,于是将老机器的 swap 关闭,然而并没有效果

  • prometheus 比对两台机器的运行差异,除了老机器CPU使用率和负载都比新机器高以外其余的指标全部都接近,排除磁盘、网络等问题

  • export -p 对比环境变量一样,排除环境变量问题

  • lsof -p 进程ID| grep mem 拿到python3运行环境依赖的库进行比对, 发现运行时类库有些不一样,联系算法同学升级版本和对比原因

    • opencv 版本不一致,升级版本为一致, pip3 list|grep opencv
    • Pillow 版本不一致,升级版本为一致,pip3 list|grep Pillow
    • 为什么跑的快的机器有用到 onnxruntime_gpu.libs/libz-eb09ad1d.so.1.2.3, 跑的慢的机器没有用这个类库,算法同学找到关键点了

解决

在慢的机器上运行 pip3 list 发现有同时安装 onnxruntime 和 onnxruntime-gpu, 于是测试

$ pip3 list|grep onnxruntime
onnxruntime               1.4.0
onnxruntime-gpu           1.4.0
$ python3
>>>import onnxruntime
>>>onnxruntime.get_device(); 
'CPU'

终于找到原因了,就是因为onnxruntime全部是在CPU上计算的,导致服务器的CPU利用率过高,GPU反而没有怎么利用,于是卸载CPU版本 pip3 uninstall onnxruntime, 然后重启服务,人脸识别模型的服务响应速度由800毫秒提升到250毫秒

原因分析

TODO,我不是搞算法和运维的,求大神解答

  • 为什么同时安装onnxruntime和onnxruntime-gpu的时候,onnxruntime默认会使用CPU呢?
  • 我们的开发机器上面都有同时安装这两个库,为什么默认使用的就是GPU?
上一篇:购物车:注册,登入,注销,购物,购物车,退出


下一篇:OpenCV实现"你的名字"滤镜