[Triton课程笔记] 2.2.1 Python Backend
吐槽一下,英伟达的分视频真的有病,感觉是按照时长硬切,没什么逻辑。
一、大纲
两大部分:
- Python Backend
- Business Logic Scripting(BLS)
二、回顾
三、python backend
3.1 为什么需要python backend
- 预处理、后处理一般用python;
- 已经用python写好的处理单元,需要放Triton上去;
- 比C++的更容易实现,无需编译;
3.2 工作原理
组件:
- Python backend(C++)为代理;
- Python model(Python)才是真正需要实现的东西,由进程进行管理;
- 两者通过共享内存进行通信;
通信:
- Health flag:标志Python stub process是否是否健康;
- Request MessageQ:消息队列,用来从Python Backend传数据到Python stub process去运行;
- Response MessageQ:消息队列,用来将Python stub process运行完的结果传输给Python Backend;
3.3 如何实现Python Backend
实现三个关键接口:
- initialize:初始化操作;
- excute:执行操作;
- finalize:销毁操作;
3.4 简单例子
例子1 使用onnxruntime推理:
使用Python Backend 通过onnxruntime去运行Resnet50模型;
例子2,使用pytorch进行处理:
在Python Backend中调用pytorch。
需要先将pb Tensor 转为 pytorch Tensor;
处理完后,再把pytorch Tensor转回pb Tensor;
3.5 PB Tensor Placement
PB Tensor Placement究竟是放GPU还是GPU上?
- 传给Python backend的Tensor默认复制到CPU上;
- 如果需要保持在GPU上,需要在config文件中设置参数:
- parameters:{ key: "FORCE_CPU_ONLY_INPUT_TENSORS" value: {string_value: "no"}}
- 如何查看tensor Placement是否在cpu上:
- pb_utils.Tensor.is_cpu()
本文版权归作者(https://www.cnblogs.com/harrymore/)和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,如有问题, 可邮件(harrymore@126.com)咨询.