Triton inference server自定义C++ backend流程
Triton inference server自定义C++ backend流程介绍
目录
1.2 backend/examples/backends/recommended/src/recommended.cc
1.3.2 修改backend/examples/backends/cumtchw/CMakeLists.txt
1 自定义C++backend
1.1 需要实现八个api
由前面的分析,我们要想实现一个自己的backend,那么需要实现那8个api,
-
TRITONBACKEND_Initialize
-
TRITONBACKEND_Finalize
-
TRITONBACKEND_ModelInitialize
-
TRITONBACKEND_ModelFinalize
-
TRITONBACKEND_ModelInstanceInitialize
-
TRITONBACKEND_ModelInstanceFinalize
-
TRITONBACKEND_ModelInstanceExecute
-
TRITONBACKEND_BackendControl
(可选)
1.2 backend/examples/backends/recommended/src/recommended.cc
在这个文件里面有英伟达给的参考demo相当于,然后如果我们想实现自己的后端,可以直接参考这个文件,然后我把这个recommanded.cc完整的看了一遍,我发现他这个文件大约有这些特点
- 实现了那8个api
- 还实现了一个class ModelState,表示一个模型级别的状态,负责加载模型配置(如
model_config.pbtxt
),管理模型的一些信息。 - 还实现了一个class ModelInstanceState,表示模型的每个实例,通常与推理执行相关联,负责处理具体推理请求。
- 里面包含了很多的英文注释进行了详细的说明
- 这个demo还不支持GPU的,只是cpu的。
- 很多函数基本都是只有基本框架,并没有真正完整具体功能,比如推理函数也没有模型推理,直接将输入的tensor赋值给了输出,这个demo就是用来讲清楚框架和流程。
1.3 定义自己的backend
这里我的backend名字命名为cumtchw(我的网名)
1.3.1 复制文件夹以及重命名文件
执行下面的命令
cp -drf backend/examples/backends/recommended backend/examples/backends/cumtchw
mv backend/examples/backends/cumtchw/src/recommended.cc backend/examples/backends/cumtchw/src/cumtchw.cc
mv backend/examples/backends/cumtchw/src/libtriton_recommended.ldscript backend/examples/backends/cumtchw/src/libtriton_cumtchw.ldscript
mv backend/examples/backends/cumtchw/cmake/TutorialRecommendedBackendConfig.cmake.in mv backend/examples/backends/cumtchw/TutorialCumtchwBackendConfig.cmake.in
1.3.2 修改backend/examples/backends/cumtchw/CMakeLists.txt
要把cmakelists.txt中的一些名字也都修改成cumtchw,为了加快速度,可以在vscode中当前文件中使用ctrl+h进行替换,替换的时候不要一次直接点全替换,要一个一个的确认进行替换,要是着急直接全替换后面出错了更耽误时间
-
triton-recommended-backend
→ 替换成triton-cumtchw-backend
-
triton_recommended
→ 替换成triton_cumtchw
-
recommended
→ 替换成cumtchw
-
TutorialRecommendedBackend
→ 替换成TutorialCumtchwBackend
1.3.3 编译
cd backend/examples/backends/cumtchw/
mkdir build
cd build/
cmake ..
报错
CMake Error at build/_deps/repo-common-src/CMakeLists.txt:48 (find_package):
Could not find a package configuration file provided by "RapidJSON" with
any of the following names:
RapidJSONConfig.cmake
rapidjson-config.cmake
用下面命令安装,
sudo yum install epel-release -y
sudo yum install rapidjson-devel -y
然后重新cmake以及make
cmake ..
make -j10
得到如下结果
1.3.4 模型目录名字、后端名字、后端SO库放哪里的问题
在https://github.com/triton-inference-server/backend 上面有文件夹目录的说明,
For a model, M that specifies backend B, Triton searches for the backend shared library in the following places, in this order:
<model_repository>/M/<version_directory>/libtriton_B.so
<model_repository>/M/libtriton_B.so
<global_backend_directory>/B/libtriton_B.so
解释一下就是,假设你有一个模型 M
,它在 config.pbtxt
里设置了
name:"M" #模型目录的名字
backend:"B" #后端的名字
Triton 会按如下顺序去相应的目录中找 libtriton_B.so
:
-
<model_repository>/M/<version_directory>/libtriton_B.so
-
<model_repository>/M/libtriton_B.so
-
<global_backend_directory>/B/libtriton_B.so
-
默认的
<global_backend_directory>
是:/opt/tritonserver/backends/
-
但可以用启动参数
--backend-directory
自定义
-
1.3.5 构建我的模型目录
首先在server/docs/examples/model_repository/下面新建cumtchw文件夹
在cumtchw文件夹下面新建一个1文件夹,也就是版本号文件夹
然后把我编译出来的libtriton_cumtchw.so库拷贝进去server/docs/examples/model_repository/cumtchw/
然后创建一个config.pbtxt,在里面写入如下内容,我其实就是修改了name和backend,其他的都没动。
name: "cumtchw"
backend: "cumtchw"
dynamic_batching {
max_queue_delay_microseconds: 5000000
}
input [
{
name: "IN0"
data_type: TYPE_INT32
dims: [ 4 ]
}
]
output [
{
name: "OUT0"
data_type: TYPE_INT32
dims: [ 4 ]
}
]
instance_group [
{
kind: KIND_CPU
}
]
然后目录下如
login cumtchw]$ tree
.
├── 1
│ └── libtriton_cumtchw.so
└── config.pbtxt
1 directory, 2 files
等会启动docker的时候把model_repository目录映射进去,这样我的cumtchw也就在里面了。
1.3.6 利用docker测试自定义的backend
在终端的examples路径下运行下面的命令
docker run --rm -it \
-p18000:8000 -p18001:8001 -p18002:8002 \
-v ${PWD}/model_repository:/models \
nvcr.io/nvidia/tritonserver:25.05-py3 \
bash
然后再运行
tritonserver --model-repository=/models
然后有如下结果
1.3.7 中间遇到的几个错误
上面几个步骤都是修改后的正确步骤,但是中间还遇到了几个错误。
Invalid model name: Could not determine backend for model 'cumtchw' with no backend in model configuration.
Expected model name of the form 'model.<backend_name>'.
这是刚开始只是创建了config.pbtxt,忘记在里面写东西了。
failed to load model 'cumtchw': at least one version must be available under the version policy of model 'cumtchw'
这个错误是因为最开始在cumtchw下面没有创建1文件夹作为版本文件夹。
| cumtchw | 1 | UNAVAILABLE: Unsupported: reshape not supported for input tensor
这是自定义的backend不支持reshape,所以修改config.pbtxt把这个reshape先去掉。
参考文献:
https://github.com/triton-inference-server/server
https://github.com/triton-inference-server/backend
https://github.com/triton-inference-server/backend/tree/main#backends
tritonserver学习之五:backend实现机制_triton backend-CSDN博客
tritonserver学习之三:tritonserver运行流程_trition-server 使用教程-CSDN博客
Triton Server 快速入门_tritonserver-CSDN博客
深度学习部署神器-triton inference server第一篇 - Oldpan的个人博客
tritonserver学习之六:自定义c++、python custom backend实践_triton c++-CSDN博客

欢迎来到由智源人工智能研究院发起的Triton中文社区,这里是一个汇聚了AI开发者、数据科学家、机器学习爱好者以及业界专家的活力平台。我们致力于成为业内领先的Triton技术交流与应用分享的殿堂,为推动人工智能技术的普及与深化应用贡献力量。
更多推荐
所有评论(0)