前面已經(jīng)做好了每個推理模型的基礎(chǔ)配置,基本上就能正常讓 Triton 服務(wù)器使用這些獨立模型進行推理。接下來的重點,就是要讓設(shè)備的計算資源盡可能地充分使用,首先第一件事情就是模型并發(fā)執(zhí)行(concurrent model execution)的調(diào)試,這是提升 Triton 服務(wù)器性能的最基本任務(wù)。
Triton 服務(wù)器支持的模型并發(fā)能力,包括一個模型并發(fā)多個推理實例,以及多個模型的多個并發(fā)實例。至于能并發(fā)多少實例?就需要根據(jù)系統(tǒng)上的硬件配置,Triton 支持純 CPU 以及多 GPU 的計算環(huán)境。
GPU 是能夠同時執(zhí)行多個工作負(fù)載的計算引擎,Triton 推理服務(wù)器通過在 GPU上同時運行多個模型,最大限度地提高性能并減少端到端延遲,這些模型可以完全相同也可以是不同框架的不同模型,顯存大小是唯一限制并發(fā)運行模型數(shù)量的因素。
下圖顯示了兩個計算模型 compute model 0 與 compute model 1 的示例,假設(shè) Triton 服務(wù)器當(dāng)前處于等待狀態(tài),當(dāng) request 0 與 request 1 兩個請求同時到達(dá)時,Triton 會立即將這兩個請求調(diào)度到 GPU 上(下圖左),開始并發(fā)處理這兩個模型的推理計算。

