Triton Inference Serve調(diào)研

1 Triton Inference Serve簡介

Triton inference serve是NVIDA開源的推理框架报破,官網(wǎng)Triton Inference Server,具有如下特點:

  • 支持常見深度學(xué)習(xí)框架導(dǎo)出模型的推理随闪,如 TensorRT, TensorFlow GraphDef, TensorFlow SavedModel, ONNX, PyTorch TorchScript and OpenVINO 等格式傲绣。
  • 支持機器學(xué)習(xí)模型XGBoost, LightGBM, Scikit-Learn的推理。
  • 支持模型管理誓酒,如版本控制鹏浅,動態(tài)加載等诗轻。
  • 支持動態(tài)Batching钳宪。
  • 支持模型Ensembling。
  • 提供HTTP/GRPC接口扳炬。支持服務(wù)器資源統(tǒng)計(metrics)
  • 提供Python和C的客戶端吏颖,客戶端鏈接

2 Triton Inference Serve 使用

下載tritonserver鏡像

首先需要確認tritonserver和CUDA Toolkit、TensorRT版本的對應(yīng)關(guān)系恨樟,查看鏈接: https://docs.nvidia.com/deeplearning/triton-inference-server/release-notes/, 從release note中查找合適的tritonserver版本侦高。docker下載命令:

docker pull nvcr.io/nvidia/tritonserver:21.03-py3  【本文使用的版本】
docker pull nvcr.io/nvidia/tritonserver:21.07-py3 
docker pull nvcr.io/nvidia/tritonserver:21.08-py3 

onnx可視化工具 netron

https://github.com/lutzroeder/Netron 【使用netron查看輸入和輸出】
通過netron查看,模型的輸入厌杜、輸出名稱奉呛,模型的輸入維度,模型的輸出維度等信息夯尽,如下圖所示瞧壮。

使用netron查看模型的輸入和輸出信息

tritonserver的模型倉庫構(gòu)建

請先閱讀官方文檔,獲取更清晰的表述匙握。構(gòu)建倉庫 https://github.com/triton-inference-server/server/blob/main/docs/model_repository.md
tritonserver模型倉庫是按照文件目錄組織的咆槽,如下圖所示:

模型倉庫結(jié)構(gòu)

圖中文件夾名稱即為模型的名稱,如:alpha_pose_engine_17圈纺、yolo3_spp_onnx秦忿。模型目錄中至少包含模型以及config.pbtxt兩個文件,模型單獨存放在文件夾中并用數(shù)字命名蛾娶,用來表示模型的版本灯谣。其中,engine表示tensorrt格式的模型蛔琅,onnx表示onnx格式的模型胎许,命名中含有這兩個關(guān)鍵字主要為了用來區(qū)分不同類型的模型。

PS:模型文件夾中罗售,ONNX模型的默認名稱為model.onnx, TensorRT模型的默認名稱為model.plan辜窑。

tritonserver的配置文件編寫

請先閱讀官方文檔,獲取更清晰的表述寨躁。配置文件編寫 https://github.com/triton-inference-server/server/blob/main/docs/model_configuration.md穆碎。

下面分別從yolo3_spp_onnx、yolov3_spp_engine對模型的配置進行說明职恳。

yolo3_spp_onnx配置文件:

name: "yolo3_spp_onnx"
platform: "onnxruntime_onnx"
max_batch_size : 0
input [
  {
    name: "input"
    data_type: TYPE_FP32
    dims: [-1, 3, 608, 608]
  }
]
output [
  {
    name: "output"
    data_type: TYPE_FP32
    dims: [-1, 22743, 85]
    label_filename: "labels.txt"
  }
]
  • name 表示模型名稱所禀,和上述的文件夾同名
  • platform 模型的格式谜悟,onnxruntime_onnx表示模型是onnx格式表示的。
  • max_batch_size 批處理的最大size北秽,在轉(zhuǎn)換成onnx時,要保證模型是支持動態(tài)batch最筒,若不開啟贺氓,直接設(shè)置為0即可。
  • input 模型輸入信息床蜘,包括輸入節(jié)點名稱辙培、維度、類型邢锯。
  • output 模型輸出信息扬蕊,包括輸入節(jié)點名稱、維度丹擎、類型尾抑。

