- 直接(direct)策略
| name: "direct_stateful_model"platform: "tensorrt_plan"max_batch_size: 2sequence_batching{ max_sequence_idle_microseconds: 5000000direct { } control_input [{name: "START" control [{ kind: CONTROL_SEQUENCE_START fp32_false_true: [ 0, 1 ]}]},{name: "READY" control [{ kind: CONTROL_SEQUENCE_READY fp32_false_true: [ 0, 1 ]}]}]}#續(xù)接右欄 | #上接左欄input [{name: "INPUT" data_type: TYPE_FP32dims: [ 100, 100 ]}]output [{name: "OUTPUT" data_type: TYPE_FP32dims: [ 10 ]}]instance_group [{ count: 2}] |
- sequence_batching 部分指示模型會(huì)使用序列調(diào)度器的 Direct 調(diào)度策略;
- 示例中模型只需要序列批處理程序的啟動(dòng)和就緒控制輸入,因此只列出這些控制;
- instance_group 表示應(yīng)該實(shí)例化模型的兩個(gè)實(shí)例;
- max_batch_size 表示這些實(shí)例中的每一個(gè)都應(yīng)該執(zhí)行批量大小為 2 的推理計(jì)算。
每個(gè)模型實(shí)例都在維護(hù)每個(gè)批處理槽的狀態(tài),并期望將給定序列的所有推理請求分發(fā)到同一槽,以便正確更新狀態(tài)。對于本例,這意味著 Triton 可以同時(shí) 4 個(gè)序列進(jìn)行推理。
使用直接調(diào)度策略,序列批處理程序會(huì)執(zhí)行以下動(dòng)作:
| 所識別的推理請求種類 | 執(zhí)行動(dòng)作 |
| 需要啟動(dòng)新序列 | 1. 有可用處理槽時(shí):就為該序列分配批處理槽2. 無可用處理槽時(shí):就將推理請求放在積壓工作中 |
| 是已分配處理槽序列的一部分 | 將該請求分發(fā)到該配置好的批量處理槽 |
| 是積壓工作中序列的一部分 | 將請求放入積壓工作中 |
| 是最后一個(gè)推理請求 | 1. 有積壓工作時(shí):將處理槽分配給積壓工作的序列2. 有積壓工作:釋放該序列處理槽給其他序列使用 |
圖左顯示了到達(dá) Triton 的 5 個(gè)請求序列,每個(gè)序列可以由任意數(shù)量的推理請求組成。圖右側(cè)顯示了推理請求序列是如何隨時(shí)間安排到模型實(shí)例上的,
- 在實(shí)例 0 與實(shí)例 1 中各有兩個(gè)槽 0 與槽 1;
- 根據(jù)接收的順序,為序列 0 至序列 3 各分配一個(gè)批量處理槽,而序列 4 與序列 5 先處于排隊(duì)等候狀態(tài);
- 當(dāng)序列 3 的請求全部完成之后,將處理槽釋放出來給序列 4 使用;
- 當(dāng)序列 1 的請求全部完成之后,將處理槽釋放出來給序列 5 使用;
?隨著時(shí)間的推移(從右向左),會(huì)發(fā)生以下情況:- 序列中第一個(gè)請求(Req 0)到達(dá)槽 0 時(shí),因?yàn)槟P蛯?shí)例尚未執(zhí)行推理,則序列調(diào)度器會(huì)立即安排模型實(shí)例執(zhí)行,因?yàn)橥评碚埱罂捎茫?/span>
- 由于這是序列中的第一個(gè)請求,因此 START 張量中的對應(yīng)元素設(shè)置為 1,但槽 1 中沒有可用的請求,因此 READY 張量僅顯示槽 0 為就緒。
- 推理完成后,序列調(diào)度器會(huì)發(fā)現(xiàn)任何批處理槽中都沒有可用的請求,因此模型實(shí)例處于空閑狀態(tài)。
- 接下來,兩個(gè)推理請求(上面的 Req 1 與下面的 Req 0)差不多的時(shí)間到達(dá),序列調(diào)度器看到兩個(gè)處理槽都是可用,就立即執(zhí)行批量大小為 2 的推理模型實(shí)例,使用 READY 顯示兩個(gè)槽都有可用的推理請求,但只有槽 1 是新序列的開始(START)。
- 對于其他推理請求,處理以類似的方式繼續(xù)。
- 最舊的(oldest)策略
| 直接(direct)策略 | 最舊的(oldest)策略 |
|
direct {} |
oldest { max_candidate_sequences: 4 } |
使用最舊的調(diào)度策略,序列批處理程序會(huì)執(zhí)行以下工作:
| 所識別的推理請求種類 | 執(zhí)行動(dòng)作 |
| 需要啟動(dòng)新序列 | 嘗試查找具有候選序列空間的模型實(shí)例,如果沒有實(shí)例可以容納新的候選序列,就將請求放在一個(gè)積壓工作中 |
| 已經(jīng)是候選序列的一部分 | 將該請求分發(fā)到該模型實(shí)例 |
| 是積壓工作中序列的一部分 | 將請求放入積壓工作中 |
| 是最后一個(gè)推理請求 | 模型實(shí)例立即從積壓工作中刪除一個(gè)序列,并將其作為模型實(shí)例中的候選序列,或者記錄如果沒有積壓工作,模型實(shí)例可以處理未來的序列。 |
這里假設(shè)每個(gè)請求的長度是相同的,那么左邊候選序列中送進(jìn)右邊批量處理槽的順序,就是上圖中間的排列順序。
最舊的策略從最舊的請求中形成一個(gè)動(dòng)態(tài)批處理,但在一個(gè)批處理中從不包含來自給定序列的多個(gè)請求,例如上面序列 D 中的最后兩個(gè)推理不是一起批處理的。
以上是關(guān)于有狀態(tài)模型的“調(diào)度策略”主要內(nèi)容,剩下的“集成模型”部分,會(huì)在下篇文章中提供完整的說明。
原文標(biāo)題:NVIDIA Triton 系列文章(11):模型類別與調(diào)度器-2
文章出處:【微信公眾號:NVIDIA英偉達(dá)企業(yè)解決方案】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
-
英偉達(dá)
+關(guān)注
關(guān)注
23文章
4022瀏覽量
97040
原文標(biāo)題:NVIDIA Triton 系列文章(11):模型類別與調(diào)度器-2
文章出處:【微信號:NVIDIA-Enterprise,微信公眾號:NVIDIA英偉達(dá)企業(yè)解決方案】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
NVIDIA開源Audio2Face模型及SDK
NVIDIA Nemotron Nano 2推理模型發(fā)布
使用NVIDIA Triton和TensorRT-LLM部署TTS應(yīng)用的最佳實(shí)踐

NVIDIA Triton 系列文章(11):模型類別與調(diào)度器-2
評論