NVIDIA Triton 系列文章(4):创建模型仓

推理模型仓(inference model repository)是 triton 推理服务器的最基础元件,如同数据库(database)服务器必须先创建一个数据库是类似的道理。要使用 triton 推理服务器的第一件任务,就是先创建一个模型存储仓来作为服务器的组织中心,将所需的模型、配置文件和其他资源都位于这个存储仓中,才能让 triton 进行推理任务。
进入 https://github.com/triton-inference-server/server/tree/main/docs 这个最完整的说明文件区,在 “user guide” 里的前 5 个步骤,就是为 triton 服务器创建与管理模型仓的任务,依序如下:
创建模型储存仓(creating a model repository)
撰写模型配置文件(writing a model configuration)
创建模型的流水线(buillding a model pipeline)
管理模型可用性(managing model availablity)
收集服务器指标(collecting server metrics)
本文先带着读者创建模型存储仓,这是执行 triton 服务器之前必须执行的环节,另外四个部分会在后续文章中陆续探索。
这个储存仓的要求相对简单,只要是常用的文件系统就行,包括企业内部使用的 windows ntfs 或 linux ext3/4 文件服务器,也可以是 google 云、亚马逊云、微软 asure 之类的网上储存空间。
triton 模型仓是以“目录结构”为主体的方式搭建,将配套的文件放置对应的位置里就可以,下面是一个简单的范例:
目录结构与文件
├──
  │   ├──
  │   │   └── model.onnx
  │   ├── config.pbtxt
  │   └── densenet_labels.txt
  └──
       ├──
       │   └── model.graphdef
       ├──
       │   └── model.graphdef
       ├── config.pbtxt
       └── inception_labels.txt