默認(rèn)情況下,Triton 指定系統(tǒng)中的每個可用 GPU 為每個模型提供一個實例,如果同一模型的多個請求同時到達(dá),Triton 將通過在 GPU 上一次只調(diào)度一個請求來串行化它們的執(zhí)行(上圖中)。這樣的方式在管理上是最輕松的,但是執(zhí)行效率并不好,因為計算性能并未被充分調(diào)用。
Triton 提供了一個 “instance_group” 的模型配置選項,通過在模型配置中使用這個字段,可以更改模型的執(zhí)行實例數(shù),調(diào)整每個模型的并發(fā)執(zhí)行數(shù)量。
上圖右就是在 model 1 配置文件中,添加 “instance_group” 配置,并且設(shè)置 “count: 3” 的參數(shù),這樣就允許一個 GPU 上可以并發(fā)三個實例的模型計算,如果用戶端發(fā)出超過 3 個推理請求時,則第 4 個 model 1 推理請求就必須等到前三個實例中的任一個執(zhí)行完之后,才能開始執(zhí)行。
Triton可以提供一個模型的多個實例,從而可以同時處理該模型的多條推理請求。模型配置 ModelInstanceGroup 屬性用于指定應(yīng)可用的執(zhí)行實例的數(shù)量以及應(yīng)為這些實例使用的計算資源。接下來就看看幾個標(biāo)準(zhǔn)用法:
1. 單 CPU 或 GPU 單實例
未添加任何 instance_group 參數(shù)時,表示這個模型使用默認(rèn)的配置,這時該模型可以在系統(tǒng)中可用的每個 GPU 中創(chuàng)建單個執(zhí)行實例。如果用戶端提出多個請求時,就會在 GPU 設(shè)備上按照串行方式執(zhí)行計算,如同上圖中 compute model 1 的狀態(tài)。
2. 單 CPU 或 GPU 并發(fā)多實例
實例組設(shè)置可用于在每個 GPU 上或僅在某些 GPU 上放置模型的多個執(zhí)行實例。例如,以下配置將在每個系統(tǒng) GPU 上放置模型的兩個執(zhí)行實例。如果要讓模型在一個 GPU 上執(zhí)行多個并行實例,就將以下的內(nèi)容寫入模型配置文件內(nèi),這里配置的是 2 個并發(fā)實例:
instance_group [
count: 2
kind: KIND_GPU
]
如果將上面配置的計算設(shè)備配置為 “kind:KIND_CPU” ,就是指定在 CPU 可以并發(fā)兩個推理計算。
3. 多 CPU 或 GPU 并發(fā)多實例
如果設(shè)備上有多個計算設(shè)備,不管是 CPU 或 GPU,都可以使用以下配置方式,為模型配置多個并發(fā)推理實例:
instance_group [
{
count: 1
kind: KIND_GPU
gpus: [ 0 ]
},
{
count: 2
kind: KIND_GPU
gpus: [ 1, 2 ]
}
]
這里的內(nèi)容,表示 Triton 服務(wù)器至少啟動 3 個 GPU 計算設(shè)備,這個推理模型在編號為 0 的 GPU 上啟動 1 個并發(fā)實例,在編號為 1 與 2 的 GPU 上可以同時啟動 2 個并發(fā)實例,以此類推。
以上是 instance_group 的基礎(chǔ)配置內(nèi)容,如果要對每個 GPU 設(shè)備的計算資源進行更深層的配置,還可以配合一個“比例限制器配置(Rate Limiter Configuration)”參數(shù)設(shè)置,對于執(zhí)行實例進行資源的限制,以便于在不同實例直接取得計算平衡。
這個比例限制器的配置,主要有以下兩部分:
- 資源(Reousrces)限制:
instance_group [
{
count: 2
kind: KIND_GPU
gpus: [ 0 ]
rate_limiter {
resources [
{
name: "R1"
count: 4
}
]
}
},
{
count: 4
kind: KIND_GPU
gpus: [ 1, 2 ]
rate_limiter {
resources [
{
name: "R2"
global: True
count: 2
}
]
}
}
]
-
第 1 組配置:可并發(fā)執(zhí)行數(shù)量為 2,指定使用 gpu[0] 設(shè)備,需要名為 “R1” 的計算資源,其內(nèi)容是需要 2 份設(shè)備內(nèi)存的副本;
-
第 2 組配置:可并發(fā)執(zhí)行數(shù)量為 4,指定使用 gpu[1, 2] 兩個設(shè)備,需要名為 “R2” 的計算資源,其內(nèi)容是需要 4 份全局共享內(nèi)存的副本,
- 優(yōu)先級(Priority)設(shè)置:
instance_group [
count: 1
kind: KIND_GPU
gpus: [ 0, 1, 2 ]
rate_limiter {
resources [
name: "R1"
count: 4
name: "R2"
global: True
count: 2
priority: 2
上面配置組的 3 個模型實例,每個設(shè)備(0、1和2)上執(zhí)行一個,每個實例需要 4 個 “R1” 和 2 個具有全局資源的 “R2” 資源才能執(zhí)行,并將比例限制器的優(yōu)先級設(shè)置為 2。
這三個實例之間不會爭奪 “R1” 資源,因為 “R1” 對于它們自己的設(shè)備是本地的,但是會爭奪 “R2” 資源,因為它被指定為全局資源,這意味著 “R2” 在整個系統(tǒng)中共享。雖然這些實例之間不爭 “R1”,但它們將與其他模型實例爭奪 “R1“,這些模型實例在資源需求中包含 “R1” 并與它們在同一設(shè)備上運行。
這是對所有模型的所有實例進行優(yōu)先級排序,優(yōu)先級 2 的實例將被賦予優(yōu)先級 1 的實例 1/2 的調(diào)度機會數(shù)。
以上是關(guān)于 Triton 服務(wù)器“模型并發(fā)執(zhí)行”的基礎(chǔ)內(nèi)容,后面還有更多關(guān)于調(diào)度器(scheduler)與批量處理器(batcher)的配合內(nèi)容,能更進一步地協(xié)助開發(fā)人員調(diào)試系統(tǒng)的總體性能。
原文標(biāo)題:NVIDIA Triton 系列文章(10):模型并發(fā)執(zhí)行
文章出處:【微信公眾號:NVIDIA英偉達(dá)企業(yè)解決方案】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
-
英偉達(dá)
+關(guān)注
關(guān)注
23文章
4038瀏覽量
97607
原文標(biāo)題:NVIDIA Triton 系列文章(10):模型并發(fā)執(zhí)行
文章出處:【微信號:NVIDIA-Enterprise,微信公眾號:NVIDIA英偉達(dá)企業(yè)解決方案】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
利用NVIDIA Cosmos開放世界基礎(chǔ)模型加速物理AI開發(fā)
面向科學(xué)仿真的開放模型系列NVIDIA Apollo正式發(fā)布
NVIDIA 利用全新開源模型與仿真庫加速機器人研發(fā)進程
NVIDIA Nemotron Nano 2推理模型發(fā)布
使用NVIDIA Triton和TensorRT-LLM部署TTS應(yīng)用的最佳實踐

NVIDIA Triton 系列文章(10):模型并發(fā)執(zhí)行
評論