一、为啥用triton?

之前部署使用过tensorrt+视频流硬解码+前后处理硬件(cuda)加速,已经是工业化、商业化的一套标准流程了,现在面临的挑战是:

多模型管理(一个小公司所有算法工程师的模型推理都在我这)、多机多卡(如何统一调度)、最大化硬件资源利用(需要保证硬件吞吐量达到高水准)等等;

如果还是用之前的标准流程,其实也能够做到这些,比如多模型管理,每个模型独立作为一个进程启动即可达到类似效果(我感觉这样搞类似GPU的MPS技术,triton内部多模型启动也是多进程模型),还比如多机多卡,像triton的配置文件config.pbtxt里面一样,是需要指定GPU和GPU id,这些在即使没有triton也是可以手动做到的,还有提高吞吐量,自己写grpc服务调度策略去配合模型多实例部署也是能够做到。

但是以上这些每次都自己手动搞还是太麻烦了,自己写框架的话,那为啥不用现成的triton呢,而且这东西这么火,学会用了对自己百利无一害,现在tensorrt开源模型github代码太多了,很多垃圾程序员网上搜搜例子都能用了,但是目前triton模型开源github还不太多,致力于更高效的C++ Cuda backend的triton推理服务更是奇珍异兽,也算是一种门槛了吧。

此外,triton除了能够满足上述几个挑战,还有很多其他的优点或者是方便使用的东西:

比如动态batch以提高吞吐、支持tf\pytorch\onnx\tensoort等框架的模型、提供性能分析工具(如perf_analyzer、model_analyzer)等等(这个等等的内容可以去网上查triton的内容,目前其实很多都是讲理论部分,理论部分也基本都会讲triton的优势)。

二、安装

对于triton的使用,官方建议刚入门的用docker来跑triton,NVIDIA官方的NGC里面有官方编译好的镜像;如果你不用docker,那么自己编译吧,去参考官网教程,为了减少心智负担,我选择docker这条路。

我后面一些列博客都会以2023.12的triton版本作为我的使用版本,我的测试硬件是cpu为i7-8750,显卡gtx-1060,系统为ubuntu20.04;

2.1、首先是安装docker

可以参考教程https://developer.aliyun.com/article/762674中的步骤来安装

sudo apt update
sudo apt install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io
sudo systemctl status docker
sudo apt-mark hold docker-ce
sudo docker container run hello-world

2.2、然后我们用docker拉取triton的镜像之前

需要按照https://docs.nvidia.com/ngc/gpu-cloud/ngc-catalog-user-guide/index.html#registering-activating-ngc-account里面的教程,打开https://ngc.nvidia.com/setup/api-key网址生成一个api key;样式类似于下面:

Username: $oauthtoken
Password: AjB2YXQzM2tpZGlranBib2dramJlbjRtbHM6MzMxYjY1ZWItNTAwYy00NTliLTg5NjYtNjc4NmRiMTM1YmZj

2.3、现在启动命令登录 “sudo docker login nvcr.io”,登录的账号和密码都是刚刚的api key,注意用户名有一个$开头的字符别忘记复制了,最后会出现Login Succeeded字样,就代表登录成功了;

2.4、拉取镜像,这里我用的是当时最新的是2023.12的版本,命令为:
 

sudo docker pull nvcr.io/nvidia/tritonserver:23.12-py3
sudo docker pull nvcr.io/nvidia/tritonserver:23.12-py3-sdk

2.5、最后查看镜像,命令为:

sudo docker images

三、跑官方例子

官方github上的测试例子,见https://gitee.com/luo_zhi_cheng/triton-server的“Serve a Model in 3 Easy Steps”

3.1、拉取代码和下载测试模型

git clone -b r23.12 https://gitee.com/luo_zhi_cheng/triton-server
cd triton-server/docs/examples
./fetch_models.sh

3.2.1、用docker运行 tritonserver

使用命令

sudo docker run --gpus=0 --rm --net=host -v ${PWD}/model_repository:/models nvcr.io/nvidia/tritonserver:23.12-py3 tritonserver --model-repository=/models

如果看到“Started GRPCInferenceService at 0.0.0.0:8001”和类似的其他端口启动成功,然后模型的Status都是READY状态,说明tritonserver启动没问题;

还有一个方式可以看服务是否启动成功,通常是客户端来使用的,命令为:

curl -v localhost:8000/v2/health/ready

其中localhost改成服务器的ip,8000改成你需要查看的端口;

对docker run命令不熟悉,见https://www.php.cn/faq/493631.html,也可以在终端输入docker run --help查看相关选项;docker run [OPTIONS] IMAGE [COMMAND] [ARG...],其中--rm是容器在退出时,自动清除挂在的卷,以便清除数据;-v是将本地目录挂载到容器目录中;

3.2.2、运行时遇到的问题

问题1、遇到一个关于显卡驱动的问题,需要更新一下驱动,执行以下命令即可,tritonserver:23.12-py3镜像是545或者更高版本生成的,用以下命令:

sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt-get update
sudo apt-get install nvidia-driver-545

问题2、未安装nvidia-container-runtime,参考https://blog.csdn.net/li4692625/article/details/123015840,执行以下命令:

distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
sudo apt-get update
sudo apt-get install nvidia-container-toolkit
sudo systemctl restart docker

3.3、发送推理请求

新开一个终端用于推理,命令如下:

sudo docker run -it --rm --net=host nvcr.io/nvidia/tritonserver:23.12-py3-sdk /workspace/install/bin/image_client -m densenet_onnx -c 3 -s INCEPTION /workspace/images/mug.jpg

得到返回结果为以下即可:

# Inference should return the following
Image '/workspace/images/mug.jpg':
    15.346230 (504) = COFFEE MUG
    13.224326 (968) = CUP
    10.422965 (505) = COFFEEPOT

四、推荐视频

最后推荐一定要看官方的视频,毕竟还是有一定权威性,并且也适合入门,建议不止看一遍,看一遍之后再自己动手,再回来看会有更多感悟。

NVIDIA英伟达的个人空间-NVIDIA英伟达个人主页-哔哩哔哩视频

Logo

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

更多推荐