PaddlePaddle/PaddleNLP

[Question]: Taskflow文本抽取结束后显存越积越多,应该如何释放

bitChill opened this issue · 3 comments

请提出你的问题

代码示例:
uie1 = Taskflow("information_extraction", schema=schema_3bert_1, max_length=32, task_path=task_path1)
uie1("请推荐拉伸强度170,冲击10的材料")

执行前显存:
+---------------------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID
| 0 N/A N/A 23341 C python3 2764MiB |
+---------------------------------------------------------------------------------------+

执行后显存:
+---------------------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID
| 0 N/A N/A 23341 C python3 4422MiB|
+---------------------------------------------------------------------------------------+

问题:只有当进程结束后,显存才能被释放,有没有方法可以不结束进程也可以释放显存

可以显式的使用下面的API:

https://www.paddlepaddle.org.cn/documentation/docs/zh/api/paddle/device/cuda/empty_cache_cn.html#paddle.device.cuda.empty_cache

hint:

大多数情况下您不需要使用该函数,当您删除 GPU 上的 Tensor 时,Paddle 框架并不会将显存释放,而是将显存保留起来,以便在下一次申明显存时可以更快的完成分配。

可以显式的使用下面的API:

https://www.paddlepaddle.org.cn/documentation/docs/zh/api/paddle/device/cuda/empty_cache_cn.html#paddle.device.cuda.empty_cache

hint:

大多数情况下您不需要使用该函数,当您删除 GPU 上的 Tensor 时,Paddle 框架并不会将显存释放,而是将显存保留起来,以便在下一次申明显存时可以更快的完成分配。

感谢解答,加上这个语句后,确实显存的占用速度变慢了,但还是上升后还是释放不了。比方就是:之前问100个问题占用的是5000MB,加上了之后占用是3800M,但是这个3800不会释放显存还是回不到100个问题之前的大小

推荐使用fastdeploy做服务化部署。

https://github.com/PaddlePaddle/FastDeploy/tree/develop/examples/text/uie

我搜了一下历史,可以参考:

PaddlePaddle/Paddle#52011
PaddlePaddle/Paddle#54852