torch 新手,想把自己的一个 torch 项目做成网络服务,如果每一个用户每请求一次,都要加载一个几百兆的 model,时间耗时长不说,而且用户多的时候会不会内存很快撑爆?我设想的是可不可以让这个 model 常驻内存,不用每次都 torch.load(model), 或者还有没有其他好的方法?
1
mikumkf 2020-09-25 10:12:05 +08:00
当然可以啊,把模型提前 load 好,然后每次相应请求做 forward 。不过更好的方案是可以考虑 torchserver 或者 tensorflow 的 server 套件
|
2
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 |
3
jdhao 2020-09-25 10:37:36 +08:00 1
启动的时候就加载好模型,这个只需要一次,为啥每个请求都要加载?后续请求的时候,模型只要做 forward 就可以了。
|
4
nonduality 2020-09-25 15:52:34 +08:00
用 RPC Server 把模型 run 起来,常驻后台,网络请求进来后用 RPC 转发到 RPC server
|
5
minami 2020-09-25 18:54:10 +08:00
model 写成全局变量,inference 时检查下 model 是否是 None,None 的话就 load 一下
|
6
SmiteChow 2020-09-27 09:38:43 +08:00
全局变量+锁即可
|