如何使用cherrypy和pytorch调试python中的内存泄漏

问题描述 投票:0回答:1

我有一个cherripy python应用程序,它最终吞噬了我所有的RAM。如何调试内存泄漏?

我有一个pytorch模型,并将其包装到cherrypy中以提供简单的rest-api进行推理。

cherrypy.tree.mount(MyServer(), '/')
cherrypy.config.update({
    'server.socket_port': 8080,
    'server.socket_host': "0.0.0.0",
    'server.thread_pool': 30,
    'log.access_file': "access1.log",
    'log.screen': True
})
try:
    cherrypy.engine.start()
    cherrypy.engine.block()
except KeyboardInterrupt:
    cherrypy.engine.stop()

Myserver is

class MyServer(object):
    @cherrypy.expose
    def index(self):
        return "healthy"

    @cherrypy.expose('/inference')
    def inference(self):
        cl = cherrypy.request.headers['Content-Length']
        rawbody = cherrypy.request.body.read(int(cl))
        body = json.loads(rawbody)

        result = doSomePyTorchStuff(body)

        return json.dumps(result)

最初,该应用需要大约800mb的内存,主要是将一些二进制文件(经过预先训练的模型)存储到内存中。每次收到新请求时,内存使用量都在不断增长,两天后,该应用程序占用了我GPU上的全部14G内存,什么都不做!

我在CPU而不是GPU上运行时看到相同的结果。 23G容易消耗,甚至更快。我确实在docker容器中运行我的应用程序,但是如果不使用它运行,结果是一样的-内存不断消耗。

有人能指出我正确的方向吗?目前,我无法缩小问题的范围,甚至不确定是cherrypy还是pytorch,还是其他原因。

我有一个cherripy python应用程序,它最终吞噬了我所有的RAM。如何调试内存泄漏?我有一个pytorch模型,并将其包装到cherrypy中,以提供简单的rest-api进行推理。 ...

python docker memory-leaks pytorch cherrypy
1个回答
0
投票

似乎每次调用推理时,您的模型都会加载。有时,模型加载是内存和耗时的过程,因此,如果经常这样做,可能会面临内存泄漏。

© www.soinside.com 2019 - 2024. All rights reserved.