V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
kisshere
V2EX  ›  程序员

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

  •  
  •   kisshere · 2020-09-25 10:08:50 +08:00 · 1915 次点击
    这是一个创建于 1518 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    6 条回复    2020-09-27 09:38:43 +08:00
    mikumkf
        1
    mikumkf  
       2020-09-25 10:12:05 +08:00
    当然可以啊,把模型提前 load 好,然后每次相应请求做 forward 。不过更好的方案是可以考虑 torchserver 或者 tensorflow 的 server 套件
    czdpzc
        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
    jdhao
        3
    jdhao  
       2020-09-25 10:37:36 +08:00   ❤️ 1
    启动的时候就加载好模型,这个只需要一次,为啥每个请求都要加载?后续请求的时候,模型只要做 forward 就可以了。
    nonduality
        4
    nonduality  
       2020-09-25 15:52:34 +08:00
    用 RPC Server 把模型 run 起来,常驻后台,网络请求进来后用 RPC 转发到 RPC server
    minami
        5
    minami  
       2020-09-25 18:54:10 +08:00
    model 写成全局变量,inference 时检查下 model 是否是 None,None 的话就 load 一下
    SmiteChow
        6
    SmiteChow  
       2020-09-27 09:38:43 +08:00
    全局变量+锁即可
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4263 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 01:03 · PVG 09:03 · LAX 17:03 · JFK 20:03
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.