- 版本、环境信息:
1)PaddlePaddle版本:1.4.1
2)CPU:CPU
3)系统环境:centos
- 问题描述:使用ParallelExecutor进行infer,CPU利用率较低,和直接使用Executor的利用率差不多,速度没有明显提升,主要是想用ParallelExecutor数据并行提升预测速度
预测代码如下:
infer_program = fluid.default_main_program().clone(for_test=True)
# For faster executor
exec_strategy = fluid.ExecutionStrategy()
exec_strategy.use_experimental_executor = True
build_strategy = fluid.BuildStrategy()
cpu_num = int(os.environ.get('CPU_NUM', cpu_count()))
build_strategy.reduce_strategy = \
fluid.BuildStrategy.ReduceStrategy.Reduce if cpu_num > 1 \
else fluid.BuildStrategy.ReduceStrategy.AllReduce
logger.info("begin executor")
pe = fluid.ParallelExecutor(
use_cuda=False,
main_program=infer_program,
build_strategy=build_strategy,
exec_strategy=exec_strategy)
fluid.io.load_persistables(exe, args.model_output_dir + '/batch-%d' % args.model_steps, infer_program)
print 'start test'
batch_id = 0
py_reader.start()
auc_metric = fluid.metrics.Auc("ROC")
while True:
try:
results, y_pred, y_true = pe.run(fetch_list=[cost, preds, label])
auc_metric.update(np.r_[y_pred], np.r_[y_true])
results = np.mean(results)
if batch_id % 100 == 0:
sample = (batch_id + 1) * args.batch_size * int(os.environ.get('CPU_NUM', cpu_num))
logger.info("TEST --> samples: {} batch: {} loss:{} auc:{}".format(sample, batch_id, results, auc_metric.eval()))
batch_id += 1
except fluid.core.EOFException:
py_reader.reset()
break
之前提的issue主题是运行出错发现是我自己代码写错了
3条答案
按热度按时间bnlyeluc1#
@minhozhou 利用率低是多少,可以给一下数字吗
ifsvaxew2#
设置cpu_num=16,batch_size=512;设置buf_size如下
cpu实际使用率在100%~200%之间,大部分时间都是100%,相当于单核在跑
eagi6jfj3#
除了上述CPU利用率低的问题,另外实际测试了一下,同样的机器,同样的模型文件,预测同样的900万数据,以下测试同时运行,机器配置56线程,256G内存,运行的时候资源cpu和内存足够:
此外,在训练过程中每个batch都通过
py_reader.queue.size()
打印出py_reader维护的数据队列大小,发现每次输出都是0,上述三个测试均是如此,下图是第二个测试的输出图下面是cprofile输出的结果,耗时最多的前两个应该是在reader里面的操作
是不是因为数据处理太耗时导致pe预测反而不如单个exe呢?pe是多个cpu同时从py_reader的队列里拿数据吗?