BLS Triton 后端#

BLS 后端演示了如何使用进程内 C-API 在后端内部执行推理。此后端作为后端开发人员在 C++ 中实现他们自己的自定义管道的示例。对于 Python 用例,请参阅 Python 后端中的业务逻辑脚本部分。

bls 后端的源代码包含在 src 中。

  • backend.cc 包含主要的后端实现。此文件的内容不是 BLS 特定的。它仅包含任何后端实现都需要的标准 Triton 后端函数。BLS 逻辑在 TRITONBACKEND_ModelInstanceExecute 中通过代码行 bls_executor.Execute(requests[r], &responses[r]); 启动。

  • bls.h 是此示例的 BLS(类 BLSExecutor)所在的位置。您可以参考此文件,了解如何与 Triton 进程内 C-API 交互以构建自定义执行管道。

  • bls_utils.h 是所有不依赖于 BLS 的实用程序所在的位置。

源代码包含详细的文档,描述了后端的运行以及 Triton 后端 APITriton 服务器 API 的使用。在阅读源代码之前,请确保您理解与 Triton 后端抽象 TRITONBACKEND_BackendTRITONBACKEND_ModelTRITONBACKEND_ModelInstance 相关的概念。

bls 后端将在 ‘addsub_python’ 和 ‘addsub_tf’ 模型上发送两个请求。在推理请求完成后,此后端将从 ‘addsub_python’ 中提取 OUTPUT0,并从 ‘addsub_tf’ 模型中提取 OUTPUT1,以使用这些张量构建最终的推理响应对象。

为了简化此示例,有一些自我施加的限制

  1. 此后端不支持批处理。

  2. 此后端不支持解耦模型。

  3. 此后端不支持 GPU 张量。

  4. 模型配置应严格按照 backend.cc 中注释的描述进行设置。

您可以实现您自己的自定义后端,而不受上述限制的约束。

构建 BLS 后端#

backends/bls/CMakeLists.txt 显示了 Triton 后端的推荐构建和安装脚本。构建和安装与 构建 Minimal 后端 中所述相同。

运行带有 BLS 后端的 Triton#

在将 bls 后端添加到 Triton 服务器后(如 后端共享库中所述),您可以运行 Triton 并使其加载 model_repos/bls_models 中的模型。假设您已通过将 bls 后端添加到 Triton 创建了 tritonserver Docker 镜像,则以下命令将运行 Triton

$ docker run --rm -it --net=host -v/path/to/model_repos/bls_models:/models tritonserver --model-repository=/models

控制台输出将显示类似于以下内容,表明来自 bls_models 仓库的 bls_fp32addsub_pythonaddsub_tf 模型已正确加载。

I0616 09:34:47.767433 19214 server.cc:629]
+---------------+---------+--------+
| Model         | Version | Status |
+---------------+---------+--------+
| addsub_python | 1       | READY  |
| addsub_tf     | 1       | READY  |
| bls_fp32      | 1       | READY  |
+---------------+---------+--------+

测试 BLS 后端#

clients 目录包含示例客户端。bls_client Python 脚本演示了向 bls 后端发送推理请求。在 Triton 按照运行带有 BLS 后端的 Triton 中所述运行的情况下,执行客户端

$ clients/bls_client

您应该看到类似于以下输出的输出

INPUT0 ([0.42935285 0.51512766 0.43625894 ... 0.6670954  0.17747518 0.7976901 ]) + INPUT1 ([6.7752063e-01 2.4223252e-01 6.7743927e-01 ... 4.1531715e-01 2.5451833e-01 7.9097062e-01]) = OUTPUT0 ([1.1068735  0.75736016 1.1136982 ... 1.0824126  0.4319935  1.5886607 ])
INPUT0 ([0.42935285 0.51512766 0.43625894 ... 0.6670954  0.17747518 0.7976901 ]) - INPUT1 ([6.7752063e-01 2.4223252e-01 6.7743927e-01 ... 4.1531715e-01 2.5451833e-01 7.9097062e-01]) = OUTPUT1 ([-0.24816778  0.27289516 -0.24118033 ... 0.25177827 -0.07704315  0.00671947])

PASS