0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

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

NVIDIA英偉達(dá)企業(yè)解決方案 ? 來源:未知 ? 2023-01-11 06:35 ? 次閱讀

在 Triton 推理服務(wù)器的使用中,模型(model)類別與調(diào)度器(scheduler)、批量處理器(batcher)類型的搭配,是整個(gè)管理機(jī)制中最重要的環(huán)節(jié),三者之間根據(jù)實(shí)際計(jì)算資源與使用場(chǎng)景的要求去進(jìn)行調(diào)配,這是整個(gè) Triton 服務(wù)器中比較復(fù)雜的部分。

在模型類別中有“無狀態(tài)(stateless)”、“有狀態(tài)(stateful)”“集成(ensemble)”三種,調(diào)度器方面則有“標(biāo)準(zhǔn)調(diào)度器(default scheduler)”“集成調(diào)度器(ensemble scheduler)”兩種,而標(biāo)準(zhǔn)調(diào)度器下面還有“動(dòng)態(tài)批量處理器(dynamic batcher)”“序列批量處理器(sequence batcher)”兩種批量處理器。

模型類別與調(diào)度器/批量處理器之間存在一些關(guān)聯(lián)性,以下整理出一個(gè)簡(jiǎn)單的配合表格,提供大家參考:

類別

調(diào)度器

批量處理器

使用場(chǎng)景

無狀態(tài)

標(biāo)準(zhǔn)調(diào)度器

動(dòng)態(tài)批量處理器

面向各自獨(dú)立的推理模型

有狀態(tài)

標(biāo)準(zhǔn)調(diào)度器

序列批量處理器

處理存在交互關(guān)系的推理模型組

集成

集成調(diào)度器

創(chuàng)建復(fù)雜的工作流水線

接下去就要為這幾個(gè)管理機(jī)制的組合進(jìn)行說明,由于內(nèi)容較多并且不均衡,特別是“有狀態(tài)模型”與“集成模型”兩部分的使用是相對(duì)復(fù)雜的,因此這些組合會(huì)分為三篇文章來進(jìn)行較為深入的說明。

1. 無狀態(tài)(Stateless)模式:

這是 Triton 默認(rèn)的模型模式,最主要的要求就是“模型所維護(hù)的狀態(tài)不跨越推理請(qǐng)求”,也就是不存在與其他推理請(qǐng)求有任何交互關(guān)系,大部分處于最末端的獨(dú)立推理模型,都適合使用這種模式,例如車牌檢測(cè)最末端的將圖像識(shí)別成符號(hào)的推理、為車輛識(shí)別顏色/種類/廠牌的圖像分類等,還有 RNN 以及具有內(nèi)部?jī)?nèi)存的類似模型,也可以是無狀態(tài)的。

2. 有狀態(tài)(Stateful)模式:

很多提供云服務(wù)的系統(tǒng),需要具備同時(shí)接受多個(gè)推理請(qǐng)求去形成一系列推理的能力,這些推理必須路由到某些特定模型實(shí)例中,以便正確更新模型維護(hù)的狀態(tài)。此外,該模型可能要求推理服務(wù)器提供控制信號(hào),例如指示序列的開始和結(jié)束。

Triton 服務(wù)器提供動(dòng)態(tài)(dynamic)與序列(sequence)兩種批量處理器(batcher),其中序列批量處理器必須用于這種有狀態(tài)模式,因?yàn)樾蛄兄械乃型评碚?qǐng)求都被路由到同一個(gè)模型實(shí)例,以便模型能夠正確地維護(hù)狀態(tài)。

序列批量處理程序還需要與模型相互傳遞信息,以指示序列的開始、結(jié)束、具有可執(zhí)行推理請(qǐng)求的時(shí)間,以及序列的關(guān)聯(lián)編號(hào)(ID)。當(dāng)對(duì)有狀態(tài)模型進(jìn)行推理請(qǐng)求時(shí),客戶端應(yīng)用程序必須為序列中的所有請(qǐng)求提供相同的關(guān)聯(lián)編號(hào),并且還必須標(biāo)記序列的開始和結(jié)束。

下面是這種模式的控制行為有“控制輸入”、“隱式狀態(tài)管理”“調(diào)度策略”三個(gè)部分,本文后面先說明控制輸入的內(nèi)容,另外兩個(gè)部分在下篇文章內(nèi)講解。

(1) 控制輸入(control inputs)

為了使有狀態(tài)模型能夠與序列批處理程序一起正確運(yùn)行,模型通常必須接受 Triton 用于與模型通信的一個(gè)或多個(gè)控制輸入張量。

模型配置的sequence_batching里的control_input部分,指示模型如何公開序列批處理程序應(yīng)用于這些控件的張量。所有控件都是可選的,下面是模型配置的一部分,顯示了所有可用控制信號(hào)的示例配置:

05204e62-9136-11ed-bfe3-dac502259ad0.png

  • 開始(start):

這個(gè)輸入張量在配置中使用“CONTROL_SEQUENCE_START”指定,上面配置表明模型有一個(gè)名為“START”的輸入張量,其數(shù)據(jù)類型為 32 位浮點(diǎn)數(shù),序列批量處理程序?qū)⒃趯?duì)模型執(zhí)行推理時(shí)定義此張量。

START 輸入張量必須是一維的,大小等于批量大小,張量中的每個(gè)元素指示相應(yīng)批槽中的序列是否開始。上面配置中“fp32_false_true”表示,當(dāng)張量元素等于 0 時(shí)為“false(不開始)”、等于 1 時(shí)為“ture(開始)”。

  • 結(jié)束(End):

結(jié)束輸入張量在配置中使用“CONTROL_SEQUENCE_END”指定,上面配置表明模型有一個(gè)名為“END”的輸入張量,具有 32 位浮點(diǎn)數(shù)據(jù)類型,序列批處理程序?qū)⒃趯?duì)模型執(zhí)行推理時(shí)定義此張量。

END 輸入張量必須是一維的,大小等于批量大小,張量中的每個(gè)元素指示相應(yīng)批槽中的序列是否開始。上面配置中“fp32_false_true”表示,當(dāng)張量元素等于 0 時(shí)為“false(不結(jié)束)”、等于 1 時(shí)為“ture(結(jié)束)”。

  • 準(zhǔn)備就緒(Ready):

就緒輸入張量在配置中使用“CONTROL_SEQUENCE_READY”指定,上面配置表明模型有一個(gè)名為“READY”的輸入張量,其數(shù)據(jù)類型為 32 位浮點(diǎn)數(shù),序列批處理程序?qū)⒃趯?duì)模型執(zhí)行推理時(shí)定義此張量。

READY 輸入張量必須是一維的,大小等于批量大小,張量中的每個(gè)元素指示相應(yīng)批槽中的序列是否開始。上面配置中“fp32_false_true”表示,當(dāng)張量元素等于 0 時(shí)為“false(未就緒)”、等于1時(shí)為“ture(就緒)”。

  • 關(guān)聯(lián)編號(hào)(Correlation ID):

關(guān)聯(lián)編號(hào)輸入張量在配置中使用“CONTROL_SEQUENCE_CORRID”指定,上面置表明模型有一個(gè)名為“CORRID”的輸入張量,其數(shù)據(jù)類型為無符號(hào) 64 位整數(shù),序列批處理程序?qū)⒃趯?duì)模型執(zhí)行推理時(shí)定義此張量。

CORRID 張量必須是一維的,大小等于批量大小,張量中的每個(gè)元素表示相應(yīng)批槽中序列的相關(guān)編號(hào)。

(2) 隱式狀態(tài)管理(implicit State Management)

這種方式允許有狀態(tài)模型將其狀態(tài)存儲(chǔ)在 Triton 服務(wù)器中。當(dāng)使用隱式狀態(tài)時(shí),有狀態(tài)模型不需要在模型內(nèi)部存儲(chǔ)推理所需的狀態(tài)。不過隱式狀態(tài)管理需要后端(backend)支持。目前只有 onnxruntime_backend 和 tensorrt_backend 支持隱式狀態(tài)。

下面是模型配置的一部分,在sequence_batching配置中的 state 部分,就是用于指示該模型正在使用隱式狀態(tài):

sequence_batching {
  state  [
    {
       input_name: "INPUT_STATE"
       output_name: "OUTPUT_STATE"
       data_type: TYPE_INT32
      dims:  [ -1 ]
    }
  ]
}

