作為服務(wù)器的最重要任務(wù),就是要接受來(lái)自不同終端所提出的各種請(qǐng)求,然后根據(jù)要求執(zhí)行對(duì)應(yīng)的計(jì)算,再將計(jì)算結(jié)果返回給終端。
當(dāng) Triton 推理服務(wù)器運(yùn)行起來(lái)之后,就進(jìn)入等待請(qǐng)求的狀態(tài),因此我們所要提出的請(qǐng)求內(nèi)容,就必須在用戶端軟件里透過(guò)參數(shù)去調(diào)整請(qǐng)求的內(nèi)容,這部分在 Triton 相關(guān)使用文件中并沒有提供充分的說(shuō)明,因此本文的重點(diǎn)就在于用Python 版的 image_client.py 來(lái)說(shuō)明相關(guān)參數(shù)的內(nèi)容,其他用戶端的參數(shù)基本上與這個(gè)端類似,可以類比使用。
本文的實(shí)驗(yàn)內(nèi)容,是將 Triton 服務(wù)器安裝在 IP 為 192.168.0.10 的 Jetson AGX Orin 上,將 Triton 用戶端裝在 IP 為 192.168.0.20 的樹莓派上,讀者可以根據(jù)已有的設(shè)備資源自行調(diào)配。
在開始進(jìn)行實(shí)驗(yàn)之前,請(qǐng)先確認(rèn)以下兩個(gè)部分的環(huán)境:
在服務(wù)器設(shè)備上啟動(dòng) Triton 服務(wù)器,并處于等待請(qǐng)求的狀態(tài):
如果還沒啟動(dòng)的話,請(qǐng)直接執(zhí)行以下指令:
# 根據(jù)實(shí)際的模型倉(cāng)根目錄位置設(shè)定TRITON_MODEL_REPO路徑
$ export TRITON_MODEL_REPO=${HOME}/triton/server/docs/examples/model_repository
執(zhí)行Triton服務(wù)器
$ dockerrun--rm--net=host-v${TRITON_MODEL_REPO}:/modelsnvcr.io/nvidia/tritonserver:22.09-py3tritonserver--model-repository=/models
先執(zhí)行以下指令,確認(rèn)Triton服務(wù)器已經(jīng)正常啟動(dòng),并且從用戶端設(shè)備可以訪問(wèn):
ady curl -v 192.168.0.10:8000/v2/health/re
只要后面出現(xiàn)的信息中有“HTTP/1.1 200 OK”部分,就表示一切正常。
如果還沒安裝 Triton 的 Python 用戶端環(huán)境,并且還未下載用戶端范例的話,請(qǐng)執(zhí)行以下指令:
$ cd ${HOME}/triton
$ git clone https://github.com/triton-inference-server/client
$ cd client/src/python/examples
# 安裝 Triton 的 Python用戶端環(huán)境
$ pip3installtritonclient[all]attrdict-ihttps://pypi.tuna.tsinghua.edu.cn/simple
最后記得在用戶端設(shè)備上提供幾張圖片,并且放置在指定文件夾(例如~/images)內(nèi),準(zhǔn)備好整個(gè)實(shí)驗(yàn)環(huán)境,就可以開始下面的說(shuō)明。
現(xiàn)在執(zhí)行以下指令,看一下 image_client 這個(gè)終端的參數(shù)列表:
python3 image_client.py
會(huì)出現(xiàn)以下的信息:
接下來(lái)就來(lái)說(shuō)明這些參數(shù)的用途與用法。
用“-u”參數(shù)對(duì)遠(yuǎn)程服務(wù)器提出請(qǐng)求:
如果用戶端與服務(wù)器端并不在同一臺(tái)機(jī)器上的時(shí)候,就可以用這個(gè)參數(shù)對(duì)遠(yuǎn)程 Triton 服務(wù)器提出推理請(qǐng)求,請(qǐng)執(zhí)行以下指令:
tion_graphdef -u 192.168.0.10:8000 -s INCEPTION ${HOME}/images/mug.jpg python3 image_client.py -m incep
由于 Triton 的跨節(jié)點(diǎn)請(qǐng)求主要透過(guò) HTTP/REST 協(xié)議處理,需要透過(guò) 8000 端口進(jìn)行傳輸,因此在“-u”后面需要接上“IP:8000”就能正常使用。
請(qǐng)自行檢查回饋的計(jì)算結(jié)果是否正確!
2. 用“-m”參數(shù)去指推理模型:
從“python3 image_client.py”所產(chǎn)生信息的最后部分,可以看出用“-m”參數(shù)去指定推理模型是必須的選項(xiàng),但是可以指定哪些推理模型呢?就得從 Triton 服務(wù)器的啟動(dòng)信息中去尋找答案。
下圖是本范例是目前啟動(dòng)的 Triton 推理服務(wù)器所支持的模型列表:
這里顯示有的 8 個(gè)推理模型,就是啟動(dòng)服務(wù)器時(shí)使用“--model-repository=”參數(shù)指定的模型倉(cāng)內(nèi)容,因此客戶端使用“-m”參數(shù)指定的模型,必須是在這個(gè)表所列的內(nèi)容之列,例如“-mdensenet_onnx”、“-m inception_graphdef”等等。
現(xiàn)在執(zhí)行以下兩道指令,分別看看使用不同模型所得到的結(jié)果有什么差異:
$ python3 image_client.py -m densenet_onnx -u 192.168.0.10:8000 -s INCEPTION ${HOME}/images/mug.jpg
$ python3image_client.py-minception_graphdef-u192.168.0.10:8000-sINCEPTION${HOME}/images/mug.jpg
使用 densenet_onnx 模型與 inception_graphdef 模型所返回的結(jié)果,分別如下:
雖然兩個(gè)模型所得到的檢測(cè)結(jié)果一致,但是二者所得到的置信度表達(dá)方式并不相同,而且標(biāo)簽編號(hào)并不一樣(504 與 505)。
這個(gè)參數(shù)后面還可以使用“-x”去指定“版本號(hào)”,不過(guò)目前所使用的所有模型都只有一個(gè)版本,因此不需要使用這個(gè)參數(shù)。
3. 使用“-s”參數(shù)指定圖像縮放方式:
有些神經(jīng)網(wǎng)絡(luò)算法在執(zhí)行推理之前,需要對(duì)圖像進(jìn)行特定形式的縮放(scaling)處理,因此需要先用這個(gè)參數(shù)指定縮放的方式,如果沒有指定正確的模式,會(huì)導(dǎo)致推理結(jié)果的錯(cuò)誤。目前這個(gè)參數(shù)支持{NONE, INSPECTION, VGG}三個(gè)選項(xiàng),預(yù)設(shè)值為“NONE”。
在本實(shí)驗(yàn) Triton 推理服務(wù)器所支持的 densenet_onnx 與 inception_graphdef 模型,都需要選擇 INSPECTION 縮放方式,因此執(zhí)行指令中需要用“-s INSPECTION”去指定,否則會(huì)得到錯(cuò)誤的結(jié)果。
請(qǐng)嘗試以下指令,省略前面指定中的“-s INSPECTION”,或者指定為 VGG 模式,看看結(jié)果如何?
${HOME}/images/mug.jpg python3 image_client.py -m inception_graphdef -u 192.168.0.10:8000 -s VGG
4. 對(duì)文件夾所有圖片進(jìn)行推理
如果有多個(gè)要進(jìn)行推理計(jì)算的標(biāo)的物(圖片),Triton 用戶端可用文件夾為單位來(lái)提交要推理的內(nèi)容,例如以下指令就能一次對(duì) ${HOME}/images 目錄下所有圖片進(jìn)行推理:
${HOME}/images python3 image_client.py -m inception_graphdef -u 192.168.0.10:8000 -s INCEPTION
例如我們?cè)谖募A中準(zhǔn)備了 car.jpg、mug.jpg、vulture.jpg 三種圖片,如下:
執(zhí)行后反饋的結(jié)果如下:
顯示推理檢測(cè)的結(jié)果是正確的!
5. 用“-b”參數(shù)指定批量處理的值
執(zhí)行前面指令的結(jié)果可以看到“batch size 1”,表示用戶端每次提交一張圖片進(jìn)行推理,所以出現(xiàn) Request1、Request 2 與 Request 3 總共提交三次請(qǐng)求。
現(xiàn)在既然有 3 張圖片,可否一次提交 3 張圖片進(jìn)行推理呢?我們可以用“-b”參數(shù)來(lái)設(shè)定,如果將前面的指令中添加“-b3”這個(gè)參數(shù),如下:
${HOME}/images -b 3 python3 image_client.py -m inception_graphdef -u 192.168.0.10:8000 -s INCEPTION
現(xiàn)在顯示的結(jié)果如下:
現(xiàn)在看到只提交一次“batch size 3”的請(qǐng)求,就能對(duì)三張圖片進(jìn)行推理。如果 batch 值比圖片數(shù)量大呢?例如改成“-b 5”的時(shí)候,看看結(jié)果如何?如下:
現(xiàn)在可以看到所推理的圖片數(shù)量是 5,其中 1/4、2/5 是同一張圖片,表示重復(fù)使用了。這樣就應(yīng)該能清楚這個(gè)“batchsize”值的使用方式。
但如果這里將模型改成 densenet_onnx 的時(shí)候,執(zhí)行以下指令:
${HOME}/images -b 3 python3 image_client.py -m densenet_onnx -u 192.168.0.10:8000 -s INCEPTION
會(huì)得到“ERROR: This model doesn't support batching.”的錯(cuò)誤信息,這時(shí)候就回頭檢查以下模型倉(cāng)里 densenet_onnx 目錄下的 config.pbtxt 配置文件,會(huì)發(fā)現(xiàn)里面設(shè)置了“max_batch_size: 0”,并不支持批量處理。
而 inception_graphdef 模型的配置文件里設(shè)置“max_batch_size: 128”,如果指令給定“-b”參數(shù)大于這個(gè)數(shù)值,也會(huì)出現(xiàn)錯(cuò)誤信息。
6. 其他:
另外還有指定通訊協(xié)議的“-i”參數(shù)、使用異步推理 API 的“-a”參數(shù)、使用流式推理 API 的“--streaming”參數(shù)等等,屬于較進(jìn)階的用法,在這里先不用過(guò)度深入。
以上所提供的 5 個(gè)主要參數(shù),對(duì)初學(xué)者來(lái)說(shuō)是非常足夠的,好好掌握這幾個(gè)參數(shù)就已經(jīng)能開始進(jìn)行更多圖像方面的推理實(shí)驗(yàn)。
推薦閱讀
NVIDIA Jetson Nano 2GB 系列文章(1):開箱介紹
NVIDIA Jetson Nano 2GB 系列文章(2):安裝系統(tǒng)
NVIDIA Jetson Nano 2GB 系列文章(3):網(wǎng)絡(luò)設(shè)置及添加 SWAPFile 虛擬內(nèi)存
NVIDIA Jetson Nano 2GB 系列文章(4):體驗(yàn)并行計(jì)算性能
NVIDIA Jetson Nano 2GB 系列文章(5):體驗(yàn)視覺功能庫(kù)
NVIDIA Jetson Nano 2GB 系列文章(6):安裝與調(diào)用攝像頭
NVIDIA Jetson Nano 2GB 系列文章(7):通過(guò) OpenCV 調(diào)用 CSI/USB 攝像頭
NVIDIA Jetson Nano 2GB 系列文章(8):執(zhí)行常見機(jī)器視覺應(yīng)用
NVIDIA Jetson Nano 2GB 系列文章(9):調(diào)節(jié) CSI 圖像質(zhì)量
NVIDIA Jetson Nano 2GB 系列文章(10):顏色空間動(dòng)態(tài)調(diào)節(jié)技巧
NVIDIA Jetson Nano 2GB 系列文章(11):你應(yīng)該了解的 OpenCV
NVIDIA Jetson Nano 2GB 系列文章(12):人臉定位
NVIDIA Jetson Nano 2GB 系列文章(13):身份識(shí)別
NVIDIA Jetson Nano 2GB 系列文章(14):Hello AI World
NVIDIA Jetson Nano 2GB 系列文章(15):Hello AI World 環(huán)境安裝
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” 擴(kuò)充參數(shù)解析功能
NVIDIA Jetson Nano 2GB 系列文章(21):身份識(shí)別
NVIDIA Jetson Nano 2GB 系列文章(22):“Hello AI World” 圖像分類代碼
NVIDIA Jetson Nano 2GB 系列文章(23):“Hello AI World 的物件識(shí)別應(yīng)用
NVIDIAJetson Nano 2GB 系列文章(24): “Hello AI World” 的物件識(shí)別應(yīng)用
NVIDIAJetson Nano 2GB 系列文章(25): “Hello AI World” 圖像分類的模型訓(xùn)練
NVIDIAJetson Nano 2GB 系列文章(26): “Hello AI World” 物件檢測(cè)的模型訓(xùn)練
NVIDIAJetson Nano 2GB 系列文章(27): DeepStream 簡(jiǎn)介與啟用
NVIDIAJetson Nano 2GB 系列文章(28): DeepStream 初體驗(yàn)
NVIDIAJetson Nano 2GB 系列文章(29): DeepStream 目標(biāo)追蹤功能
NVIDIAJetson Nano 2GB 系列文章(30): DeepStream 攝像頭“實(shí)時(shí)性能”
NVIDIAJetson Nano 2GB 系列文章(31): DeepStream 多模型組合檢測(cè)-1
NVIDIAJetson Nano 2GB 系列文章(32): 架構(gòu)說(shuō)明與deepstream-test范例
NVIDIAJetsonNano 2GB 系列文章(33): DeepStream 車牌識(shí)別與私密信息遮蓋
NVIDIA Jetson Nano 2GB 系列文章(34): DeepStream 安裝Python開發(fā)環(huán)境
NVIDIAJetson Nano 2GB 系列文章(35): Python版test1實(shí)戰(zhàn)說(shuō)明
NVIDIAJetson Nano 2GB 系列文章(36): 加入U(xiǎn)SB輸入與RTSP輸出
NVIDIAJetson Nano 2GB 系列文章(37): 多網(wǎng)路模型合成功能
NVIDIAJetson Nano 2GB 系列文章(38): nvdsanalytics視頻分析插件
NVIDIAJetson Nano 2GB 系列文章(39): 結(jié)合IoT信息傳輸
NVIDIAJetson Nano 2GB 系列文章(40): Jetbot系統(tǒng)介紹
NVIDIAJetson Nano 2GB 系列文章(41): 軟件環(huán)境安裝
NVIDIAJetson Nano 2GB 系列文章(42): 無(wú)線WIFI的安裝與調(diào)試
NVIDIAJetson Nano 2GB 系列文章(43): CSI攝像頭安裝與測(cè)試
NVIDIAJetson Nano 2GB 系列文章(44): Jetson的40針引腳
NVIDIAJetson Nano 2GB 系列文章(46): 機(jī)電控制設(shè)備的安裝
NVIDIAJetson Nano 2GB 系列文章(47): 組裝過(guò)程的注意細(xì)節(jié)
NVIDIAJetson Nano 2GB 系列文章(48): 用鍵盤與搖桿控制行動(dòng)
NVIDIAJetson Nano 2GB 系列文章(49): 智能避撞之現(xiàn)場(chǎng)演示
NVIDIAJetson Nano 2GB 系列文章(50): 智能避障之模型訓(xùn)練
NVIDIAJetson Nano 2GB 系列文章(51): 圖像分類法實(shí)現(xiàn)找路功能
NVIDIAJetson Nano 2GB 系列文章(52): 圖像分類法實(shí)現(xiàn)找路功能
NVIDIAJetson Nano 2GB 系列文章(53): 簡(jiǎn)化模型訓(xùn)練流程的TAO工具套件
NVIDIA Jetson Nano 2GB 系列文章(54):NGC的內(nèi)容簡(jiǎn)介與注冊(cè)密鑰
NVIDIA Jetson Nano 2GB 系列文章(55):安裝TAO模型訓(xùn)練工具
NVIDIA Jetson Nano 2GB 系列文章(56):?jiǎn)?dòng)器CLI指令集與配置文件
NVIDIA Jetson Nano 2GB 系列文章(57):視覺類腳本的環(huán)境配置與映射
NVIDIA Jetson Nano 2GB 系列文章(58):視覺類的數(shù)據(jù)格式
NVIDIA Jetson Nano 2GB 系列文章(59):視覺類的數(shù)據(jù)增強(qiáng)
NVIDIA Jetson Nano 2GB 系列文章(60):圖像分類的模型訓(xùn)練與修剪
NVIDIA Jetson Nano 2GB 系列文章(61):物件檢測(cè)的模型訓(xùn)練與優(yōu)化
NVIDIA Jetson Nano 2GB 系列文章(62):物件檢測(cè)的模型訓(xùn)練與優(yōu)化-2
NVIDIA Jetson Nano 2GB 系列文章(63):物件檢測(cè)的模型訓(xùn)練與優(yōu)化-3
NVIDIA Jetson Nano 2GB 系列文章(64):將模型部署到Jetson設(shè)備
NVIDIA Jetson Nano 2GB 系列文章(65):執(zhí)行部署的 TensorRT 加速引擎
NVIDIA Jetson 系列文章(1):硬件開箱
NVIDIA Jetson 系列文章(2):配置操作系統(tǒng)
NVIDIA Jetson 系列文章(3):安裝開發(fā)環(huán)境
NVIDIA Jetson 系列文章(4):安裝DeepStream
NVIDIA Jetson 系列文章(5):使用Docker容器的入門技巧
NVIDIA Jetson 系列文章(6):使用容器版DeepStream
NVIDIA Jetson 系列文章(7):配置DS容器Python開發(fā)環(huán)境
NVIDIA Jetson 系列文章(8):用DS容器執(zhí)行Python范例
NVIDIA Jetson 系列文章(9):為容器接入U(xiǎn)SB攝像頭
NVIDIA Jetson 系列文章(10):從頭創(chuàng)建Jetson的容器(1)
NVIDIA Jetson 系列文章(11):從頭創(chuàng)建Jetson的容器(2)
NVIDIA Jetson 系列文章(12):創(chuàng)建各種YOLO-l4t容器
NVIDIA Triton系列文章(1):應(yīng)用概論
NVIDIA Triton系列文章(2):功能與架構(gòu)簡(jiǎn)介
NVIDIA Triton系列文章(3):開發(fā)資源說(shuō)明
NVIDIA Triton系列文章(4):創(chuàng)建模型倉(cāng)
NVIDIA Triton 系列文章(5):安裝服務(wù)器軟件
NVIDIA Triton 系列文章(6):安裝用戶端軟件
原文標(biāo)題:NVIDIA Triton 系列文章(7):image_client 用戶端參數(shù)
文章出處:【微信公眾號(hào):NVIDIA英偉達(dá)企業(yè)解決方案】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
-
英偉達(dá)
+關(guān)注
關(guān)注
22文章
3815瀏覽量
91492
原文標(biāo)題:NVIDIA Triton 系列文章(7):image_client 用戶端參數(shù)
文章出處:【微信號(hào):NVIDIA-Enterprise,微信公眾號(hào):NVIDIA英偉達(dá)企業(yè)解決方案】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論