指定CPU核心跑程序
使用多卡服务器跑yolov8时会导致每个程序运行时间变长,经分析发现,每个yolo程序都会大量消耗第一个可使用的cpu核心,会造成单个核心超负载,指定每个程序使用的核心可以解决这个问题。
查看所有可用核心的使用情况:
mpstat -P ALL 5 2 #每5秒输出一次,共两次
%usr是用户使用率,%idle是核心空闲率
指定GPU和CPU核心:
nohup python batchtrain.py > outfile/train.out 2>&1 & #这行是本来要运行的代码,下面是指定GPU和CPU核心运行该程序的代码
CUDA_VISIBLE_DEVICES=2 taskset -c 41-55 nohup python batchtrain.py > outfile/train.out 2>&1 &
上面代码指定了程序在GPU2和41到55号CPU核心上运行,默认该进程产生的子进程也会在这个范围内运行。
查看进程运行情况:
ps -eF | grep train
查看进程210035可运行的CPU核心:
taskset -p 210035
十六进制fffe0000000000转换为二进制为11111111111111100000000000000000000000000000000000000000
从末尾往前41位是0,表示0-40号核心不可用,41-55位是1,表示可用。
可以发现,41号核心基本跑满了,程序主要占用可用的第一个核心。
看下41号核心上的进程:
ps -eLo pid,tid,psr,cmd | grep -w 41
可以看到,上面运行的都是该进程及子进程。
查看进程运行时间:
ps -eo pid,lstart,etime | grep 203694
可以看到,程序已经跑了半个小时了(系统时间有点问题)。