用途说明
根目录:仓名称
目录:模型densenet_onnx
目录:模型densenet_onnx的版本1
文件:模型densenet_onnx版本1的模型文件
文件:模型densenet_onnx的配置文件
文件:模型densenet_onnx的标注文件
目录:模型inception_graphdef
目录:模型inception_graphdef版本1
文件:模型inception_graphdef版本1的模型文件
目录:模型inception_graphdef版本2
文件:模型inception_graphdef版本2的模型文件
文件:模型inception_graphdef的配置文件
文件:模型inception_graphdef的标注文件
这个模型仓主要分为以下两大部分:
1. 目录结构:需要创建以下三层目录,并根据各层定义进行命名
(1)  第一层“仓名称”:简单创建一个文件夹作为模型该模型仓的根路径,一台设备上可以有任意个模型仓,例如 model_repo1、model_repo2;
(2)  第二层“模型名称”:在模型仓下面根据模型名称创建目录,通常习惯使用“神经网络名称_后端种类”的组合格式,例如
densenet_onnx 表示为 onnx 后端的 densenet 网络模型;
inception_graphdef 表示为 tensorflow graphdef 后端的 inception 模型。
(3)  第三层“版本号”:用纯数字表示,因为相同的模型可能存在不同训练回合(epoch)、不同精度的多个版本。
2. 文件内容:将以下三种文件内容,分别放置在对应的目录下
(1) 配置文件:放在第二层的模型名称目录下,通常命名为 config.pbtxt,每个模型都有各自的配置文件,里面存放着该模型执行推理时所需要的信息与参数,是 triton 模型仓里最重要的部分,主要内容将在后面有专门文章提供详细说明。
(2) 标注文件(如果有):放在第二层的模型名称目录下,例如 densenet_labels.txt
(3) 模型文件:放在第三层的版本目录下,就是最终执行推理功能的神经网络模型,其附加文件名根据训练时所用的框架而定,如下所列
tensorrt 模型:附加名为 .plan,例如 model.plan
onnx 模型:附加名为 .onnx,例如 model.onnx
torchscript 模型:附加名为 .pt,例如 model.pt
tensorflow 模型:根据存储时的方式有 .graphdef 与 .savedmodel 两种,例如 model.graphdef 或 model.savedmodel
openvino 模型:需要由 .xml 与 .bin 组成,例如 model.xml 与 model.bin
python 模型:附加名为 .py,例如 model.py
dali 模型:附加名为 .dali,例如 model.dali
即便是在云存储上,也只要根据上述要求创建目录结构,并将各类文件放置在对应目录下,然后启动 triton 推理服务器时使用“--model-repostory=”参数,指向模型仓根路径的位置就可以,例如以下状况:
# 在本机上
tritonserver --model-repository=/home/nvidia/triton/repo1
# 在google云
tritonserver --model-repository=gs://bucket/triton/repo-google
# 在亚马逊s3云
tritonserver --model-repository=s3://ip:端口/triton/repo-amazone
# 微软azure云
tritonserver --model-repository=as://用户名/容器名/repo-azure
triton 服务器启动时,会将模型仓下的模型载入计算设备的内存之中,并不需要与模型仓所在服务器进行实时数据交换,因此启动之初会消耗比较多时间,开始执行推理计算之后是不会受到网络速度影响推理性能。
为了协助读者跟容易理解模型仓的使用,我们以 nvidia jetson agx orin 设备作为实验平台,先下载 https://github.com/triton-inference-server/server 开源仓,里面的docs目录下有个 examples/model_repository 就是个模型仓范例,里面有 8 个简单的模型,可以做些简单的测试与体验。现在请执行以下指令:
cd $home  &&  mkdir  triton  &&  cd  triton
git clone https://github.com/triton-inference-server/server
cd server/docs/examples
tree model_repository
就会看到如下面左方的列表,共有 8 个模型文件夹:
目录结构与文件
model_repository/
├── densenet_onnx
│   ├── config.pbtxt
│   └── densenet_labels.txt
├── inception_graphdef
│   ├── config.pbtxt
│   └── inception_labels.txt
├── simple
│   ├── 1
│   │   └── model.graphdef
│   └── config.pbtxt
├── simple_dyna_sequence
│   ├── 1
│   │   └── model.graphdef
│   └── config.pbtxt
《中间省略》
└── simple_string
    ├── 1
    │   └── model.graphdef
    └── config.pbtxt
