一、开发环境准备工作
1、进入终端后,不显示工作目录,输入命令bash
2、打开vscode,不能远程notebook
上传vscode-server;
apt install openssh-server
service ssh restart
3、密码不对,拒绝访问
cd /
passwd
4、2080 容器镜像使用triton_runtime_20210406 或 triton_lhh
3090 tritonobjlhh3090 tritonlhh2
二、模型转换
1、对于标牌检测和交通灯的模型, 需要进入到 convert_onnx_script 文件夹先把 pytorch 模型转为 onnx,在转换为tensorrt模型替换掉挂载的模型
cd /root/work/TRITON_UNIVERSE_ALL/plan_build_script/light_yolov4/convert_onnx_script
python3 demo_darknet2onnx.py model.cfg model.weights sample_img.jpg 1
cd ..
mv convert_onnx_script/model_1_3_896_896.onnx ./model.onnx
make -j20
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:./plugin
./yolov4_builder
得到一个 model.plan 文件, 把这个文件替换掉原来挂载的 .plan 文件即可
2、执行./yolov4_builder
报错
/yolov4_builder: error while loading shared libraries: libyolov4Plugin.so: cannot open shared object file: No such file or directory
加上export LD_LIARARY_PATH=$LD_LIBRARY_PATH:./plugin
,解决,成功执行:
3、把项目里转换得到的最新模型,替换到本地的tritonobjectdet/model的对应要素里,同时替换notebook model_new里面的模型和类别文件
总结一下,先把要更新的权重网络类别文件替换到plan_build_script
模型转换成功后,替换model_new里面的,这里可以直接执行copy_weight.py
测试没问题,替换本地的
三、项目编译
按照how_run.md里面一步步执行
1、删除
删除的东西都在builddir里面
cd TRITON_UNIVERSE_ALL
cd triton_universe
cd builddir
rm cmake_install.cmake CMakeCache.txt
rm -r ./hiredis/src ./hiredis/tmp
rm -r ./libco/src ./libco/tmp ./libevent/src ./libevent/tmp
rm -r ./libevhtp/src ./libevhtp/tmp ./opencv/src ./opencv/tmp
rm -r ./trtis/src ./trtis/tmp
rm ./trtis/cmake_install.cmake ./trtis/CMakeCache.txt
2080和3090环境互换的时候,必须执行这一步,否则会编译报错
2、编译
确认是否在 triton_universe/builddir目录下
cmake ../build
make -j4
3、添加环境变量
cd trtis/install/bin
export ...
export ...
四、发版之前测试在线服务
1、清理缓存
不然可能会影响服务的运行
cd /root/work/TRITON_UNIVERSE_ALL
ll
find ./ -name ".ipynb_checkpoints" | xargs rm -rf
2、确认路径
确认config.json和model_new相对路径是否正确
3090的config.json可以设置到150,2080ti可以设置70
3、执行文件
(1) 启动一个在线服务
cd /root/work/TRITON_UNIVERSE_ALL/triton_universe/builddir/trtis/install/bin
./triton_objectdet -c ../../../config.json -m ../../../../../model_new/
遇到错误Segmentation fault(core dumped)
解决方法,有可能是批量和在线服务的参数没有设置正确:
在/root/work/TRITON_UNIVERSE_ALL/triton_universe/src/servers/main.cc
里104行,更改为在线模式
bool ONLINE_OR_BATCH = true
更改完一些源文件之后,记得在/root/work/TRITON_UNIVERSE_ALL/triton_universe/builddir
下重新编译
make
成功启动在线服务后,处于监听请求的状态:
1、有时候notebook中断重启之后,直接执行可执行文件会报错:libtrttonserver.so:cannot open shared object file:No such file or directory
,则需要重新执行export改变环境变量的那两条命令
2、有时候类别数修改了,对应要素的config.pbxt里也要修改,特别是model_new里面的,一般报错维度不符,都是这个原因
(2) 执行在线服务脚本
cd /root/work/TRITON_UNIVERSE_ALL/py_script
python client_script.py
这里设置的是要推理的要素和存放的地址键值
生成的结果:
可视化结果:
注意:只有键值名一致,才会有结果。
如果类别名字不对,记得修改类别文件,本地别忘了一起修改,修改之后,重新启动服务,重新测试,重新确认结果
五、本地项目内容修改
1、修改可执行文件和模型
部署修改bin文件夹下的可执行文件
lib不要动
model里面是所有需要用到的模型
回到上一级,把Dockerfile和文件夹打包成下面的tar包,这个包即为下一步部署发布里需上传的镜像
2、其他
(1)模型文件备注
delineator是轮廓标,detection_ensemble是triton的统一模型管理配置文件,且里面只有一个配置文件,sign_post_ensemble是标牌后分类的推理配置文件。
(2)可执行文件备注
这个可执行文件正是上一步,编译整个项目得到的。
编译之后的可执行的triton_objectdet在哪个目录下呢?
/root/work/TRITON_UNIVERSE_ALL/triton_universe/builddir/trtis/install/bin/triton_objectdet
(3)类别文件
这两个是一样的
六、发布新服务
1、点击部署发布,可能需要专门建立一个Triton的工作空间
2、新建部署任务
3、参数如下,新建推理环境
名称port 端口应该是8797
4、上传镜像压缩包
七、发布之前的自测
在部署成功之后,需要用postman自测一下
记得加上token
成功之后会返回0
八、代码
1、源码
branch 是 20.08 不是 master,这个代码的主干就是
初始化 server(505~570)行
从 server 处获取 simple 这个模型的相关信息, simple 这个模型接受两个 {1,16} 维度的向量作为输入, 输出两个向量的和以及两个向量的差(572~637行)
创建一个 irequest 对象, 将这个对象的输入输出初始化(639~690行)
将两个 input 的值拷贝到 irequest 对象上(692~765行)
执行 infer 并等待 infer 完成(767~797行)
改变输入数据, 重新执行 infer(799~840行)
再次改变输入, 重新执行 infer(843~884行)
删除之前创建的结构体, 终止进程(886~892行)
2、模型判别阈值的修改![在这里插入图片描述](https://img-blog.csdnimg.cn/baeb05a90d7e4e3fbd57b1b36db28a34.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/17f181999ce0440a87d11730b0721914.png)
九、测试批量服务
1、打开批量服务的开关
/root/work/TRITON_UNIVERSE_ALL/triton_universe/src/servers/main.cc,第104行:
bool ONLINE_OR_BATCH = false;
2、重新编译,重新导入环境变量
确认目录 /root/work/TRITON_UNIVERSE_ALL/triton_univers/builddir
make -j4
cd trtis/install/bin
export
export
3、执行批量服务
运行py_script中的write_redis.py,生成src_provider与dst_provider
导入src_provider与dst_provider
export
export
./triton_objectdet -c ../../..config.json -m ../../../../../model_new/