我有一个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进行推理。 ...
似乎每次调用推理时,您的模型都会加载。有时,模型加载是内存和耗时的过程,因此,如果经常这样做,可能会面临内存泄漏。