yolov3_spp_engine配置文件:

name: "yolov3_spp_engine"
platform: "tensorrt_plan"
max_batch_size : 0
input [
  {
    name: "input"
    data_type: TYPE_FP32
    dims: [1, 3, 608, 608]
  }
]
output [
  {
    name: "boxes"
    data_type: TYPE_FP32
    dims: [1, 22743, 85]
    reshape { shape: [1, 22743, 85] }
    label_filename: "labels.txt"
  }
]
  • name 表示模型名稱,和上述的文件夾同名
  • platform 模型的格式蒂培,tensorrt_plan表示模型是tensorrt格式表示的再愈。
  • max_batch_size 批處理的最大size,在轉(zhuǎn)換成tensorrt時护戳,要保證模型是支持動態(tài)batch翎冲,若不開啟,直接設(shè)置為0即可媳荒。
  • input 模型輸入信息抗悍,包括輸入節(jié)點名稱、維度钳枕、類型缴渊。
  • output 模型輸出信息,包括輸入節(jié)點名稱鱼炒、維度疟暖、類型。

tritonserver的啟動

請先閱讀官方文檔田柔,獲取更清晰的表述俐巴。啟動容器 https://github.com/triton-inference-server/server/blob/main/docs/quickstart.md#run-triton

docker run --gpus=1 --name triton-serve \
-e LD_PRELOAD=/models/yolov3_spp_engine/ScatterND.so \
--rm -p4000:8000 -p4001:8001 -p4002:8002 \
-v /schinper-nfs/george/triton-serve/mmdet/triton-repository:/models nvcr.io/nvidia/tritonserver:21.03-py3  tritonserver --model-repository=/models

啟動參數(shù)解析:

  • --gpus 指定容器使用的GPU
  • -e指定環(huán)境變量硬爆,有些tensorrt可能使用了預(yù)定義的差價欣舵,需要通過LD_PRELOAD指定環(huán)境變量,用于提前加載模型缀磕,否則會出錯缘圈。
  • --rm 程序退出后劣光,刪除容器
  • -v 映射模型路徑

停止并清理

docker stop triton-serve && docker rm triton-serve

tritonserver的啟動成功示意圖

啟動成功后,會顯示如下信息:

I1212 02:55:59.033293 1 server.cc:570] 
+--------------------------+---------+--------+
| Model                    | Version | Status |
+--------------------------+---------+--------+
| alpha_pose_engine_17     | 1       | READY  |
| alpha_pose_engine_dyn_17 | 1       | READY  |
| alpha_pose_onnx_17       | 1       | READY  |
| faster_rcnn_cat_dog_onnx | 1       | READY  |
| yolo3_spp_onnx           | 1       | READY  |
| yolov3_spp_engine        | 1       | READY  |
+--------------------------+---------+--------+

I1212 02:55:59.033567 1 tritonserver.cc:1658] 
+----------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------+
| Option                           | Value                                                                                                                                              |
+----------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------+
| server_id                        | triton                                                                                                                                             |
| server_version                   | 2.8.0                                                                                                                                              |
| server_extensions                | classification sequence model_repository schedule_policy model_configuration system_shared_memory cuda_shared_memory binary_tensor_data statistics |
| model_repository_path[0]         | /models                                                                                                                                            |
| model_control_mode               | MODE_NONE                                                                                                                                          |
| strict_model_config              | 1                                                                                                                                                  |
| pinned_memory_pool_byte_size     | 268435456                                                                                                                                          |
| cuda_memory_pool_byte_size{0}    | 67108864                                                                                                                                           |
| min_supported_compute_capability | 6.0                                                                                                                                                |
| strict_readiness                 | 1                                                                                                                                                  |
| exit_timeout                     | 30                                                                                                                                                 |
+----------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------+

