javaweb项⽬部署pytorch模型⽅案探索
⼀、背景
使⽤pytorch做模型训练,训练完成后想集成到java web项⽬中。同时整体项⽬后续也会做离线环境的前场化部署。因此,想寻求⼀种部署简单的⽅案。
⼆、⽅案探索
1. 使⽤java部署推理模型
1.1 资料:
1.2 实操:
将pytorch transformers模型顺利转成onnx格式
仍需要使⽤pytorch+transformers模型将⽂本转成onnx输⼊需要的tensor格式,最终还是要保留原模型以及onnx格式模型,两者差不多⼤。(我不确定原模型能不能⽤其他⽅法省略掉)
我⾃定义了将⽂本转成tensor的⽅法,改⽤java时需要⽤java重写⼀遍逻辑。(我没⽤java重写逻辑,这
个⽅案就没继续做下去,我不想维护训练和推理两套代码,还是不同的语⾔)
转成onnx格式确实加速了推理过程,⼤概提升了3倍左右。
1.3 总结:
原本设想的是将模型及推理过程封装成⼀个jar,直接调⽤,但训练过程⽤的是python,两套语⾔维护起来⽐较复杂。
后续我会继续探索原模型能不能省略掉。
2.pyinstaller打包python项⽬
1.1 资料:
pyinstaller官⽹:
1.2 实操:
pyinstaller命令打包项⽬代码及其依赖
python新建项目教程
可以通过shell命令或直接运⾏main.py
发现只能通过接收控制台输出的⽅式,获取模型结果。⽽且不能提前初始化模型,每次运⾏都得从初始化模型开始。
springboot对执⾏shell脚本的⽀持较差,且⽆法应⽤于多线程。(百度的,未验证过该说法)
1.3 总结:
pyinstaller⽐较适合项⽬需要打包成exe的场景,不太适合我的需求
3.docker打包项⽬
1.1 资料:
docker教程:
1.2 实操:
添加flask接⼝调⽤模型,实现还是⽐较简单的
将整个项⽬以及依赖打包成docker镜像
1.3 总结:
还是回到最开始的想法,将模型推理过程打包成⼀个服务,对外开放API接⼝
但⽬前公司内部没有使⽤docker,前场部署时还得格外安装⼀个docker,还得继续优化这个⽅案。(我个⼈推荐这个⽅案,他们会后悔的。。。)
4.python打包项⽬
1.1 资料:
pipreqs 类库:
1.2 实操:
⽤flask给项⽬安个接⼝
⽤pipreqs打包出项⽬的python依赖包
将依赖包连同代码⼀起打包到新机器,先安装python依赖,再运⾏python项⽬
1.3 总结:
总体类似于docker项⽬打包。但个⼈认为,如果项⽬多了之后不太好管理python依赖,还是推荐docker那种部署⽅式。
pipreqs打包依赖包会多打包⼀些类库(可能是打包整个python环境的依赖库),需要⼈⼯check

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。