当前位置:   article > 正文

tritonserver学习之二:tritonserver编译_triton-inference-server gpu环境完美编译

triton-inference-server gpu环境完美编译

tritonserver学习之一:triton使用流程

tritonserver学习之三:tritonserver运行流程

tritonserver学习之四:命令行解析过程

tritonserver学习之五:backend实现机制

tritonserver学习之六:自定义c++、python custom backend实践  

tritonserver学习之七:cache管理器

tritonserver学习之八:redis_caches实践

tritonserver学习之九:tritonserver grpc异步模式

1. 编译脚本生成流程

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的执行流程如下:

2、编译执行流程

编译执行的入口文件为docker_build:

  1. #!/usr/bin/env bash
  2. #
  3. # Docker-based build script for Triton Inference Server
  4. #
  5. # Exit script immediately if any command fails
  6. set -e
  7. ########
  8. # Create Triton base build image
  9. # This image contains all dependencies necessary to build Triton
  10. #
  11. cd /root/tritonserver/server
  12. 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 .
  13. ########
  14. # Run build in tritonserver_buildbase container
  15. # Mount a directory into the container where the install
  16. # artifacts will be placed.
  17. #
  18. if [ "$(docker ps -a | grep tritonserver_builder)" ]; then docker rm -f tritonserver_builder; fi
  19. docker run -w /workspace/build --name tritonserver_builder -it -v /var/run/docker.sock:/var/run/docker.sock tritonserver_buildbase ./cmake_build
  20. docker cp tritonserver_builder:/tmp/tritonbuild/install /root/tritonserver/server/build
  21. docker cp tritonserver_builder:/tmp/tritonbuild/ci /root/tritonserver/server/build
  22. ########
  23. # Create final tritonserver image
  24. #
  25. cd /root/tritonserver/server
  26. docker build -t tritonserver -f /root/tritonserver/server/build/Dockerfile .
  27. ########
  28. # Create CI base image
  29. #
  30. cd /root/tritonserver/server
  31. docker build -t tritonserver_cibase -f /root/tritonserver/server/build/Dockerfile.cibase .

执行流程如下:

3、执行编译

编译机器:pc机,ubuntu2004,显卡:gt1660ti

执行编译的过程需要占用大量的硬盘,大概55-60G左右,执行本次编译的build.py脚本代码如下:

编译过程耗时大概3个小时左右,整个编译还是有很大的优化空间的,思路上就是将三方依赖提前下载后,并打包到基础镜像中,这样编译耗时应该是可以降下来的。

       编译完成后,会生成tritonserver_buildbase镜像,这个就是用来编译的镜像,可以修改以下build.py,我们直接使用这个作为基础镜像,系统依赖可以不用重复下载,编译的效率可以持续的进行优化。

4、新探索

为了降低编译耗时,因此还是按照上面说的思路,先构建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

这个命令的含义为(来自文心一言):

  1. 这个命令是一个 docker run 命令,用于启动一个新的 Docker 容器。我会为你逐一解释这个命令的各个部分:
  2. docker run: 这是 Docker 的基本命令,用于从指定的镜像创建并启动一个新的容器。
  3. -it: 这是两个参数的组合。
  4. -i 表示交互模式,让你可以与容器进行交互。
  5. -t 为容器分配一个伪终端或终端,这使得你可以像在常规终端中一样与容器进行交互。
  6. --rm: 这个标志表示当容器退出时,自动删除该容器。这是一个很好的做法,特别是当你不需要保留容器历史或持久数据时。
  7. -v /var/run/docker.sock:/var/run/docker.sock: 这是一个 volume 挂载指令,它挂载了宿主机的 /var/run/docker.sock 到容器的相同位置。这意味着容器可以与宿主机上的 Docker守护进程通信。
  8. -v /home/liupeng/study/triton/server:/workspace: 这是另一个 volume 挂载指令。它将宿主机的 /home/liupeng/study/triton/server 目录挂载到容器的 /workspace 目录。这意味着容器内的 /workspace 目录将反映宿主机上的相应目录的内容。
  9. tritonserver_buildbase: 这是你要运行的 Docker 镜像的名称。
  10. bash: 这是在容器内部启动的命令。在这里,它启动了 bash shell。
  11. 综上所述,这个命令的目的是从 tritonserver_buildbase 镜像启动一个新的 Docker 容器,并在容器内启动 bash shell。同时,该容器与宿主机上的 Docker守护进程通信,并使用宿主机上的 /home/liupeng/study/triton/server 目录作为其工作空间。

执行编译的耗时大约在1个小时,没有具体统计,backend只编译了以下几个:

  1. all_backends = [
  2. "ensemble",
  3. # "identity",
  4. # "square",
  5. # "repeat",
  6. "tensorflow",
  7. # "onnxruntime",
  8. "python",
  9. # "dali",
  10. "pytorch",
  11. # "openvino",
  12. # "fil",
  13. # "tensorrt",
  14. ]

编译pytorch/tensorflow是在镜像中进行的,所以编译完成后,会新生成两个镜像:

启动成功了,太棒了:

编译成功一次后,会有缓存,只修改triton的代码进行编译,相对来说编译会很快,一次大概15分钟。

小窍门:制作tritonserver_build完成后,启动镜像时,把本地的代码映射进去,就可以随时修改,随时编译,比较方便。

制作好的tritonserver_build镜像,托管到了阿里云的平台:registry.cn-beijing.aliyuncs.com/mianhuatang-liupeng/triton,大家可自取。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/351817
推荐阅读
相关标签
  

闽ICP备14008679号