Triton Pipeines的实现方式及对比

本文对比介绍BLS和Ensemble两种实现TritonPipelines的方式,并对高性能部署Yolov5Tritonservice的Benchmark性能测试结果进行解读。BLS通过Python代码调用其他模型服务,适用于动态组合已部署模型;Ensemble则可以并行执行多个模型步骤,减少请求数量,提高整体性能。

部署yolov5 Triton Pipelines中,简单介绍了BLS和Ensemble这两种实现Triton Pipelines的方式,同时在高性能部署Yolov5 Triton service的Benchmark中,对两种Pipelines和All in TensorRT Engine的部署方式进行了性能测试,本文将对比介绍一下BLS和Ensemble, 同时对性能测试的结果进行解读。

相关代码链接

1. Python Backend

1.1 实现方式及结构

BLS是一种特殊的python backend,通过在python backend里调用其他模型服务来完成Pipelines。python backend的结构如下

请添加图片描述

  • 进程间通信IPC

    由于GIL的限制,python backend通过对每个model instance起一个单独的进程(python stub process(C++))来支持多实例部署。既然是多进程,那么就需要通过shared memory来完成python model instance和Triton主进程之间的通信,具体为给每个python stub process在shared memory里分配一个shm block, shm block连接python backend agent(C++)来进行通信。

  • 数据流向

    shm block通过Request MessageQResponse MessageQ调度和中转Input和Output, 上述两个队列均通过生产者-消费者模型的逻辑实现

    1. 发送到Triton server的request被python backend agent(C++)放到Request MessageQ
    2. python stub process从Request MessageQ取出Input, 给到python model instance执行完推理后,将Output放到Response MessageQ
    3. python backend agent(C++)再从Response MessageQ中取出Output,打包成response返回给Triton server主进程

    示例如下:

    responses = [
### Triton Inference Server 配置和实现动态批处理的方法 Triton Inference Server 提供了强大的动态批处理(Dynamic Batching)功能,通过将多个推理请求合并为一个批次,显著提高了 GPU 的利用率和推理吞吐量。动态批处理的实现依赖于模型配置文件 `config.pbtxt` 中的参数设置,用户可以根据模型特性进行定制化配置。 在模型配置中,启用动态批处理需要在模型定义中添加 `dynamic_batching` 字段。该字段允许指定最大批处理大小(`max_batch_size`),并控制是否启用批处理功能。例如: ```protobuf name: "resnet50" platform: "onnxruntime_onnx" max_batch_size: 32 dynamic_batching { max_queue_delay_microseconds: 10000 } input [ { name: "input" data_type: TYPE_FP32 dims: [3, 224, 224] } ] output [ { name: "output" data_type: TYPE_FP32 dims: [1000] } ] ``` 在上述配置中,`max_batch_size` 指定了单个批次的最大输入数量,而 `dynamic_batching` 块中的 `max_queue_delay_microseconds` 控制等待请求合并的最大延迟时间(单位为微秒)。Triton 会根据设定的延迟时间动态决定是否将当前队列中的请求合并执行[^1]。 除了基本的动态批处理配置,Triton 还支持更高级的批处理模式,例如不规则批处理(Ragged Batching)。不规则批处理允许输入张量的形状在某些维度上不一致,避免了显式填充(padding)操作。该功能通过在输入定义中设置 `allow_ragged_batch: true` 来启用: ```protobuf input [ { name: "input0" data_type: TYPE_FP32 dims: [16] allow_ragged_batch: true } ] ``` 这种配置方式适用于变长输入的场景,如自然语言处理中的文本序列,能够有效减少不必要的计算资源浪费[^4]。 此外,Triton 支持并发执行多个模型实例,进一步提升推理效率。用户可以在配置中为每个模型指定多个实例,并设置不同的优先级或资源分配策略。例如: ```protobuf instance_group [ { count: 2 kind: KIND_GPU } ] ``` 上述配置表示该模型将在 GPU 上运行两个并发实例,从而在高并发请求场景下提高整体吞吐能力[^3]。 Triton 的动态批处理功能不仅提升了推理性能,还为多模型流水线部署提供了支持。用户可以通过模型编排将多个模型串联成推理流程,并利用批处理机制优化整体推理效率。这种能力使得 Triton 成为大规模深度学习推理服务的理想选择[^2]。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值