前面已經(jīng)做好了每個(gè)推理模型的基礎(chǔ)配置,基本上就能正常讓 Triton 服務(wù)器使用這些獨(dú)立模型進(jìn)行推理。接下來(lái)的重點(diǎn),就是要讓設(shè)備的計(jì)算資源盡可能地充分使用,首先第一件事情就是模型并發(fā)執(zhí)行(concurrent model execution)的調(diào)試,這是提升 Triton 服務(wù)器性能的最基本任務(wù)。
Triton 服務(wù)器支持的模型并發(fā)能力,包括一個(gè)模型并發(fā)多個(gè)推理實(shí)例,以及多個(gè)模型的多個(gè)并發(fā)實(shí)例。至于能并發(fā)多少實(shí)例?就需要根據(jù)系統(tǒng)上的硬件配置,Triton 支持純 CPU 以及多 GPU 的計(jì)算環(huán)境。
GPU 是能夠同時(shí)執(zhí)行多個(gè)工作負(fù)載的計(jì)算引擎,Triton 推理服務(wù)器通過(guò)在 GPU上同時(shí)運(yùn)行多個(gè)模型,最大限度地提高性能并減少端到端延遲,這些模型可以完全相同也可以是不同框架的不同模型,顯存大小是唯一限制并發(fā)運(yùn)行模型數(shù)量的因素。
下圖顯示了兩個(gè)計(jì)算模型 compute model 0 與 compute model 1 的示例,假設(shè) Triton 服務(wù)器當(dāng)前處于等待狀態(tài),當(dāng) request 0 與 request 1 兩個(gè)請(qǐng)求同時(shí)到達(dá)時(shí),Triton 會(huì)立即將這兩個(gè)請(qǐng)求調(diào)度到 GPU 上(下圖左),開(kāi)始并發(fā)處理這兩個(gè)模型的推理計(jì)算。
默認(rèn)情況下,Triton 指定系統(tǒng)中的每個(gè)可用 GPU 為每個(gè)模型提供一個(gè)實(shí)例,如果同一模型的多個(gè)請(qǐng)求同時(shí)到達(dá),Triton 將通過(guò)在 GPU 上一次只調(diào)度一個(gè)請(qǐng)求來(lái)串行化它們的執(zhí)行(上圖中)。這樣的方式在管理上是最輕松的,但是執(zhí)行效率并不好,因?yàn)橛?jì)算性能并未被充分調(diào)用。
Triton 提供了一個(gè) “instance_group” 的模型配置選項(xiàng),通過(guò)在模型配置中使用這個(gè)字段,可以更改模型的執(zhí)行實(shí)例數(shù),調(diào)整每個(gè)模型的并發(fā)執(zhí)行數(shù)量。
上圖右就是在 model 1 配置文件中,添加 “instance_group” 配置,并且設(shè)置 “count: 3” 的參數(shù),這樣就允許一個(gè) GPU 上可以并發(fā)三個(gè)實(shí)例的模型計(jì)算,如果用戶(hù)端發(fā)出超過(guò) 3 個(gè)推理請(qǐng)求時(shí),則第 4 個(gè) model 1 推理請(qǐng)求就必須等到前三個(gè)實(shí)例中的任一個(gè)執(zhí)行完之后,才能開(kāi)始執(zhí)行。
Triton可以提供一個(gè)模型的多個(gè)實(shí)例,從而可以同時(shí)處理該模型的多條推理請(qǐng)求。模型配置 ModelInstanceGroup 屬性用于指定應(yīng)可用的執(zhí)行實(shí)例的數(shù)量以及應(yīng)為這些實(shí)例使用的計(jì)算資源。接下來(lái)就看看幾個(gè)標(biāo)準(zhǔn)用法:
1. 單 CPU 或 GPU 單實(shí)例
未添加任何 instance_group 參數(shù)時(shí),表示這個(gè)模型使用默認(rèn)的配置,這時(shí)該模型可以在系統(tǒng)中可用的每個(gè) GPU 中創(chuàng)建單個(gè)執(zhí)行實(shí)例。如果用戶(hù)端提出多個(gè)請(qǐng)求時(shí),就會(huì)在 GPU 設(shè)備上按照串行方式執(zhí)行計(jì)算,如同上圖中 compute model 1 的狀態(tài)。
2. 單 CPU 或 GPU 并發(fā)多實(shí)例
實(shí)例組設(shè)置可用于在每個(gè) GPU 上或僅在某些 GPU 上放置模型的多個(gè)執(zhí)行實(shí)例。例如,以下配置將在每個(gè)系統(tǒng) GPU 上放置模型的兩個(gè)執(zhí)行實(shí)例。如果要讓模型在一個(gè) GPU 上執(zhí)行多個(gè)并行實(shí)例,就將以下的內(nèi)容寫(xiě)入模型配置文件內(nèi),這里配置的是 2 個(gè)并發(fā)實(shí)例:
instance_group [
count: 2
kind: KIND_GPU
]
如果將上面配置的計(jì)算設(shè)備配置為 “kind:KIND_CPU” ,就是指定在 CPU 可以并發(fā)兩個(gè)推理計(jì)算。
3. 多 CPU 或 GPU 并發(fā)多實(shí)例
如果設(shè)備上有多個(gè)計(jì)算設(shè)備,不管是 CPU 或 GPU,都可以使用以下配置方式,為模型配置多個(gè)并發(fā)推理實(shí)例:
instance_group [
{
count: 1
kind: KIND_GPU
gpus: [ 0 ]
},
{
count: 2
kind: KIND_GPU
gpus: [ 1, 2 ]
}
]
這里的內(nèi)容,表示 Triton 服務(wù)器至少啟動(dòng) 3 個(gè) GPU 計(jì)算設(shè)備,這個(gè)推理模型在編號(hào)為 0 的 GPU 上啟動(dòng) 1 個(gè)并發(fā)實(shí)例,在編號(hào)為 1 與 2 的 GPU 上可以同時(shí)啟動(dòng) 2 個(gè)并發(fā)實(shí)例,以此類(lèi)推。
以上是 instance_group 的基礎(chǔ)配置內(nèi)容,如果要對(duì)每個(gè) GPU 設(shè)備的計(jì)算資源進(jìn)行更深層的配置,還可以配合一個(gè)“比例限制器配置(Rate Limiter Configuration)”參數(shù)設(shè)置,對(duì)于執(zhí)行實(shí)例進(jìn)行資源的限制,以便于在不同實(shí)例直接取得計(jì)算平衡。
這個(gè)比例限制器的配置,主要有以下兩部分:
- 資源(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” 的計(jì)算資源,其內(nèi)容是需要 2 份設(shè)備內(nèi)存的副本;
-
第 2 組配置:可并發(fā)執(zhí)行數(shù)量為 4,指定使用 gpu[1, 2] 兩個(gè)設(shè)備,需要名為 “R2” 的計(jì)算資源,其內(nèi)容是需要 4 份全局共享內(nèi)存的副本,
- 優(yōu)先級(jí)(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 個(gè)模型實(shí)例,每個(gè)設(shè)備(0、1和2)上執(zhí)行一個(gè),每個(gè)實(shí)例需要 4 個(gè) “R1” 和 2 個(gè)具有全局資源的 “R2” 資源才能執(zhí)行,并將比例限制器的優(yōu)先級(jí)設(shè)置為 2。
這三個(gè)實(shí)例之間不會(huì)爭(zhēng)奪 “R1” 資源,因?yàn)?“R1” 對(duì)于它們自己的設(shè)備是本地的,但是會(huì)爭(zhēng)奪 “R2” 資源,因?yàn)樗恢付槿仲Y源,這意味著 “R2” 在整個(gè)系統(tǒng)中共享。雖然這些實(shí)例之間不爭(zhēng) “R1”,但它們將與其他模型實(shí)例爭(zhēng)奪 “R1“,這些模型實(shí)例在資源需求中包含 “R1” 并與它們?cè)谕辉O(shè)備上運(yùn)行。
這是對(duì)所有模型的所有實(shí)例進(jìn)行優(yōu)先級(jí)排序,優(yōu)先級(jí) 2 的實(shí)例將被賦予優(yōu)先級(jí) 1 的實(shí)例 1/2 的調(diào)度機(jī)會(huì)數(shù)。
以上是關(guān)于 Triton 服務(wù)器“模型并發(fā)執(zhí)行”的基礎(chǔ)內(nèi)容,后面還有更多關(guān)于調(diào)度器(scheduler)與批量處理器(batcher)的配合內(nèi)容,能更進(jìn)一步地協(xié)助開(kāi)發(fā)人員調(diào)試系統(tǒng)的總體性能。
原文標(biāo)題:NVIDIA Triton 系列文章(10):模型并發(fā)執(zhí)行
文章出處:【微信公眾號(hào):NVIDIA英偉達(dá)企業(yè)解決方案】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
-
英偉達(dá)
+關(guān)注
關(guān)注
22文章
3829瀏覽量
91630
原文標(biāo)題:NVIDIA Triton 系列文章(10):模型并發(fā)執(zhí)行
文章出處:【微信號(hào):NVIDIA-Enterprise,微信公眾號(hào):NVIDIA英偉達(dá)企業(yè)解決方案】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論