用途说明
根目录:仓名称为model_repository
目录:模型densenet_onnx
文件:模型densenet_onnx的配置文件
文件:模型densenet_onnx的标注文件
目录:模型inception_graphdef
文件:模型inception_graphdef的配置文件
文件:模型inception_graphdef的标注文件
目录:模型simple
目录:模型simple的版本1
文件:模型simple的模型文件
文件:模型simple的配置文件
目录:模型simple_dyna_sequence
目录:模型simple_dyna_sequence的版本1
文件:模型simple_dyna_sequence的模型文件
文件:模型simple_dyna_sequence的配置文件
《中间省略》
目录:模型simple_string
目录:模型simple_string的版本1
文件:模型simple_string的模型文件
文件:模型simple_string的配置文件
我们可以看到每个文件夹里面都有 1 个独立的 config.pbtxt 配置文件,而且内容都不尽相同,这是针对不同模型所设置的内容与参数。
在下载的模型仓里的 densenet_onnx 与 inception_graphdef 目录下,并没有提供对用的模型文件,因此需要执行以下指令将这两个模型文件下载,并存放在指定位置里:
$ ./fetch_models.sh
现在就能看到在 densenet_onnx 与 inception_graphdef 各生成版本 目录,并且各有一个 model.onnx 与 model.graphdef 模型文件。
接下去只要安装好 triton 服务器软件,就能开始使用这个模型仓来进行测试与体验,这是下一篇文章会带着大家进行安装的部分。
推荐阅读
nvidia jetson nano 2gb 系列文章(1):开箱介绍
nvidia jetson nano 2gb 系列文章(2):安装系统
nvidia jetson nano 2gb 系列文章(3):网络设置及添加 swapfile 虚拟内存
nvidia jetson nano 2gb 系列文章(4):体验并行计算性能
nvidia jetson nano 2gb 系列文章(5):体验视觉功能库
nvidia jetson nano 2gb 系列文章(6):安装与调用摄像头
nvidia jetson nano 2gb 系列文章(7):通过 opencv 调用 csi/usb 摄像头
nvidia jetson nano 2gb 系列文章(8):执行常见机器视觉应用
nvidia jetson nano 2gb 系列文章(9):调节 csi 图像质量
nvidia jetson nano 2gb 系列文章(10):颜色空间动态调节技巧
nvidia jetson nano 2gb 系列文章(11):你应该了解的 opencv
nvidia jetson nano 2gb 系列文章(12):人脸定位
nvidia jetson nano 2gb 系列文章(13):身份识别
nvidia jetson nano 2gb 系列文章(14):hello ai world
nvidia jetson nano 2gb 系列文章(15):hello ai world 环境安装
nvidia jetson nano 2gb 系列文章(16):10行代码威力
nvidia jetson nano 2gb 系列文章(17):更换模型得到不同效果
nvidia jetson nano 2gb 系列文章(18):utils 的 videosource 工具
nvidia jetson nano 2gb 系列文章(19):utils 的 videooutput 工具
nvidia jetson nano 2gb 系列文章(20):“hello ai world” 扩充参数解析功能
nvidia jetson nano 2gb 系列文章(21):身份识别
nvidia jetson nano 2gb 系列文章(22):“hello ai world” 图像分类代码
nvidia jetson nano 2gb 系列文章(23):“hello ai world 的物件识别应用
nvidia jetson nano 2gb 系列文章(24): “hello ai world” 的物件识别应用
nvidia jetson nano 2gb 系列文章(25): “hello ai world” 图像分类的模型训练
nvidia jetson nano 2gb 系列文章(26): “hello ai world” 物件检测的模型训练
nvidia jetson nano 2gb 系列文章(27): deepstream 简介与启用
nvidia jetson nano 2gb 系列文章(28): deepstream 初体验
nvidia jetson nano 2gb 系列文章(29): deepstream 目标追踪功能
nvidia jetson nano 2gb 系列文章(30): deepstream 摄像头“实时性能”
nvidia jetson nano 2gb 系列文章(31): deepstream 多模型组合检测-1
nvidia jetson nano 2gb 系列文章(32): 架构说明与deepstream-test范例
nvidia jetson nano 2gb 系列文章(33): deepstream 车牌识别与私密信息遮盖
nvidia  jetson nano 2gb 系列文章(34): deepstream 安装python开发环境
nvidia jetson nano 2gb 系列文章(35): python版test1实战说明
nvidia jetson nano 2gb 系列文章(36): 加入usb输入与rtsp输出
nvidia jetson nano 2gb 系列文章(37): 多网路模型合成功能
nvidia jetson nano 2gb 系列文章(38): nvdsanalytics视频分析插件
nvidia jetson nano 2gb 系列文章(39): 结合iot信息传输
nvidia jetson nano 2gb 系列文章(40): jetbot系统介绍
nvidia jetson nano 2gb 系列文章(41): 软件环境安装
nvidia jetson nano 2gb 系列文章(42): 无线wifi的安装与调试
nvidia jetson nano 2gb 系列文章(43): csi摄像头安装与测试
nvidia jetson nano 2gb 系列文章(44): jetson的40针引脚
nvidia jetson nano 2gb 系列文章(45): i2c总线与pioled
nvidia jetson nano 2gb 系列文章(46): 机电控制设备的安装
nvidia jetson nano 2gb 系列文章(47): 组装过程的注意细节
nvidia jetson nano 2gb 系列文章(48): 用键盘与摇杆控制行动
nvidia jetson nano 2gb 系列文章(49): 智能避撞之现场演示
nvidia jetson nano 2gb 系列文章(50): 智能避障之模型训练
nvidia jetson nano 2gb 系列文章(51): 图像分类法实现找路功能
nvidia jetson nano 2gb 系列文章(52): 图像分类法实现找路功能
nvidia jetson nano 2gb 系列文章(53): 简化模型训练流程的tao工具套件
nvidia jetson nano 2gb 系列文章(54):ngc的内容简介与注册密钥
nvidia jetson nano 2gb 系列文章(55):安装tao模型训练工具
nvidia jetson nano 2gb 系列文章(56):启动器cli指令集与配置文件
nvidia jetson nano 2gb 系列文章(57):视觉类脚本的环境配置与映射
nvidia jetson nano 2gb 系列文章(58):视觉类的数据格式
nvidia jetson nano 2gb 系列文章(59):视觉类的数据增强
nvidia jetson nano 2gb 系列文章(60):图像分类的模型训练与修剪
nvidia jetson nano 2gb 系列文章(61):物件检测的模型训练与优化
nvidia jetson nano 2gb 系列文章(62):物件检测的模型训练与优化-2
nvidia jetson nano 2gb 系列文章(63):物件检测的模型训练与优化-3
nvidia jetson nano 2gb 系列文章(64):将模型部署到jetson设备
nvidia jetson nano 2gb 系列文章(65):执行部署的 tensorrt 加速引擎
nvidia jetson 系列文章(1):硬件开箱
nvidia jetson 系列文章(2):配置操作系统
nvidia jetson 系列文章(3):安装开发环境
nvidia jetson 系列文章(4):安装deepstream
nvidia jetson 系列文章(5):使用docker容器的入门技巧
nvidia jetson 系列文章(6):使用容器版deepstream
nvidia jetson 系列文章(7):配置ds容器python开发环境
nvidia jetson 系列文章(8):用ds容器执行python范例
nvidia jetson 系列文章(9):为容器接入usb摄像头
nvidia jetson 系列文章(10):从头创建jetson的容器(1)
nvidia jetson 系列文章(11):从头创建jetson的容器(2)
nvidia jetson 系列文章(12):创建各种yolo-l4t容器
nvidia triton系列文章(1):应用概论
nvidia triton系列文章(2):功能与架构简介
nvidia triton系列文章(3):开发资源说明
原文标题:nvidia triton 系列文章(4):创建模型仓
文章出处:【微信公众号:nvidia英伟达企业解决方案】欢迎添加关注!文章转载请注明出处。

