赞
踩
tritonserver学习之三:tritonserver运行流程
tritonserver学习之六:自定义c++、python custom backend实践
tritonserver学习之八:redis_caches实践
tritonserver学习之九:tritonserver grpc异步模式
triton的编译脚本位于server代码库,文件为:
build.py
triton编译参数众多,很多参数也没搞清楚是什么用处,建议直接使用--enable-all参数,其他参数不设置,默认即可,但是这样操作也有一个不好,就是在不修改编译脚本的前提下,编译过程复杂,因此可以按需去修改一下代码,对编译进行一个裁剪,在修改、调试编译代码过程中,这里有个小窍门,运行build.py时,使用--dryrun参数,增加这个参数后,不会真正的执行编译,生成所有编译脚本后就会停止:
这样能大大提高调试效率,运行脚本后,会在当前文件夹下创建:build文件夹,并有5个新文件产生,分别为:cmake_build、docker_build、Dockerfile、Dockerfile.buildbase、Dockerfile.cibase,其中docker_build为执行编译过程的入口,整体build.py的执行流程如下:
编译执行的入口文件为docker_build:
- #!/usr/bin/env bash
-
- #
- # Docker-based build script for Triton Inference Server
- #
-
- # Exit script immediately if any command fails
- set -e
-
- ########
- # Create Triton base build image
- # This image contains all dependencies necessary to build Triton
- #
- cd /root/tritonserver/server
- docker build -t tritonserver_buildbase -f /root/tritonserver/server/build/Dockerfile.buildbase --pull --cache-from=tritonserver_buildbase --cache-from=tritonserver_buildbase_cache0 --cache-from=tritonserver_buildbase_cache1 .
-
- ########
- # Run build in tritonserver_buildbase container
- # Mount a directory into the container where the install
- # artifacts will be placed.
- #
- if [ "$(docker ps -a | grep tritonserver_builder)" ]; then docker rm -f tritonserver_builder; fi
- docker run -w /workspace/build --name tritonserver_builder -it -v /var/run/docker.sock:/var/run/docker.sock tritonserver_buildbase ./cmake_build
- docker cp tritonserver_builder:/tmp/tritonbuild/install /root/tritonserver/server/build
- docker cp tritonserver_builder:/tmp/tritonbuild/ci /root/tritonserver/server/build
-
- ########
- # Create final tritonserver image
- #
- cd /root/tritonserver/server
- docker build -t tritonserver -f /root/tritonserver/server/build/Dockerfile .
-
- ########
- # Create CI base image
- #
- cd /root/tritonserver/server
- docker build -t tritonserver_cibase -f /root/tritonserver/server/build/Dockerfile.cibase .

执行流程如下:
编译机器:pc机,ubuntu2004,显卡:gt1660ti
执行编译的过程需要占用大量的硬盘,大概55-60G左右,执行本次编译的build.py脚本代码如下:
编译过程耗时大概3个小时左右,整个编译还是有很大的优化空间的,思路上就是将三方依赖提前下载后,并打包到基础镜像中,这样编译耗时应该是可以降下来的。
编译完成后,会生成tritonserver_buildbase镜像,这个就是用来编译的镜像,可以修改以下build.py,我们直接使用这个作为基础镜像,系统依赖可以不用重复下载,编译的效率可以持续的进行优化。
为了降低编译耗时,因此还是按照上面说的思路,先构建tritonserver_build镜像,之后在该镜像中执行cmake_build脚本,其中:
制作tritonserver_build镜像(cpu版本)耗时:大概35分钟左右。
基础镜像构建完成后,进入镜像,执行cmake_build脚本,编译triton,当前最新版本2.41编译成功了,硬盘空间总占用50G左右,启动镜像命令如下:
docker run -it --rm -v /var/run/docker.sock:/var/run/docker.sock -v /home/liupeng/study/triton/server:/workspace tritonserver_buildbase bash
这个命令的含义为(来自文心一言):
- 这个命令是一个 docker run 命令,用于启动一个新的 Docker 容器。我会为你逐一解释这个命令的各个部分:
-
- docker run: 这是 Docker 的基本命令,用于从指定的镜像创建并启动一个新的容器。
-
- -it: 这是两个参数的组合。
-
- -i 表示交互模式,让你可以与容器进行交互。
- -t 为容器分配一个伪终端或终端,这使得你可以像在常规终端中一样与容器进行交互。
- --rm: 这个标志表示当容器退出时,自动删除该容器。这是一个很好的做法,特别是当你不需要保留容器历史或持久数据时。
-
- -v /var/run/docker.sock:/var/run/docker.sock: 这是一个 volume 挂载指令,它挂载了宿主机的 /var/run/docker.sock 到容器的相同位置。这意味着容器可以与宿主机上的 Docker守护进程通信。
-
- -v /home/liupeng/study/triton/server:/workspace: 这是另一个 volume 挂载指令。它将宿主机的 /home/liupeng/study/triton/server 目录挂载到容器的 /workspace 目录。这意味着容器内的 /workspace 目录将反映宿主机上的相应目录的内容。
-
- tritonserver_buildbase: 这是你要运行的 Docker 镜像的名称。
-
- bash: 这是在容器内部启动的命令。在这里,它启动了 bash shell。
-
- 综上所述,这个命令的目的是从 tritonserver_buildbase 镜像启动一个新的 Docker 容器,并在容器内启动 bash shell。同时,该容器与宿主机上的 Docker守护进程通信,并使用宿主机上的 /home/liupeng/study/triton/server 目录作为其工作空间。

执行编译的耗时大约在1个小时,没有具体统计,backend只编译了以下几个:
- all_backends = [
- "ensemble",
- # "identity",
- # "square",
- # "repeat",
- "tensorflow",
- # "onnxruntime",
- "python",
- # "dali",
- "pytorch",
- # "openvino",
- # "fil",
- # "tensorrt",
- ]
编译pytorch/tensorflow是在镜像中进行的,所以编译完成后,会新生成两个镜像:
启动成功了,太棒了:
编译成功一次后,会有缓存,只修改triton的代码进行编译,相对来说编译会很快,一次大概15分钟。
小窍门:制作tritonserver_build完成后,启动镜像时,把本地的代码映射进去,就可以随时修改,随时编译,比较方便。
制作好的tritonserver_build镜像,托管到了阿里云的平台:registry.cn-beijing.aliyuncs.com/mianhuatang-liupeng/triton,大家可自取。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。