- 版本、环境信息:
1)PaddlePaddle版本:1.8.3
3)GPU:k40 CUDA10.1
4)系统环境:python2.7
加载Rorberta-large进行预测,batch_size设置为32,使用load_inference_model导入后进行预测,显存维持在2g左右。
使用predictor是设置config中的gpu_memory上限为8g,调用时显存会迅速拉满,然后报错挂掉。
大致的代码逻辑如下
dataset = self.processor.build_dataset(data_list, predict=True)
data_iter = DataLoader(dataset,
batch_size=self.batch_size,
shuffle=False,
collate_fn=batcher('decode'))
for batch in tqdm(data_iter):
input_ids, masks = batch[:2]
logits = self.predictor.run([PaddleTensor(input_ids), PaddleTensor(masks)])
6条答案
按热度按时间gojuced71#
使用Predictor的时候 尝试把batch_size调小,或者打开config->EnableMemoryOptim()显存复用选项
dwthyt8l2#
为什么使用load_inference_model的方式可以成功运行呢?
使用predictor相比这种方式有什么优点?
sczxawaw3#
试了一下,打开EnableMemoryOptim后真的可以了!这个选项默认是关闭的,是基于什么考虑?打开之后效率会变差吗?
vyu0f0g14#
不是load_inference_model的问题,应该时exe.run和predictor.run的区别。predictor在预测阶段做了很多优化,可能会导致显存的增长
wh6knrhe5#
显存复用和模型结构有关,对于部分模型可能没有效果,所以默认时关闭的。打开该选项不影响预测性能
wnvonmuf6#
为啥我刚刚测了一下发现exe.run要快一点点。。。