I1212 02:55:59.035356 1 grpc_server.cc:3983] Started GRPCInferenceService at 0.0.0.0:8001
I1212 02:55:59.035866 1 http_server.cc:2717] Started HTTPService at 0.0.0.0:8000
I1212 02:55:59.078263 1 http_server.cc:2736] Started Metrics Service at 0.0.0.0:8002

測試服務(wù)是否正常啟動

curl -v localhost:4000/v2/health/ready  #

PS: 8000為http的GRPC端口糟把,8001為GRPC服務(wù)端口绢涡,8002為資源監(jiān)控信息獲取服務(wù)端口。

3 Triton Inference Serve 的客戶端使用

請先閱讀客戶端項目: tritonclient

tritonclient的使用非常簡單遣疯,按照官方提供的示例雄可,調(diào)用GRPC或者REST接口即可,難點在于需要清楚的了解模型的輸入缠犀、輸出数苫,同時自己編寫模型的預(yù)處理和模型的后處理

4 參考項目

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末辨液,一起剝皮案震驚了整個濱河市虐急,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌滔迈,老刑警劉巖止吁,帶你破解...
    沈念sama閱讀 219,039評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異燎悍,居然都是意外死亡赏殃,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評論 3 395
  • 文/潘曉璐 我一進店門间涵,熙熙樓的掌柜王于貴愁眉苦臉地迎上來仁热,“玉大人,你說我怎么就攤上這事勾哩】勾溃” “怎么了?”我有些...
    開封第一講書人閱讀 165,417評論 0 356
  • 文/不壞的土叔 我叫張陵思劳,是天一觀的道長迅矛。 經(jīng)常有香客問我,道長潜叛,這世上最難降的妖魔是什么秽褒? 我笑而不...
    開封第一講書人閱讀 58,868評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮威兜,結(jié)果婚禮上销斟,老公的妹妹穿的比我還像新娘。我一直安慰自己椒舵,他們只是感情好蚂踊,可當我...
    茶點故事閱讀 67,892評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著笔宿,像睡著了一般犁钟。 火紅的嫁衣襯著肌膚如雪棱诱。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,692評論 1 305
  • 那天涝动,我揣著相機與錄音迈勋,去河邊找鬼。 笑死醋粟,一個胖子當著我的面吹牛靡菇,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播昔穴,決...
    沈念sama閱讀 40,416評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼提前!你這毒婦竟也來了吗货?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,326評論 0 276
  • 序言:老撾萬榮一對情侶失蹤狈网,失蹤者是張志新(化名)和其女友劉穎宙搬,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體拓哺,經(jīng)...
    沈念sama閱讀 45,782評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡勇垛,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,957評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了士鸥。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片闲孤。...
    茶點故事閱讀 40,102評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖烤礁,靈堂內(nèi)的尸體忽然破棺而出讼积,到底是詐尸還是另有隱情,我是刑警寧澤脚仔,帶...
    沈念sama閱讀 35,790評論 5 346
  • 正文 年R本政府宣布勤众,位于F島的核電站,受9級特大地震影響鲤脏,放射性物質(zhì)發(fā)生泄漏们颜。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,442評論 3 331
  • 文/蒙蒙 一猎醇、第九天 我趴在偏房一處隱蔽的房頂上張望窥突。 院中可真熱鬧,春花似錦硫嘶、人聲如沸波岛。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽则拷。三九已至贡蓖,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間煌茬,已是汗流浹背斥铺。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留坛善,地道東北人晾蜘。 一個月前我還...
    沈念sama閱讀 48,332評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像眠屎,于是被迫代替她去往敵國和親剔交。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,044評論 2 355

推薦閱讀更多精彩內(nèi)容