推理模型倉(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 模型倉是以“目錄結構”為主體的方式搭建,將配套的文件放置對應的位置里就可以,下面是一個簡單的范例:
目錄結構與文件 |
├── │ ├── <1> │ │ └── model.onnx │ ├── config.pbtxt │ └── densenet_labels.txt └── ├── <1> │ └── model.graphdef ├── <2> │ └── 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&&mkdirtriton&&cdtriton
git clone https://github.com/triton-inference-server/server
cd server/docs/examples
treemodel_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 各生成版本 <1> 目錄,并且各有一個 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 系列文章(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 的物件識別應用
NVIDIAJetson Nano 2GB 系列文章(24): “Hello AI World” 的物件識別應用
NVIDIAJetson Nano 2GB 系列文章(25): “Hello AI World” 圖像分類的模型訓練
NVIDIAJetson Nano 2GB 系列文章(26): “Hello AI World” 物件檢測的模型訓練
NVIDIAJetson Nano 2GB 系列文章(27): DeepStream 簡介與啟用
NVIDIAJetson Nano 2GB 系列文章(28): DeepStream 初體驗
NVIDIAJetson Nano 2GB 系列文章(29): DeepStream 目標追蹤功能
NVIDIAJetson Nano 2GB 系列文章(30): DeepStream 攝像頭“實時性能”
NVIDIAJetson Nano 2GB 系列文章(31): DeepStream 多模型組合檢測-1
NVIDIAJetson Nano 2GB 系列文章(32): 架構說明與deepstream-test范例
NVIDIAJetsonNano 2GB 系列文章(33): DeepStream 車牌識別與私密信息遮蓋
NVIDIA Jetson Nano 2GB 系列文章(34): DeepStream 安裝Python開發環境
NVIDIAJetson Nano 2GB 系列文章(35): Python版test1實戰說明
NVIDIAJetson Nano 2GB 系列文章(36): 加入USB輸入與RTSP輸出
NVIDIAJetson Nano 2GB 系列文章(37): 多網路模型合成功能
NVIDIAJetson Nano 2GB 系列文章(38): nvdsanalytics視頻分析插件
NVIDIAJetson Nano 2GB 系列文章(39): 結合IoT信息傳輸
NVIDIAJetson Nano 2GB 系列文章(40): Jetbot系統介紹
NVIDIAJetson Nano 2GB 系列文章(41): 軟件環境安裝
NVIDIAJetson Nano 2GB 系列文章(42): 無線WIFI的安裝與調試
NVIDIAJetson Nano 2GB 系列文章(43): CSI攝像頭安裝與測試
NVIDIAJetson Nano 2GB 系列文章(44): Jetson的40針引腳
NVIDIAJetson Nano 2GB 系列文章(46): 機電控制設備的安裝
NVIDIAJetson Nano 2GB 系列文章(47): 組裝過程的注意細節
NVIDIAJetson Nano 2GB 系列文章(48): 用鍵盤與搖桿控制行動
NVIDIAJetson Nano 2GB 系列文章(49): 智能避撞之現場演示
NVIDIAJetson Nano 2GB 系列文章(50): 智能避障之模型訓練
NVIDIAJetson Nano 2GB 系列文章(51): 圖像分類法實現找路功能
NVIDIAJetson Nano 2GB 系列文章(52): 圖像分類法實現找路功能
NVIDIAJetson 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英偉達企業解決方案】歡迎添加關注!文章轉載請注明出處。
-
英偉達
+關注
關注
22文章
3783瀏覽量
91250
原文標題:NVIDIA Triton 系列文章(4):創建模型倉
文章出處:【微信號:NVIDIA-Enterprise,微信公眾號:NVIDIA英偉達企業解決方案】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論