deepsort使用cpu100%

deepsort在机器上100%占用CPU

问题:

在使用yolov5+deepsort进行模型推理时,运行的机器是48核的CPU,仅运行一个程序,发现GPU使用有1000多兆,但是CPU是满核运行。

处理问题:

  1. 发现问题:判断哪些代码造成了对CPU的过量使用,最终发现在对图像进行tracker.update()这行代码使用的使用,造成的cpu的满核使用。

  2. 分析问题:可能是tracker在update的使用了numpy,numpy自动开启多个线程,造成CPU的满核运行

  3. 记录问题解决过程
    思路一:考虑将numpy全部推到gpu上面计算。
    a. 可以使用cupy包(在代码中将import numpy as np 修改成 import cupy as np),但是存在一些问题就是numpy包的接口和cupy并不是完全相同的,并且在算法中多处使用了numpy数组,所以在修改的时候一直报错,后来放弃了。
    b.使用minpy包,(在代码中将import minpy as np 修改成 import cupy as np),但是安装minpy失败,后来放弃。
    注:虽然这种思路的两种方法都没成功,但是如果代码不是很复杂,可以考虑修改,这种方法是解决占用cpu问题的上策。
    思路二:限制CPU对线程的使用
    a.因为我的代码本来就是多线程的,所以通过os的限制,可能会影响我的程序的运行,如果你本来就是单线程的,可以考虑使用这种方法。

    import os
    os.environ[“OMP_NUM_THREADS”] = “1”
    os.environ[“OPENBLAS_NUM_THREADS”] = “1”
    os.environ[“MKL_NUM_THREADS”] = “1”
    os.environ[“VECLIB_MAXIMUM_THREADS”] = “1”
    os.environ[“NUMEXPR_NUM_THREADS”] = “1”

    b.后来想是不是可以限制单行代码对线程的使用,后来发现还真有,就是threadpoolctl包。具体操作如下:

from threadpoolctl import threadpool_limits
with threadpool_limits(limits=1, user_api='blas'):
	tracker.update() #your codes
	

感谢:
[^1]https://stackoverflow.com/questions/65100393/deep-sort-uses-a-lot-of-cpu

你可能感兴趣的:(深度学习,numpy,python,opencv,计算机视觉,目标检测)