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