我想测量会话运行推理操作所需的时间。
我使用time
来衡量它
start = time.clock()
sess.run([ops['pred']], feed_dict=feed_dict)
end = time.clock()
elapsed_time_batch = end-start
我在同一数据集和平均值上多次这样做。 问题是 - 我的平均时间测量值非常不同(1.7毫秒vs 1.2毫秒)。即使它只是"只是"差异为0.5ms,相对差异较大(0.5 vs 1.7约为30%)。
我尝试为会话设置一些GPU选项,如下所示:
config = tf.ConfigProto()
config.gpu_options.per_process_gpu_memory_fraction = 0.95
config.gpu_options.allow_growth = False
config.allow_soft_placement = True
config.log_device_placement = False
if limit_gpu:
gpu_idx = str(gpu_idx)
os.environ["CUDA_VISIBLE_DEVICES"] = gpu_idx
else:
os.environ["CUDA_VISIBLE_DEVICES"] = "0, 1"
sess = tf.Session(config=config)
但是,这并没有解决它。造成这种变化的原因是什么?我如何稳定它以获得更可靠的时间读数。
我在具有4 GPUS的Linux服务器上运行(对于此测试,我限制为1个GPU - 一个Titan Xp)。
答案 0 :(得分:0)
我最终弄清楚了,所以我在这里为其他可能在未来遇到此问题的人发布答案。
似乎函数time.clock()
不是正确的选择(详见this答案)。
解决方案是使用timeit.timer()
函数:
from timeit import default_timer as timer
start = timer()
sess.run([ops['pred']], feed_dict=feed_dict)
end = timer()
elapsed_time_batch = end-start