想把一个 pytorch 的项目做成网络服务,每次都要 load 一个很大的 model 会不会开销太大?

2020-09-25 10:08:50 +08:00
 kisshere

torch 新手,想把自己的一个 torch 项目做成网络服务,如果每一个用户每请求一次,都要加载一个几百兆的 model,时间耗时长不说,而且用户多的时候会不会内存很快撑爆?我设想的是可不可以让这个 model 常驻内存,不用每次都 torch.load(model), 或者还有没有其他好的方法?

1764 次点击
所在节点    程序员
6 条回复
mikumkf
2020-09-25 10:12:05 +08:00
当然可以啊,把模型提前 load 好,然后每次相应请求做 forward 。不过更好的方案是可以考虑 torchserver 或者 tensorflow 的 server 套件
czdpzc
2020-09-25 10:35:46 +08:00
可以的,PyTorch 官方 tutorials 有提到使用 Flask 实现一个简单的 Web 应用。你可以在 Flask 初始化 app 的时候预就把 model 加载好。
https://pytorch.org/tutorials/intermediate/flask_rest_api_tutorial.html
jdhao
2020-09-25 10:37:36 +08:00
启动的时候就加载好模型,这个只需要一次,为啥每个请求都要加载?后续请求的时候,模型只要做 forward 就可以了。
nonduality
2020-09-25 15:52:34 +08:00
用 RPC Server 把模型 run 起来,常驻后台,网络请求进来后用 RPC 转发到 RPC server
minami
2020-09-25 18:54:10 +08:00
model 写成全局变量,inference 时检查下 model 是否是 None,None 的话就 load 一下
SmiteChow
2020-09-27 09:38:43 +08:00
全局变量+锁即可

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/710309

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX