前面兩篇文章,已經(jīng)將 Triton 的“無狀態(tài)模型”、“有狀態(tài)模型”與標準調(diào)度器的動態(tài)批量處理器與序列批量處理器的使用方式,做了較完整的說明。
大部分的實際應(yīng)用都不是單純的推理模型就能完成服務(wù)的需求,需要形成前后關(guān)系的工作流水線。例如一個二維碼掃描的應(yīng)用,除了需要第一關(guān)的二維碼識別模型之外,后面可能還得將識別出來的字符傳遞給語句識別的推理模型、關(guān)鍵字搜索引擎等功能,最后找到用戶所需要的信息,反饋給提出需求的用戶端。
本文的內(nèi)容要說明 Triton 服務(wù)器形成工作流水線的“集成推理”功能,里面包括“集成模型(ensemble model)”與“集成調(diào)度器(ensemble scheduler)”兩個部分。下面是個簡單的推理流水線示意圖,目的是對請求的輸入圖像最終反饋“圖像分類”與“語義分割”兩個推理結(jié)果:
當接收到集成模型的推斷請求時,集成調(diào)度器將:
當接收到集成模型的推斷請求時,集成調(diào)度器將:
- 確認請求中的“IMAGE”張量映射到預(yù)處理模型中的輸入“RAW_IMAGE”。
- 檢查集合中的模型,并向預(yù)處理模型發(fā)送內(nèi)部請求,因為所需的所有輸入張量都已就緒。
- 識別內(nèi)部請求的完成,收集輸出張量并將內(nèi)容映射到“預(yù)處理圖像”,這是集成中已知的唯一名稱。
- 將新收集的張量映射到集合中模型的輸入。在這種情況下,“classification_model”和“segmentation_model”的輸入將被映射并標記為就緒。
- 檢查需要新收集的張量的模型,并向輸入就緒的模型發(fā)送內(nèi)部請求,在本例中是分類模型和分割模型。請注意,響應(yīng)將根據(jù)各個模型的負載和計算時間以任意順序排列。
- 重復(fù)步驟 3-5,直到不再發(fā)送內(nèi)部請求,然后用集成輸出名稱的張量去響應(yīng)推理請求。
- 使用 image_prepoecess_model 模型,將原始圖像處理成preprocessed_image 數(shù)據(jù);
- 將 preprocessed_image 數(shù)據(jù)傳遞給 classification_model 模型,執(zhí)行圖像分類推理,最終返回“CLASSIFICATION”結(jié)果;
- 將 preprocessed_image 數(shù)據(jù)傳遞給 segmentation_model 模型,執(zhí)行語義分割推理計算,最終返回“SEGMENTATION”結(jié)果;
- 支持一個或多個模型的流水線以及這些模型之間輸入和輸出張量的連接;
- 處理多個模型的模型拼接或數(shù)據(jù)流,例如“數(shù)據(jù)處理->推理->數(shù)據(jù)后處理”等;
- 收集每個步驟中的輸出張量,并根據(jù)規(guī)范將其作為其他步驟的輸入張量;
- 所集成的模型能繼承所涉及模型的特征,在請求方的元數(shù)據(jù)必須符合集成中的模型;
- 在模型倉里為流水線創(chuàng)建一個新的“組合模型”文件夾,例如為“ensemble_model”;
- 在目路下創(chuàng)建新的 config.pbtxt,并且使用“platform: "ensemble"”來定義這個模型要執(zhí)行集成功能;
- 定義集成模型:
name:"ensemble_model"
platform: "ensemble"
max_batch_size: 1
input [
{
name: "IMAGE"
data_type: TYPE_STRING
dims: [ 1 ]
}
]
output [
{
name: "CLASSIFICATION"
data_type: TYPE_FP32
dims: [ 1000 ]
},
{
name: "SEGMENTATION"
data_type: TYPE_FP32
dims: [ 3, 224, 224 ]
}
]
從這個內(nèi)容中可以看出,Triton 服務(wù)器將這個集成模型視為一個獨立模型。
4. 定義模型的集成調(diào)度器:這部分使用“ensemble_scheduling”來調(diào)動集成調(diào)度器,將使用到模型與數(shù)據(jù)形成完整的交互關(guān)系。
在上面示例圖中,灰色區(qū)塊所形成的工作流水線中,使用到 image_prepoecess_model、classification_model、segmentation_model 三個模型,以及 preprocessed_image 數(shù)據(jù)在模型中進行傳遞。
下面提供這部分的范例配置內(nèi)容,一開始使用“ensemble_scheduling”來調(diào)用集成調(diào)度器,里面再用“step”來定義模組之間的執(zhí)行關(guān)系,透過模型的“input_map”與“output_map”的“key:value”對的方式,串聯(lián)起模型之間的交互動作:
ensemble_scheduling{
step [
{
model_name: "image_preprocess_model"
model_version: -1
input_map {
key: "RAW_IMAGE"
value: "IMAGE"
}
output_map {
key: "PREPROCESSED_OUTPUT"
value: "preprocessed_image"
}
},
{
model_name: "classification_model"
model_version: -1
input_map {
key: "FORMATTED_IMAGE"
value: "preprocessed_image"
}
output_map {
key: "CLASSIFICATION_OUTPUT"
value: "CLASSIFICATION"
}
},
{
model_name: "segmentation_model"
model_version: -1
input_map {
key: "FORMATTED_IMAGE"
value: "preprocessed_image"
}
output_map {
key: "SEGMENTATION_OUTPUT"
value: "SEGMENTATION"
}
}
]
}
這里簡單說明一下工作流程:
(1) 模型 image_preprocess_model 接收外部輸入的 IMAGE 數(shù)據(jù),進行圖像預(yù)處理任務(wù),輸出 preprocessed_image 數(shù)據(jù);(2) 模型 classification_model 的輸入為 preprocessed_image,表示這個模型的工作是在 image_preprocess_model 之后的任務(wù),執(zhí)行的推理輸出為 CLASSIFICATION;(3) 模型 segmentation_model 的輸入為 preprocessed_image,表示這個模型的工作是在 image_preprocess_model 之后的任務(wù),執(zhí)行的退輸出為 SEGMENTATION;(4) 上面兩步驟可以看出 classification_model 與 segmentation_model 屬于分支的同級模型,與上面工作流圖中的要求一致。
完成以上的步驟,就能用集成模型與集成調(diào)度器的搭配,來創(chuàng)建一個完整的推理工作流任務(wù),相當簡單。
不過這類集成模型中,還有以下幾個需要注意的重點:
- 這是 Triton 服務(wù)器用來執(zhí)行用戶定義模型流水線的抽象形式,由于沒有與集成模型關(guān)聯(lián)的物理實例,因此不能為其指定 instance_group 字段;
- 不過集成模型內(nèi)容所組成的個別模型(例如image_preprocess_model),可以在其配置文件中指定 instance_group,并在集成接收到多個請求時單獨支持并行執(zhí)行。
- 由于集成模型將繼承所涉及模型的特性,因此在請求起點的元數(shù)據(jù)(本例為“IMAGE”)必須符合集成中的模型,如果其中一個模型是有狀態(tài)模型,那么集成模型的推理請求應(yīng)該包含有狀態(tài)模型中提到的信息,這些信息將由調(diào)度器提供給有狀態(tài)模型。
原文標題:NVIDIA Triton 系列文章(13):模型與調(diào)度器-3
文章出處:【微信公眾號:NVIDIA英偉達企業(yè)解決方案】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。
舉報投訴
-
英偉達
+關(guān)注
關(guān)注
23文章
4022瀏覽量
97040
原文標題:NVIDIA Triton 系列文章(13):模型與調(diào)度器-3
文章出處:【微信號:NVIDIA-Enterprise,微信公眾號:NVIDIA英偉達企業(yè)解決方案】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
熱點推薦
NVIDIA開源Audio2Face模型及SDK
NVIDIA 現(xiàn)已開源 Audio2Face 模型與 SDK,讓所有游戲和 3D 應(yīng)用開發(fā)者都可以構(gòu)建并部署帶有先進動畫的高精度角色。NVIDIA 開源 Audio2Face 的訓(xùn)練框
NVIDIA Nemotron Nano 2推理模型發(fā)布
NVIDIA 正式推出準確、高效的混合 Mamba-Transformer 推理模型系列 NVIDIA Nemotron Nano 2。
使用NVIDIA Triton和TensorRT-LLM部署TTS應(yīng)用的最佳實踐
針對基于 Diffusion 和 LLM 類別的 TTS 模型,NVIDIA Triton 和 TensorRT-LLM 方案能顯著提升推理速度。在單張 NVIDIA Ada Love
NVIDIA RTX 5880 Ada與Qwen3系列模型實測報告
近日,阿里巴巴通義千問團隊正式推出新一代開源大語言模型——Qwen3 系列,該系列包含 6 款 Dense 稠密模型和 2 款 MoE 混合
英偉達GTC25亮點:NVIDIA Dynamo開源庫加速并擴展AI推理模型
Triton 推理服務(wù)器的后續(xù)產(chǎn)品,NVIDIA Dynamo 是一款全新的 AI 推理服務(wù)軟件,旨在為部署推理 AI 模型的 AI 工廠最大化其 token 收益。它協(xié)調(diào)并加速數(shù)千
NVIDIA推出開放式Llama Nemotron系列模型
作為 NVIDIA NIM 微服務(wù),開放式 Llama Nemotron 大語言模型和 Cosmos Nemotron 視覺語言模型可在任何加速系統(tǒng)上為 AI 智能體提供強效助力。
Triton編譯器與GPU編程的結(jié)合應(yīng)用
Triton編譯器簡介 Triton編譯器是一種針對并行計算優(yōu)化的編譯器,它能夠自動將高級語言代碼轉(zhuǎn)換為針對特定硬件優(yōu)化的低級代碼。
Triton編譯器如何提升編程效率
在現(xiàn)代軟件開發(fā)中,編譯器扮演著至關(guān)重要的角色。它們不僅將高級語言代碼轉(zhuǎn)換為機器可執(zhí)行的代碼,還通過各種優(yōu)化技術(shù)提升程序的性能。Triton 編譯器作為一種先進的編譯器,通過多種方式提升
Triton編譯器的優(yōu)化技巧
在現(xiàn)代計算環(huán)境中,編譯器的性能對于軟件的運行效率至關(guān)重要。Triton 編譯器作為一個先進的編譯器框架,提供了一系列的優(yōu)化技術(shù),以確保生成的
Triton編譯器的優(yōu)勢與劣勢分析
Triton編譯器作為一種新興的深度學習編譯器,具有一系列顯著的優(yōu)勢,同時也存在一些潛在的劣勢。以下是對Triton編譯
Triton編譯器在機器學習中的應(yīng)用
1. Triton編譯器概述 Triton編譯器是NVIDIA Triton推理服務(wù)平臺的一部分
Triton編譯器支持的編程語言
Triton編譯器支持的編程語言主要包括以下幾種: 一、主要編程語言 Python :Triton編譯器通過Python接口提供了對Triton
Triton編譯器與其他編譯器的比較
Triton編譯器與其他編譯器的比較主要體現(xiàn)在以下幾個方面: 一、定位與目標 Triton編譯器 : 定位:專注于深度學習中最核心、最耗時的
Triton編譯器功能介紹 Triton編譯器使用教程
Triton 是一個開源的編譯器前端,它支持多種編程語言,包括 C、C++、Fortran 和 Ada。Triton 旨在提供一個可擴展和可定制的編譯器框架,允許開發(fā)者添加新的編程語言

NVIDIA Triton 系列文章(13):模型與調(diào)度器-3
評論