安防监控视频结构化那些事儿
三种耦合方式下放大电路交流负载线的特性
如何保证专用企业网络的稳定?
万达告别房地产!楼市变天!千亿万达告别房地产!马云重磅入局租房市场!地产大佬们该醒醒了!
食品中重金属快速检测设备的功能特点是什么
NVIDIA Triton 系列文章(4):创建模型仓
钟产生芯片GM5351A 精准可靠的本土时钟产生芯片解决方案
2019“黑锋”创造了无人机竞速比赛的多项奇迹
实战用华硕AX86U解决家庭网络卡顿痛点
8K播放设备必须具备哪些条件
美国和日本禁华为将会对其国的企业造成打击性的损失
EMI电源滤波器共模插入损耗标准测量方法
蓄势赋能丨数明半导体顺利通过国家知识产权管理体系认证
迪斯尼研发触感夹克衣,可模拟压力和触感以同步各种视觉效果
小米6最新消息:小米6又立功了!小米今年第二季度手机出货量暴涨1000万台
智能型电化学气体传感器的详细介绍
Rd-01雷达模组固件烧录与可视化工具配置
多声道超声波流量计在排水管网监测中的应用
高通与苹果的专利诉讼大战已正式落下帷幕
5月全球新能源汽车销量对比:中国车企销量同比增长128%,预计未来会持续走高