天天看點

NVIDIA Triton 系列文章(4):建立模型倉

作者:麗台科技

推理模型倉(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英偉達

繼續閱讀