這里做簡(jiǎn)單的說明:

  • 字段說明:

  • input_name 字段:指定將包含輸入狀態(tài)的輸入張量的名稱;
  • output_name 字段:描述由包含輸出狀態(tài)的模型生成的輸出張量的名稱;
  • dims 字段:指定狀態(tài)張量的維度。

  • 執(zhí)行要點(diǎn):

  • 序列中第 i 個(gè)請(qǐng)求中模型提供的輸出狀態(tài),將用作第 i+1 個(gè)請(qǐng)求中的輸入狀態(tài);
  • 當(dāng) dims 字段包含可變大小的維度時(shí),輸入狀態(tài)和輸出狀態(tài)的尺度不必匹配;
  • 出于調(diào)試目的,客戶端可以請(qǐng)求輸出狀態(tài)。為了實(shí)現(xiàn)這個(gè)目的,模型配置的輸出部分必須將輸出狀態(tài)(OUTPUT_STATE)列為模型的一個(gè)輸出;
  • 由于需要傳輸額外的張量,從客戶端請(qǐng)求輸出狀態(tài)可能會(huì)增加請(qǐng)求延遲。

默認(rèn)情況下,序列中的啟動(dòng)請(qǐng)求包含輸入狀態(tài)的未初始化數(shù)據(jù)。模型可以使用請(qǐng)求中的開始標(biāo)志來檢測(cè)新序列的開始,并通過在模型輸出中提供初始狀態(tài)來初始化模型狀態(tài),如果模型狀態(tài)描述中的 dims 部分包含可變尺度,則 Triton 在開始請(qǐng)求時(shí)將每個(gè)可變尺寸設(shè)置為“1”。對(duì)于序列中的其他非啟動(dòng)請(qǐng)求,輸入狀態(tài)是序列中前一個(gè)請(qǐng)求的輸出狀態(tài)。

對(duì)于狀態(tài)初的初始化部分,有以下兩種狀況需要調(diào)整:

  • 啟動(dòng)請(qǐng)求時(shí):則模型將“OUTPUT_STATE”設(shè)置為等于“INPUT”張量;

  • 非啟動(dòng)請(qǐng)求時(shí):將“OUTPUT_STATE”設(shè)為“INPUT”和“INPUT_STATE”張量之和。

除了上面討論的默認(rèn)狀態(tài)初始化之外,Triton 還提供了“從 0 開始”與“從文件導(dǎo)入”兩種初始化狀態(tài)的機(jī)制。下面提供兩種初始化的配置示例:

052f0830-9136-11ed-bfe3-dac502259ad0.png

兩個(gè)配置只有粗體部分不一樣,其余內(nèi)容都是相同的,提供讀者做個(gè)參考。

以上是關(guān)于有狀態(tài)模型的“控制輸入”與“隱式狀態(tài)管理”的使用方式,剩下的“調(diào)度策略”部分,會(huì)在后文中提供完整的說明。


原文標(biāo)題:NVIDIA Triton 系列文章(11):模型類別與調(diào)度器-1

文章出處:【微信公眾號(hào):NVIDIA英偉達(dá)企業(yè)解決方案】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 英偉達(dá)
    +關(guān)注

    關(guān)注

    22

    文章

    3786

    瀏覽量

    91277

原文標(biāo)題:NVIDIA Triton 系列文章(11):模型類別與調(diào)度器-1

