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

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