triton教程1:前言、安装、跑官方例子与推荐视频

一、为啥用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 MUG13.224326 (968) = CUP10.422965 (505) = COFFEEPOT

四、推荐视频

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/613197.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GC6109——双通道5V低电压步进电机驱动芯片,低噪声、低振动,应用摄像机,机器人等产品中

GC6109是双通道5V低电压步进电机驱动器,具有低噪声、低振动的特点,特别适用于相机的变焦和对焦系统,万向节和其他精密、低噪声的STM控制系统。该芯片为每个通道集成了256微步驱动器。带SPl接口,用户可以方便地调整驱动器的参数。内…

SpringCloudAlibaba微服务架构实战派上下册技术交流!

另外我的新书RocketMQ消息中间件实战派上下册,在京东已经上架啦,目前都是5折,非常的实惠。 https://item.jd.com/14337086.html​编辑https://item.jd.com/14337086.html “RocketMQ消息中间件实战派上下册”是我既“Spring Cloud Alibaba微…

Nginx介绍与安装

目录 nginx服务 1、Nginx 介绍 2、为什么选择 nginx 3、IO多路复用 1、I/O multiplexing【多并发】 2、一个请求到来了,nginx使用epoll接收请求的过程是怎样的? 3、异步,非阻塞 4、nginx 的内部技术架构 5、yum安装部署nginx和配置管理 1.获取…

【Leetcode】242. 有效的字母异位词

【Leetcode】242. 有效的字母异位词 题目链接代码 题目链接 【Leetcode】242. 有效的字母异位词 代码 func isAnagram(s string, t string) bool {// 如果s串跟t串的长度不等,则一定为falseif len(s) ! len(t) {return false}// 创建map统计s串每个字符出现的个数…

spark相关

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、pandas是什么?二、使用步骤 1.引入库2.读入数据总结 前言 提示:这里可以添加本文要记录的大概内容: 例如:…

MySQL运维实战(3.3) 管理数据库(database)

作者:俊达 引言 数据库的创建和管理是构建可靠数据的关键,关系到所存储数据的安全与稳定。在 MySQL 这个强大的关系型数据库系统中,数据库的创建与管理需要精准的步骤和妥善的配置。下面,将深入探讨如何使用MySQL 来管理数据库&…

PHP企业物资管理系统源码带文字安装教程

PHP企业物资管理系统源码带文字安装教程 技术架构 主要框架 : PHP7.0 laravel5.4  mysql5.5.36 composer1.3.2(依赖管理) 前端 : jquery bootstrap jstree(树形结构) echart(图表) layer(弹出层) 企…

JavaScript递归技巧的前世今生:深入解析递归及其与堆栈的关系

🧑‍🎓 个人主页:《爱蹦跶的大A阿》 🔥当前正在更新专栏:《VUE》 、《JavaScript保姆级教程》、《krpano》 ​ ​ ✨ 前言 递归作为一种能够用简洁的方式定义复杂对象的编程技巧,在计算机科学中被广泛应用。它借助系…

OpenHarmony南向之LCD显示屏

OpenHarmony南向之LCD显示屏 概述 LCD(Liquid Crystal Display)驱动,通过对显示器上下电、初始化显示器驱动IC(Integrated Circuit)内部寄存器等操作,使其可以正常工作。 HDF Display驱动模型 LCD器件驱…

示例说明 Makefile 中的 $(@F),及其用法示例$$dir $@ $< $^ %.c

备忘一个不错的开源编辑器CudaText 下载网址: CudaText - Browse /release at SourceForge.net CudaText 主页: CudaText - Home 1,含义及验证 在 Makefile 中,$(F) 表示当前规则的目标文件名(不包括路径部分&…

都2024年了,FP卖家还不知道AB站怎么玩?

自从开始写FP独立站各种运营技巧和黑科技的文章,经常都会有朋友来私V,询问怎么进行AB站跳转。 可能是现在平台对于FP商家的限制越来越多,再加上如今到处都是“内卷”的电商环境,让FP商家生存越来越艰难,今天就着重讲一…

【踩坑】JDK1.8 AudioSystem 无法关闭流的问题

文章目录 一、前言二、开始狼人杀嫌疑人1:嫌疑人2: 三、复盘Jdk8原生bug解决方法和原理解析 一、前言 做了一个基于文字转语言的小接口,想删除本地wav文件来着,结果发现删除不了。 很明显被占用了,还是被Java占用了……

Linux内核源码分析(强烈推荐收藏!)

前言:Linux内核是由林纳斯托瓦兹(Linus Torvalds)在1991年开始开发的。当时他为了得到一个可以运行UNIX操作系统的个人计算机,开始编写一个操作系统内核,并将其命名为Linux。随后,越来越多的开发者加入到项…

【论文】:ALOHA双手远程操作手臂

对于机器人来说,诸如穿扎带或插入电池等精细操作任务是众所周知的困难,因为它们需要精确度、接触力的仔细协调以及闭环视觉反馈。执行这些任务通常需要高端机器人、精确的传感器或仔细的校准,这些可能既昂贵又难以设置。学习能否使用低成本且…

计算机组成原理之计算机硬件发展和计算机系统的组成

学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。各位小伙伴,如果您: 想系统/深入学习某技术知识点… 一个人摸索学习很难坚持,想组团高效学习… 想写博客但无从下手,急需…

算法第4版 第2章排序

综述:5个小节,四种排序应用,初级排序、归并排序、快速排序、优先队列 2.1.初级排序 排序算法模板,less(), exch(), 排序代码在sort()方法中; 选择排序:如升序排列,1.找到数组中最小的元素&am…

llama_index 创始人为我们展示召回提升策略(提升15%)

用句子向量替换为句子向量 句子检索,将句子转化为向量。在检索的过程中,假如句子命中,则将句子周围的内容也当做检索内容。 对比句子检索和之前的按块去做切分的检索。可以看到,内容的相关性提升了8%, 构建数据的时候…

如何利用ChatGPT快速生成月报?

随着每个月的结束,个人和团队经常需要编写月报来回顾和总结。这项任务通常消耗大量时间和精力。幸运的是,借助ChatGPT,这个过程可以变得更加简单和高效。接下来,我将详细介绍如何利用ChatGPT快速生成月报,从而帮助你节…

NSSCTF Interesting_include

开启环境: 通过审计,我们可知: flag在flag.php中,可以利用php中伪协议 payload:?filterphp://filter/readconvert.base64-encode/resourceflag.php 将其base64解码就是flag. NSSCTF{3dc54721-be9e-444c-8228-7133fba76ad4}

大数据系列之:腾讯云服务器性能和价格比较

大数据系列之:腾讯云服务器性能和价格比较 一、磁盘性能和价格比较二、高性能云硬盘三、ssd云硬盘四、极速型ssd云硬盘五、增强型ssd云硬盘六、查看腾讯云服务器价格 一、磁盘性能和价格比较 磁盘名称高性能ssd云硬盘极速型ssd云硬盘增强型ssd云硬盘规格500g 5800 …