Paddle 使用Predictor预测时爆显存,使用load_inference_model就不会,

jaxagkaj  于 2021-11-30  发布在  Java
关注(0)|答案(6)|浏览(1051)
  • 版本、环境信息:

   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)])
gojuced7

gojuced71#

使用Predictor的时候 尝试把batch_size调小,或者打开config->EnableMemoryOptim()显存复用选项

dwthyt8l

dwthyt8l2#

为什么使用load_inference_model的方式可以成功运行呢?
使用predictor相比这种方式有什么优点?

sczxawaw

sczxawaw3#

试了一下,打开EnableMemoryOptim后真的可以了!这个选项默认是关闭的,是基于什么考虑?打开之后效率会变差吗?

vyu0f0g1

vyu0f0g14#

不是load_inference_model的问题,应该时exe.run和predictor.run的区别。predictor在预测阶段做了很多优化,可能会导致显存的增长

wh6knrhe

wh6knrhe5#

显存复用和模型结构有关,对于部分模型可能没有效果,所以默认时关闭的。打开该选项不影响预测性能

wnvonmuf

wnvonmuf6#

为啥我刚刚测了一下发现exe.run要快一点点。。。

相关问题