推理模型倉(inference model repository)是 Triton 推理伺服器的最基礎元件,如同資料庫(database)伺服器必須先建立一個資料庫是類似的道理。要使用 Triton 推理伺服器的第一件任務,就是先建立一個模型存儲倉來作為伺服器的組織中心,将所需的模型、配置檔案和其他資源都位于這個存儲倉中,才能讓 Triton 進行推理任務。
進入 這個最完整的說明檔案區,在 “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_repo1> ├── <densenet_onnx> │ ├── <1> │ │ └── model.onnx │ ├── config.pbtxt │ └── densenet_labels.txt └── <inception_graphdef> ├── <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 裝置作為實驗平台,先下載下傳 開源倉,裡面的docs目錄下有個 就是個模型倉範例,裡面有 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 各生成版本 <1> 目錄,并且各有一個 model.onnx 與 model.graphdef 模型檔案。
接下去隻要安裝好 Triton 伺服器軟體,就能開始使用這個模型倉來進行測試與體驗,這是下一篇文章會帶着大家進行安裝的部分。
*本文轉自 NVIDIA英偉達