1 推理系统架构
整体上推理服务分为客户端、服务端,对应图中client、server。这里主要分析服务端架构。
推理服务系统必须是一个k8s集群,原因是推理服务系统中每个小服务需要生命周期管理、弹性扩容、自动运维(运维、编排)。
推理服务系统组成:
- 负载均衡:局部服务inference会启动很多个实例,LB负责均衡分配请求到inference服务;
- 模型仓库:管理模型权重文件和模型输入输出;
- metric sevice:观测模型宏观、微观数据
- inferenc server:推理服务,负责单节点推理服务。
- 支持异构:cpu、gpu、tpu等
- 支持多框架:tensorrt engine、pytorch等
推理系统相关几个概念:
- K8S Cluster: 推理服务的数据中心侧,多节点、多卡、多个triton inference容器组成的集群;
- Triton: 单节点推理服务(单GPU卡或多卡,typically within one container as a service);
- TensorRT: 加速库,library
2 Triton inferenc架构
triton推理服务基本功能:
- 支持多推理框架(TensorFlow、Pytorch、TensorRT、OnnxRT、custom backends)
- 支持异构 CPU、GPU、multi-GPU
- 并行推理(CPU角度)
- 支持http、grpc APIs
- 能集成到k8s集群,监控、弹性伸缩
- 模型管理,加载、卸载、更新
- 使用友好,NGC容器镜像仓库
scheduler模块:推理服务请求队列调度(不是进程、线程调度)
3 Triton如何设计
从推理生命周期,考虑推理服务的设计思路
- 支持多框架:调用不同框架backends,backends核心思想:推理服务软件和深度学习框架解耦合方式。
- 基本功能
- 管理backends
- 模型管理
- 并发模型推理(多线程角度)
- 推理服务队列分发和调度
- 推理服务生命周期管理(推理请求管理、推理结果管理)
- GRPC相关
从模型角度,考虑推理服务的设计思路
- 单一简单模型:例如CV模型
- 组队模型,pipline
- 有状态的模型:推理依赖之前状态,例如NLP