文章出處:【微信號(hào):NVIDIA-Enterprise,微信公眾號(hào):NVIDIA英偉達(dá)企業(yè)解決方案】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Triton編譯與GPU編程的結(jié)合應(yīng)用

    Triton編譯簡(jiǎn)介 Triton編譯是一種針對(duì)并行計(jì)算優(yōu)化的編譯,它能夠自動(dòng)將高級(jí)語言代碼轉(zhuǎn)換為針對(duì)特定硬件優(yōu)化的低級(jí)代碼。
    的頭像 發(fā)表于 12-25 09:13 ?243次閱讀

    Triton編譯如何提升編程效率

    開發(fā)者能夠更快地開發(fā)出更高效的軟件。 1. 代碼優(yōu)化 1.1 編譯時(shí)優(yōu)化 Triton 編譯在編譯時(shí)進(jìn)行了大量的代碼優(yōu)化。這些優(yōu)化包括但不限于: 指令選擇 :Triton 編譯
    的頭像 發(fā)表于 12-25 09:12 ?237次閱讀

    Triton編譯在高性能計(jì)算中的應(yīng)用

    高性能計(jì)算(High-Performance Computing,HPC)是現(xiàn)代科學(xué)研究和工程計(jì)算中不可或缺的一部分。隨著計(jì)算需求的不斷增長,對(duì)計(jì)算資源的要求也越來越高。Triton編譯作為一種
    的頭像 發(fā)表于 12-25 09:11 ?254次閱讀

    Triton編譯的優(yōu)化技巧

    在現(xiàn)代計(jì)算環(huán)境中,編譯的性能對(duì)于軟件的運(yùn)行效率至關(guān)重要。Triton 編譯作為一個(gè)先進(jìn)的編譯框架,提供了一系列的優(yōu)化技術(shù),以確保生成的
    的頭像 發(fā)表于 12-25 09:09 ?234次閱讀

    Triton編譯的優(yōu)勢(shì)與劣勢(shì)分析

    Triton編譯作為一種新興的深度學(xué)習(xí)編譯,具有一系列顯著的優(yōu)勢(shì),同時(shí)也存在一些潛在的劣勢(shì)。以下是對(duì)Triton編譯
    的頭像 發(fā)表于 12-25 09:07 ?269次閱讀

    Triton編譯在機(jī)器學(xué)習(xí)中的應(yīng)用

    1. Triton編譯概述 Triton編譯NVIDIA
    的頭像 發(fā)表于 12-24 18:13 ?403次閱讀

    Triton編譯的常見問題解決方案

    Triton編譯作為一款專注于深度學(xué)習(xí)的高性能GPU編程工具,在使用過程中可能會(huì)遇到一些常見問題。以下是一些常見問題的解決方案: 一、安裝與依賴問題 檢查Python版本 Triton編譯
    的頭像 發(fā)表于 12-24 18:04 ?495次閱讀

    Triton編譯支持的編程語言

    Triton編譯支持的編程語言主要包括以下幾種: 一、主要編程語言 Python :Triton編譯通過Python接口提供了對(duì)Triton
    的頭像 發(fā)表于 12-24 17:33 ?373次閱讀

    Triton編譯與其他編譯的比較

    Triton編譯與其他編譯的比較主要體現(xiàn)在以下幾個(gè)方面: 一、定位與目標(biāo) Triton編譯 : 定位:專注于深度學(xué)習(xí)中最核心、最耗時(shí)的
    的頭像 發(fā)表于 12-24 17:25 ?382次閱讀

    Triton編譯功能介紹 Triton編譯器使用教程

    Triton 是一個(gè)開源的編譯前端,它支持多種編程語言,包括 C、C++、Fortran 和 Ada。Triton 旨在提供一個(gè)可擴(kuò)展和可定制的編譯框架,允許開發(fā)者添加新的編程語言
    的頭像 發(fā)表于 12-24 17:23 ?442次閱讀

    NVIDIA助力提供多樣、靈活的模型選擇

    在本案例中,Dify 以模型中立以及開源生態(tài)的優(yōu)勢(shì),為廣大 AI 創(chuàng)新者提供豐富的模型選擇。其集成的 NVIDIAAPI Catalog、NVIDIA NIM和Triton 推理服務(wù)
    的頭像 發(fā)表于 09-09 09:19 ?483次閱讀

    NVIDIA Nemotron-4 340B模型幫助開發(fā)者生成合成訓(xùn)練數(shù)據(jù)

    Nemotron-4 340B 是針對(duì) NVIDIA NeMo 和 NVIDIA TensorRT-LLM 優(yōu)化的模型系列,該系列包含最先進(jìn)
    的頭像 發(fā)表于 09-06 14:59 ?333次閱讀
    <b class='flag-5'>NVIDIA</b> Nemotron-4 340B<b class='flag-5'>模型</b>幫助開發(fā)者生成合成訓(xùn)練數(shù)據(jù)

    使用NVIDIA Triton推理服務(wù)來加速AI預(yù)測(cè)

    這家云計(jì)算巨頭的計(jì)算機(jī)視覺和數(shù)據(jù)科學(xué)服務(wù)使用 NVIDIA Triton 推理服務(wù)來加速 AI 預(yù)測(cè)。
    的頭像 發(fā)表于 02-29 14:04 ?594次閱讀

    在AMD GPU上如何安裝和配置triton?

    最近在整理python-based的benchmark代碼,反過來在NV的GPU上又把Triton裝了一遍,發(fā)現(xiàn)Triton的github repo已經(jīng)給出了對(duì)應(yīng)的llvm的commit id以及對(duì)應(yīng)的編譯細(xì)節(jié),然后跟著走了一遍,也順利的安裝成功,只需要按照如下方式即可完
    的頭像 發(fā)表于 02-22 17:04 ?2426次閱讀
    在AMD GPU上如何安裝和配置<b class='flag-5'>triton</b>?

    利用NVIDIA產(chǎn)品技術(shù)組合提升用戶體驗(yàn)

    本案例通過利用NVIDIA TensorRT-LLM加速指令識(shí)別深度學(xué)習(xí)模型,并借助NVIDIA Triton推理服務(wù)
    的頭像 發(fā)表于 01-17 09:30 ?711次閱讀