torch.cuda.synchronize()

同样是在调试dbnet遇到的坑,导致以为速度瓶颈在后处理,后来发现后处理时间不长,还是模型推导的时间占大头。

一开始这样打印模型推导时间,结果特别小

start = time.time()
preds = self.model(tensor)
end = time.time()
print('inference take {:.3f}s for one image'.format(end - start))

在pytorch里面,程序的执行都是异步的。如果采用上述方式,测试的时间会很短,因为执行完end=time.time()程序就退出了,后台的cuda也因为python的退出而退出了

正确打印模型推导时间代码如下,代码会同步cuda的操作,等待gpu上的操作都完成了再继续执行end = time.time()

start = time.time()
if str(self.device).__contains__('cuda'):
    torch.cuda.synchronize(self.device)  # 'cuda:0'

preds = self.model(tensor)

if str(self.device).__contains__('cuda'):
    torch.cuda.synchronize(self.device)

end = time.time()
print('inference takes {:.3f}s for one image'.format(end - start))

参考

https://blog.csdn.net/u013548568/article/details/81368019

你可能感兴趣的:(torch.cuda.synchronize())