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

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

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

如何使用NVIDIA Triton 推理服務(wù)器來(lái)運(yùn)行推理管道

jf_pJlTbmA9 ? 來(lái)源: NVIDIA ? 作者: NVIDIA ? 2023-07-05 16:30 ? 次閱讀

在許多生產(chǎn)級(jí)機(jī)器學(xué)習(xí)( ML )應(yīng)用程序中,推理并不局限于在單個(gè) ML 模型上運(yùn)行前向傳遞。相反,通常需要執(zhí)行 ML 模型的管道。例如,一個(gè)由三個(gè)模塊組成的對(duì)話式人工智能管道:一個(gè)將輸入音頻波形轉(zhuǎn)換為文本的自動(dòng)語(yǔ)音識(shí)別( ASR )模塊,一個(gè)理解輸入并提供相關(guān)響應(yīng)的大型語(yǔ)言模型( LLM )模塊,以及一個(gè)從 LLM 輸出產(chǎn)生語(yǔ)音的文本到語(yǔ)音( TTS )模塊。

或者,考慮一個(gè)文本到圖像的應(yīng)用程序,其中管道由 LLM 和擴(kuò)散模型組成,它們分別用于對(duì)輸入文本進(jìn)行編碼和從編碼的文本合成圖像。此外,許多應(yīng)用程序在將輸入數(shù)據(jù)饋送到 ML 模型之前需要對(duì)其進(jìn)行一些預(yù)處理步驟,或者對(duì)這些模型的輸出進(jìn)行后處理步驟。例如,輸入圖像在被饋送到計(jì)算機(jī)視覺(jué)模型之前可能需要被調(diào)整大小、裁剪和解碼,或者文本輸入在被饋送給 LLM 之前需要被標(biāo)記化。

近年來(lái), ML 模型中的參數(shù)數(shù)量激增,它們?cè)絹?lái)越多地被要求為龐大的消費(fèi)者群體提供服務(wù);因此,優(yōu)化推理管道變得比以往任何時(shí)候都更加重要。 NVIDIA TensorRT 和 FasterTransformer 等工具在 GPU s 上執(zhí)行推理時(shí),優(yōu)化單個(gè)深度學(xué)習(xí)模型,以獲得更低的延遲和更高的吞吐量。

然而,我們的首要目標(biāo)不是加快單個(gè) ML 模型的推理,而是加快整個(gè)推理管道。例如,當(dāng)在 GPU 上服務(wù)模型時(shí),在 CPU 上具有預(yù)處理和后處理步驟會(huì)降低整個(gè)管道的性能,即使模型執(zhí)行步驟很快。推理管道最有效的解決方案是使預(yù)處理、模型執(zhí)行和后處理步驟都在 GPU s 上運(yùn)行。這種端到端推理流水線在 GPU 上的效率來(lái)自以下兩個(gè)關(guān)鍵因素。

在流水線步驟之間,數(shù)據(jù)不需要在 CPU (主機(jī))和 GPU (設(shè)備)之間來(lái)回復(fù)制。

GPU 強(qiáng)大的計(jì)算能力被用于整個(gè)推理管道。

NVIDIA Triton Inference Server 是一款開(kāi)源推理服務(wù)軟件,用于在 CPU 和 GPU 上大規(guī)模部署和運(yùn)行模型。在許多功能中, NVIDIA Triton 支持 ensemble models ,使您能夠?qū)⑼评砉艿蓝x為有向非循環(huán)圖( DAG )形式的模型集合。 NVIDIA Triton 將處理整個(gè)管道的執(zhí)行。集成模型定義了如何將一個(gè)模型的輸出張量作為輸入饋送到另一個(gè)模型。

使用 NVIDIA Triton 集成模型,您可以在 GPU 或 CPU 上運(yùn)行整個(gè)推理管道,也可以在兩者的混合上運(yùn)行。當(dāng)涉及預(yù)處理和后處理步驟時(shí),或者當(dāng)管道中有多個(gè) ML 模型,其中一個(gè)模型的輸出饋送到另一個(gè)模型時(shí),這是有用的。對(duì)于管道包含循環(huán)、條件或其他自定義邏輯的用例, NVIDIA Triton 支持 Business Logic Scripting (BLS) 。

這篇文章只關(guān)注整體模型。它將引導(dǎo)您完成使用不同框架后端創(chuàng)建具有多個(gè)模型的端到端推理管道的步驟。 NVIDIA Triton 提供了使用多個(gè)框架后端構(gòu)建模型管道的靈活性,并在 GPU 或 CPU 上運(yùn)行它們,或兩者混合運(yùn)行。我們將探索以下三種管道運(yùn)行方式。

整個(gè)管道在 CPU 上執(zhí)行。

預(yù)處理和后處理步驟在 CPU 上運(yùn)行,模型執(zhí)行在 GPU 上運(yùn)行。

整個(gè)管道在 GPU 上執(zhí)行。

我們還將強(qiáng)調(diào)使用 NVIDIA Triton 推理服務(wù)器在 GPU 上運(yùn)行整個(gè)推理管道的優(yōu)勢(shì)。我們專注于 CommonLit Readability Kaggle challenge ,用于預(yù)測(cè) 3-12 年級(jí)文學(xué)段落的復(fù)雜度,使用 NVIDIA Triton 進(jìn)行整個(gè)推理。請(qǐng)注意, NVIDIA Triton 222.11 用于本博客文章的目的。您也可以使用 NVIDIA Triton 的更高版本,前提是您在后端使用匹配的版本(表示為),以避免可能的兼容性錯(cuò)誤。

模型創(chuàng)建

對(duì)于這項(xiàng)任務(wù),訓(xùn)練兩個(gè)獨(dú)立的模型:使用 PyTorch 訓(xùn)練的 BERT-Large 和使用 cuML 訓(xùn)練的隨機(jī)森林回歸器。將這些型號(hào)命名為bert-large和cuml。這兩個(gè)模型都會(huì)將經(jīng)過(guò)預(yù)處理的摘錄作為輸入,并輸出分?jǐn)?shù)或復(fù)雜度。

作為第一個(gè)模型,從預(yù)訓(xùn)練的 Hugging Face 模型中微調(diào)基于 transformer 的bert-large模型 bert-large-uncased 其具有 340M 個(gè)參數(shù)。通過(guò)添加一個(gè)線性層來(lái)微調(diào)任務(wù)的模型,該線性層將 BERT 的最后一個(gè)隱藏層映射到單個(gè)輸出值。

使用均方根損失、帶有權(quán)重衰減的 Adam 優(yōu)化器和 5 倍交叉驗(yàn)證進(jìn)行微調(diào)。通過(guò)在模型中傳遞示例輸入并使用以下命令跟蹤模型,將模型序列化為 TorchScript 文件(名為model.pt):

traced_script_module = torch.jit.trace(bert_pytorch_model,          
                      (example_input_ids, example_attention_mask))
traced_script_module.save("model.pt")

作為第二個(gè)模型,使用 cuML 隨機(jī)森林回歸器,其中有 100 棵樹(shù),每棵樹(shù)的最大深度為 16 。為基于樹(shù)的模型生成以下特征:每個(gè)摘錄的單詞數(shù)、每個(gè)摘錄的不同單詞數(shù)、標(biāo)點(diǎn)符號(hào)數(shù)、每個(gè)節(jié)選的句子數(shù)、每個(gè)句子的平均單詞數(shù)、每次摘錄的停止單詞數(shù)、每句子的平均停止單詞數(shù), N 最常出現(xiàn)的單詞在語(yǔ)料庫(kù)中的頻率分布,以及 N 最不頻繁單詞在語(yǔ)料庫(kù)中的頻率分布。

使用 N=100 ,這樣隨機(jī)森林總共包含 207 個(gè)特征。通過(guò)使用以下命令轉(zhuǎn)換 cuML 模型實(shí)例,將經(jīng)過(guò)訓(xùn)練的 cuML 模型序列化為 Treeite 檢查點(diǎn)(名為checkpoint.tl):

cuml_model.convert_to_treelite_model().to_treelite_checkpoint('checkpoint.tl')

請(qǐng)注意,與模型關(guān)聯(lián)的 Treelite 版本需要與用于推斷的 NVIDIA Triton 容器中的 Treeliet 版本相匹配。

在 NVIDIA Triton 上運(yùn)行 ML 模型

要在 NVIDIA Triton 中部署的每個(gè)模型都必須包括一個(gè)模型配置。默認(rèn)情況下,當(dāng)模型元數(shù)據(jù)可用時(shí), NVIDIA Triton 將嘗試使用模型元數(shù)據(jù)自動(dòng)創(chuàng)建配置。在模型元數(shù)據(jù)不足的情況下,可以手動(dòng)提供模型配置文件,也可以覆蓋推斷的設(shè)置。有關(guān)更多詳細(xì)信息,請(qǐng)參閱 GitHub 上的 triton-inference-server/server 。

要在 NVIDIA Triton 上運(yùn)行 PyTorch 格式的 BERT Large ,請(qǐng)使用 PyTorch (LibTorch) backend 。將以下行添加到模型配置文件中以指定此后端:

backend: "pytorch"

要在 NVIDIA Triton 上運(yùn)行基于樹(shù)的隨機(jī)林模型,請(qǐng)使用 FIL (Forest Inference Library) backend ,在模型配置文件中添加以下內(nèi)容:

backend: "fil"

此外,在模型配置文件中添加以下行,以指定所提供的模型為 Treeite 二進(jìn)制格式:

parameters {
    key: "model_type"
    value: { string_value: "treelite_checkpoint" } 
}

最后,在每個(gè)模型配置文件中,包括instance_group[{kind:KIND_GPU}]或instance_group[{kind:KIND_CPU}],這取決于模型是在 GPU 還是 CPU 上提供服務(wù)。

到目前為止,生成的模型存儲(chǔ)庫(kù)目錄結(jié)構(gòu)如下:

.
├── bert-large
│   ├── 1
│   │   └── model.pt
│   └── config.pbtxt
└── cuml
    ├── 1
    │   └── checkpoint.tl
    └── config.pbtxt

預(yù)處理和后處理

預(yù)處理和后處理可以在 NVIDIA Triton 服務(wù)器之外執(zhí)行,也可以作為 NVIDIA Triton 中模型集合的一部分進(jìn)行合并。對(duì)于本例,預(yù)處理和后處理由 Python 中執(zhí)行的操作組成。使用 Python backend 作為集成的一部分來(lái)運(yùn)行這些操作。

如果 NVIDIA Triton 服務(wù)器容器中提供的默認(rèn) Python 版本可以運(yùn)行 Python model ,則可以忽略以下部分,直接跳到下面標(biāo)題為“比較推理管道”的部分否則,您將需要?jiǎng)?chuàng)建一個(gè)自定義 Python 后端存根和一個(gè)自定義執(zhí)行環(huán)境,如下所述。

自定義 Python 后端存根

Python 后端使用存根進(jìn)程將model.py文件連接到 NVIDIA Triton C++核心。 Python 后端可以使用安裝在當(dāng)前[ZGK8環(huán)境(虛擬環(huán)境或Conda環(huán)境)或全局 Python 環(huán)境中的庫(kù)。

請(qǐng)注意,這假設(shè)用于編譯后端存根的 Python 版本與用于安裝依賴項(xiàng)的版本相同。寫(xiě)入時(shí)使用的 NVIDIA Triton 容器中的默認(rèn) Python 版本為 3.8 。如果需要運(yùn)行預(yù)處理和后處理的 Python 版本與 NVIDIA Triton 容器中的版本不匹配,則需要編譯 custom Python backend stub 。

要?jiǎng)?chuàng)建自定義 Python 后端存根,請(qǐng)?jiān)?NVIDIA conda容器內(nèi)安裝conda、cmake、rapidjson和 Triton 。接下來(lái),創(chuàng)建一個(gè) Conda 虛擬環(huán)境(請(qǐng)參見(jiàn) documentation ),并使用以下命令激活它:

conda create -n custom_env python=
conda init bash
bash
conda activate custom_env

將替換為感興趣的版本,例如 3.9 。然后克隆 Python 后端回購(gòu),并使用以下代碼編譯 Python 后端存根:

git clone https://github.com/triton-inference-server/python_backend -b r
cd python_backend
mkdir build && cd build
cmake -DTRITON_ENABLE_GPU=ON -DCMAKE_INSTALL_PREFIX:PATH=`pwd`/install ..
make triton-python-backend-stub

請(qǐng)注意,必須替換為 NVIDIA Triton 容器版本。運(yùn)行上面的命令將創(chuàng)建名為triton-python-backend-stub的存根文件。這個(gè) Python 后端存根現(xiàn)在可以用來(lái)加載安裝有匹配版本[ZGK8的庫(kù)。

自定義執(zhí)行環(huán)境

如果您想為不同的 Python 型號(hào)使用不同的 Python 環(huán)境,您需要?jiǎng)?chuàng)建一個(gè) custom execution environment 。要為 Python 模型創(chuàng)建自定義執(zhí)行環(huán)境,第一步是在已經(jīng)激活的 Conda 環(huán)境中安裝任何必要的依賴項(xiàng)。然后運(yùn)行conda-pack將我們的自定義執(zhí)行環(huán)境打包為 tar 文件。這將創(chuàng)建一個(gè)名為custom_env.tar.gz的文件。

在撰寫(xiě)本文時(shí), NVIDIA Triton 僅支持conda-pack用于捕獲執(zhí)行環(huán)境。請(qǐng)注意,當(dāng)在 NVIDIA Triton Docker 容器中工作時(shí),容器中包含的包也會(huì)在conda-pack創(chuàng)建的執(zhí)行環(huán)境中捕獲。

使用 Python 后端存根和自定義執(zhí)行環(huán)境

在創(chuàng)建 Python 后端存根和自定義執(zhí)行環(huán)境后,將兩個(gè)生成的文件從容器復(fù)制到模型存儲(chǔ)庫(kù)所在的本地系統(tǒng)。在本地系統(tǒng)中,將存根文件復(fù)制到每個(gè)需要使用存根的 Python 模型(即預(yù)處理和后處理模型)的模型目錄中。對(duì)于這些模型,目錄結(jié)構(gòu)如下:

model_repository
 ├── postprocess
 │   ├── 1
 │   │   └── model.py
 │   ├── config.pbtxt
 │   └── triton_python_backend_stub
 └── preprocess
     ├── 1
     │   └── model.py
     ├── config.pbtxt
     └── triton_python_backend_stub

對(duì)于預(yù)處理和后處理模型,還需要在配置文件中提供自定義執(zhí)行環(huán)境的 tar 文件的路徑。例如,預(yù)處理模型的配置文件將包括以下代碼:

name: "preprocess"
backend: "python"

...
parameters: {
  key: "EXECUTION_ENV_PATH",
  value: {string_value: "path/to/custom_env.tar.gz"}
}

要使此步驟生效,請(qǐng)將custom_env.tar.gz存儲(chǔ)在 NVIDIA Triton 推理服務(wù)器容器可以訪問(wèn)的路徑中。

用于預(yù)處理和后處理的 model.py 文件的結(jié)構(gòu)

每個(gè) Python 模型都需要遵循 documentation 中描述的特定結(jié)構(gòu)。在model.py文件中定義以下三個(gè)功能:

1. initialize(可選,在加載模型時(shí)運(yùn)行):用于在推理之前加載必要的組件,以減少每個(gè)客戶端請(qǐng)求的開(kāi)銷。特別是對(duì)于預(yù)處理,加載 cuDF tokenizer ,它將用于標(biāo)記基于 BERT 的模型的摘錄。還加載用于隨機(jī)森林特征生成的停止詞列表,作為對(duì)基于樹(shù)的模型的輸入的一部分。

2 .execute(必需,請(qǐng)求推理時(shí)運(yùn)行):接收推理請(qǐng)求,修改輸入,并返回推理響應(yīng)。由于preprocess是推理的入口點(diǎn),如果要對(duì) GPU 執(zhí)行推理,則需要將輸入移動(dòng)到[Z1K1’。

通過(guò)創(chuàng)建cudf.Series的實(shí)例將摘錄輸入張量移動(dòng)到 GPU ,然后利用initialize中加載的 cuDF 標(biāo)記器在[Z1K1’上標(biāo)記整批摘錄。

類似地,使用字符串操作生成基于樹(shù)的特征,然后使用在 GPU 上操作的CuPY數(shù)組對(duì)特征進(jìn)行歸一化。要在 GPU 上輸出張量,請(qǐng)使用toDlpack和from_dlpack(參見(jiàn) documentation )將張量封裝到推理響應(yīng)中。

最后,為了保持張量在 GPU 上,并避免在集合中的步驟之間復(fù)制到 CPU ,請(qǐng)將以下內(nèi)容添加到每個(gè)模型的配置文件中:

parameters: {
 key: "FORCE_CPU_ONLY_INPUT_TENSORS"
 value: {
   string_value:"no"
 }
}

postprocess的輸入分?jǐn)?shù)已經(jīng)在 GPU 上了,所以只需將分?jǐn)?shù)與CuPY數(shù)組再次組合,并輸出最終的管道分?jǐn)?shù)。對(duì)于在 CPU 上進(jìn)行后處理的情況,在預(yù)處理步驟中將ML模型的輸出移動(dòng)到[Z1K2’。

3. finalize(可選,在卸載模型時(shí)運(yùn)行):使您能夠在從 NVIDIA Triton 服務(wù)器卸載模型之前完成任何必要的清理。

推理管道比較

本節(jié)介紹了不同的推理管道,并從延遲和吞吐量方面對(duì)它們進(jìn)行了比較。

CPU 上的預(yù)處理和后處理, GPU 上的 ML 模型推理

此設(shè)置使用 NVIDIA Triton 對(duì) ML 模型執(zhí)行推理,同時(shí)在客戶端所在的本地機(jī)器上使用 CPU 執(zhí)行預(yù)處理和后處理(圖 1 )。在預(yù)處理模型中,對(duì)于給定的一批文本摘錄,使用 BERT 標(biāo)記器對(duì)摘錄進(jìn)行標(biāo)記,并為 cuML 模型生成基于樹(shù)的特征。

然后將預(yù)處理模型的輸出作為推理請(qǐng)求發(fā)送給 NVIDIA Triton 。 NVIDIA Triton 然后對(duì) GPU 上的 ML 模型執(zhí)行推理并返回響應(yīng)。在 CPU 上本地對(duì)該響應(yīng)進(jìn)行后處理,以生成輸出分?jǐn)?shù)。

pipeline-NVIDIA-Triton-CPU-processing.png 圖 1 。在 NVIDIA Triton 推理服務(wù)器上運(yùn)行 ML 模型的管道設(shè)置,其中預(yù)處理和后處理步驟在 CPU 上本地執(zhí)行

在 GPU 上執(zhí)行 NVIDIA Triton 中的整個(gè)管道

在此設(shè)置中,使用 NVIDIA Triton 在 GPU 上執(zhí)行整個(gè)推理管道。對(duì)于這個(gè)例子, NVIDIA Triton 中的數(shù)據(jù)管道和流可以在圖 2 中看到。

pipeline-NVIDIA-Triton-ensemble-GPU.png 圖 2 :管道設(shè)置,包括預(yù)處理、模型執(zhí)行和后處理,所有這些都作為 NVIDIA Triton 集成在 GPU 上執(zhí)行

管道從一個(gè)預(yù)處理模型開(kāi)始,該模型將文本摘錄作為輸入,為 BERT 標(biāo)記摘錄,并為隨機(jī)森林模型提取特征。接下來(lái),在預(yù)處理模型的輸出上同時(shí)運(yùn)行兩個(gè) ML 模型,每個(gè)模型生成指示輸入文本的復(fù)雜度的分?jǐn)?shù)。最后,在后處理步驟中對(duì)得到的分?jǐn)?shù)進(jìn)行組合。

要讓 NVIDIA Triton 運(yùn)行上面的執(zhí)行管道,請(qǐng)創(chuàng)建一個(gè)名為ensemble_all的 ensemble model 。該模型與任何其他模型具有相同的模型目錄結(jié)構(gòu),只是它不存儲(chǔ)任何模型,并且只由一個(gè)配置文件組成。集成模型的目錄如下所示:

├── ensemble_all
 │   ├── 1
 │   └── config.pbtxt

在配置文件中,首先使用以下腳本指定集成模型名稱和后端:

name: "ensemble_all"
backend: "ensemble"

接下來(lái),定義集合的端點(diǎn),即集合模型的輸入和輸出:

input [
  {
    name: "excerpt"
    data_type: TYPE_STRING
    dims: [ -1 ]
  },
  {
    name: "BERT_WEIGHT"
    data_type: TYPE_FP32
    dims: [ -1 ]
  }
]
output {
    name: "SCORE"
    data_type: TYPE_FP32
    dims: [ 1 ]
  }

管道的輸入是可變長(zhǎng)度的,因此使用 -1 作為尺寸參數(shù)。輸出是一個(gè)單浮點(diǎn)數(shù)。

要?jiǎng)?chuàng)建通過(guò)不同模型的管道和數(shù)據(jù)流,請(qǐng)包括ensemble_scheduling部分。第一個(gè)模型被稱為preprocess,它將摘錄作為輸入,并輸出 BERT 令牌標(biāo)識(shí)符和注意力掩碼以及樹(shù)特征。調(diào)度的第一步顯示在模型配置的以下部分中:

ensemble_scheduling {
  step [
    {
      model_name: "preprocess"
      model_version: 1
      input_map {
        key: "INPUT0"
        value: "excerpt"
      }
      output_map {
        key: "BERT_IDS"
        value: "bert_input_ids",
      }
      output_map {
        key: "BERT_AM"
        value: "bert_attention_masks",
      }
      output_map {
        key: "TREE_FEATS"
        value: "tree_feats",
      }
    },

step部分中的每個(gè)元素都指定了要使用的模型,以及如何將模型的輸入和輸出映射到集合調(diào)度器識(shí)別的張量名稱。然后使用這些張量名稱來(lái)識(shí)別各個(gè)輸入和輸出。

例如,step中的第一個(gè)元素指定應(yīng)使用preprocess模型的版本一,其輸入"INPUT0"的內(nèi)容由"excerpt"張量提供,其輸出"BERT_IDS"的內(nèi)容將映射到"bert_input_ids"張量以供以后使用。類似的推理適用于preprocess的其他兩個(gè)輸出。

繼續(xù)在配置文件中添加步驟以指定整個(gè)管道,將preprocess的輸出傳遞到bert-large和cuml的輸入:

{
      model_name: "bert-large"
      model_version: 1
      input_map {
        key: "INPUT__0"
        value: "bert_input_ids"
      }
      input_map {
        key: "INPUT__1"
        value: "bert_attention_masks"
      }
      output_map {
        key: "OUTPUT__0"
        value: "bert_large_score"
      }
    },

最后,通過(guò)在配置文件中添加以下行,將這些分?jǐn)?shù)中的每一個(gè)傳遞到后處理模型,以計(jì)算分?jǐn)?shù)的平均值并提供單個(gè)輸出分?jǐn)?shù),如下所示:

{
      model_name: "postprocess"
      model_version: 1
      input_map {
        key: "BERT_WEIGHT_INPUT"
        value: "BERT_WEIGHT"
      }
      input_map {
        key: "BERT_LARGE_SCORE"
        value: "bert_large_score"
      }
      input_map {
        key: "CUML_SCORE"
        value: "cuml_score"
      }
      output_map {
        key: "OUTPUT0"
        value: "SCORE"
      }
    }
  }
]

在集成模型的配置文件中調(diào)度整個(gè)管道的簡(jiǎn)單性證明了使用 NVIDIA Triton 進(jìn)行端到端推理的靈活性。要添加另一個(gè)模型或添加另一數(shù)據(jù)處理步驟,請(qǐng)編輯集成模型的配置文件并更新相應(yīng)的模型目錄。

請(qǐng)注意,集成配置文件中定義的max_batch_size必須小于或等于每個(gè)模型中定義的max_batch_size。整個(gè)模型目錄,包括集成模型,如下所示:

├── bert-large
│   ├── 1
│   │   └── model.pt
│   └── config.pbtxt
├── cuml
│   ├── 1
│   │   └── checkpoint.tl
│   └── config.pbtxt
├── ensemble_all
│   ├── 1
│   │   └── empty
│   └── config.pbtxt
├── postprocess
│   ├── 1
│   │   ├── model.py
│   └── config.pbtxt
└── preprocess
    ├── 1
    │   ├── model.py
    └── config.pbtxt

要告訴 NVIDIA Triton 執(zhí)行 GPU 上的所有模型,請(qǐng)?jiān)诿總€(gè)模型的配置文件中包括以下行(集成模型的配置文檔中除外):

instance_group[{kind:KIND_GPU}]

在 CPU 上執(zhí)行 NVIDIA Triton 中的整個(gè)管道若要讓 NVIDIA Triton 在 CPU 上執(zhí)行整個(gè)管道,請(qǐng)重復(fù)在 GPU 上運(yùn)行管道的所有步驟。在每個(gè)配置文件中將instance_group[{kind:KIND_GPU}]替換為以下行:

instance_group[{kind:KIND_CPU}]

后果

我們使用 GCP a2 高 GPU -1g VM 在延遲和吞吐量方面比較了以下三個(gè)推理管道:

由 NVIDIA Triton 在英特爾至強(qiáng) CPU 上以 2.20 GHz 執(zhí)行的完整管道

NVIDIA Triton 在 NVIDIA A100 40 GB GPU 上執(zhí)行 ML 模型,在英特爾至強(qiáng) CPU 上以 2.20 GHz 本地執(zhí)行預(yù)處理和后處理

由 NVIDIA Triton 在 NVIDIA A100 40 GB GPU 上執(zhí)行的完整管道

從表 1 中的結(jié)果可以明顯看出,使用 NVIDIA Triton 在 GPU 上運(yùn)行整個(gè)管道的優(yōu)勢(shì)。對(duì)于較大的批處理大小和張量大小,吞吐量的提高更為明顯。 NVIDIA A100 40 GB 型號(hào)的執(zhí)行管道比在 2.20 GHz 下在 Intel Xeon CPU 上運(yùn)行的整個(gè)管道效率高得多。當(dāng)將預(yù)處理和后處理從 CPU 移動(dòng)到 GPU 時(shí),有進(jìn)一步的改進(jìn)。

Full pipeline on CPU Pre/postprocess on CPU; ML models on GPU Full pipeline on GPU
Latency (ms) 523 192 31
Throughput (samples/second) for batch size 512 242 7707 8308

表 1 。不同管道的延遲和吞吐量

如圖 3 所示, CPU 在非常適中的批量下受到瓶頸限制,在 GPU 上運(yùn)行整個(gè)管道可以顯著提高吞吐量。

inference-pipeline-throughput.png 圖 3 。隨著批處理大小從 1 到 512 的變化,不同推理管道的吞吐量

結(jié)論

這篇文章解釋了如何使用 NVIDIA Triton 推理服務(wù)器來(lái)運(yùn)行由預(yù)處理和后處理組成的推理管道,以及基于 transformer 的語(yǔ)言模型和基于樹(shù)的模型來(lái)解決 Kaggle 挑戰(zhàn)。 NVIDIA Triton 為同一管道的模型以及預(yù)處理和后處理邏輯提供了使用多個(gè)框架/后端的靈活性。這些管道可以在 CPU s 和/或 GPU s 上運(yùn)行。

我們表明,與在 CPU 上運(yùn)行預(yù)處理和后處理步驟以及在 GPU 上執(zhí)行模型相比,在模型執(zhí)行的同時(shí)利用 GPU s 進(jìn)行預(yù)處理和后期處理,將端到端延遲減少了 6 倍。我們還表明,使用 NVIDIA Triton 使我們能夠同時(shí)對(duì)多個(gè) ML 模型執(zhí)行推理,并且從一種部署類型(所有 CPU )到另一種(所有 GPU )只需要在配置文件中更改一行即可。

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

    關(guān)注

    14

    文章

    4990

    瀏覽量

    103118
  • 服務(wù)器
    +關(guān)注

    關(guān)注

    12

    文章

    9184

    瀏覽量

    85489
  • AI
    AI
    +關(guān)注

    關(guān)注

    87

    文章

    30947

    瀏覽量

    269213
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    NVIDIA 在首個(gè)AI推理基準(zhǔn)測(cè)試中大放異彩

    分為四個(gè)場(chǎng)景:與數(shù)據(jù)中心應(yīng)用關(guān)聯(lián)性最高的服務(wù)器和離線場(chǎng)景,以及用于滿足邊緣設(shè)備地芯片系統(tǒng)需求的單流和多流場(chǎng)景。 NVIDIA在兩個(gè)數(shù)據(jù)中心場(chǎng)景(離線和服務(wù)器)的全部五項(xiàng)基準(zhǔn)測(cè)試中均排在第一位
    發(fā)表于 11-08 19:44

    NVIDIA宣布其AI推理平臺(tái)的重大更新

    Capital One、Microsoft、Samsung Medison、Siemens Energy、Snap等25000多家客戶都在使用該平臺(tái)。 這些更新包括開(kāi)源NVIDIA Triton推理
    的頭像 發(fā)表于 11-12 14:42 ?1953次閱讀

    NVIDIA Triton 推理服務(wù)器助力西門子提升工業(yè)效率

    西門子能源公司正在發(fā)揮 NVIDIA Triton 推理服務(wù)器的強(qiáng)大力量,利用 AI 協(xié)助解決全球發(fā)電廠在預(yù)測(cè)性服務(wù)管理方面的擔(dān)憂。
    的頭像 發(fā)表于 11-16 16:25 ?3704次閱讀

    NVIDIA Triton開(kāi)源推理服務(wù)軟件三大功能推動(dòng)效率提升

    Microsoft Teams借助AI生成的實(shí)時(shí)字幕和轉(zhuǎn)錄功能,幫助全球?qū)W生和職場(chǎng)人士順利進(jìn)行在線會(huì)議。用于訓(xùn)練的NVIDIA AI計(jì)算技術(shù)和用于推理語(yǔ)音識(shí)別模型的NVIDIA Triton
    的頭像 發(fā)表于 01-04 14:20 ?1695次閱讀

    NVIDIA Triton推理服務(wù)器幫助Teams使用認(rèn)知服務(wù)優(yōu)化語(yǔ)音識(shí)別模型

    Microsoft Teams借助AI生成的實(shí)時(shí)字幕和轉(zhuǎn)錄功能,幫助全球?qū)W生和職場(chǎng)人士順利進(jìn)行在線會(huì)議。用于訓(xùn)練的NVIDIA AI計(jì)算技術(shù)和用于推理語(yǔ)音識(shí)別模型的NVIDIA Triton
    的頭像 發(fā)表于 01-04 17:45 ?1727次閱讀

    使用MIG和Kubernetes部署Triton推理服務(wù)器

      NVIDIA Triton 推理服務(wù)器是一款開(kāi)源人工智能模型服務(wù)軟件,可簡(jiǎn)化在生產(chǎn)中大規(guī)模部署經(jīng)過(guò)培訓(xùn)的人工智能模型。對(duì)于
    的頭像 發(fā)表于 04-07 09:54 ?3383次閱讀

    NVIDIA推理平臺(tái)和全棧方法提供最佳性能

    現(xiàn)在,您和開(kāi)發(fā)人員社區(qū)的其他成員都可以使用這些成果,主要是以開(kāi)源軟件的形式。此外, TensorRT 和 Triton 推理服務(wù)器可從?NVIDIA NGC?免費(fèi)獲得,以及預(yù)訓(xùn)練模型、
    的頭像 發(fā)表于 04-08 16:31 ?1173次閱讀
    <b class='flag-5'>NVIDIA</b><b class='flag-5'>推理</b>平臺(tái)和全棧方法提供最佳性能

    NVIDIA Triton推理服務(wù)器簡(jiǎn)化人工智能推理

    GKE 的 Triton 推理服務(wù)器應(yīng)用程序是一個(gè) helm chart 部署程序,可自動(dòng)安裝和配置 Triton ,以便在具有 NVIDIA
    的頭像 發(fā)表于 04-08 16:43 ?2228次閱讀
    <b class='flag-5'>NVIDIA</b> <b class='flag-5'>Triton</b><b class='flag-5'>推理</b><b class='flag-5'>服務(wù)器</b>簡(jiǎn)化人工智能<b class='flag-5'>推理</b>

    使用NVIDIA Triton推理服務(wù)器簡(jiǎn)化邊緣AI模型部署

      NVIDIA Triton 有助于在每個(gè)數(shù)據(jù)中心、云和嵌入式設(shè)備中實(shí)現(xiàn)標(biāo)準(zhǔn)化的可擴(kuò)展生產(chǎn) AI 。它支持多個(gè)框架,在 GPU 和 DLA 等多個(gè)計(jì)算引擎上運(yùn)行模型,處理不同類型的推理
    的頭像 發(fā)表于 04-18 15:40 ?2793次閱讀
    使用<b class='flag-5'>NVIDIA</b> <b class='flag-5'>Triton</b><b class='flag-5'>推理</b><b class='flag-5'>服務(wù)器</b>簡(jiǎn)化邊緣AI模型部署

    利用NVIDIA Triton推理服務(wù)器加速語(yǔ)音識(shí)別的速度

    網(wǎng)易互娛 AI Lab 的研發(fā)人員,基于 Wenet 語(yǔ)音識(shí)別工具進(jìn)行優(yōu)化和創(chuàng)新,利用 NVIDIA Triton 推理服務(wù)器的 GPU Batch Inference 機(jī)制加速了語(yǔ)音
    的頭像 發(fā)表于 05-13 10:40 ?1984次閱讀

    NVIDIA Triton助力騰訊PCG加速在線推理

      借助NVIDIA Triton 推理框架,配合 DALI/FIL/Python 等Backend,以及 TensorRT,整體推理服務(wù)
    的頭像 發(fā)表于 05-20 15:25 ?2341次閱讀
    <b class='flag-5'>NVIDIA</b> <b class='flag-5'>Triton</b>助力騰訊PCG加速在線<b class='flag-5'>推理</b>

    騰訊云TI平臺(tái)利用NVIDIA Triton推理服務(wù)器構(gòu)造不同AI應(yīng)用場(chǎng)景需求

    騰訊云 TI 平臺(tái) TI-ONE 利用 NVIDIA Triton 推理服務(wù)器構(gòu)造高性能推理服務(wù)
    的頭像 發(fā)表于 09-05 15:33 ?1950次閱讀

    NVIDIA Triton推理服務(wù)器的基本特性及應(yīng)用案例

    推理識(shí)別是人工智能最重要的落地應(yīng)用,其他與深度學(xué)習(xí)相關(guān)的數(shù)據(jù)收集、標(biāo)注、模型訓(xùn)練等工作,都是為了得到更好的最終推理性能與效果。
    的頭像 發(fā)表于 10-26 09:43 ?2074次閱讀

    NVIDIA Triton推理服務(wù)器的功能與架構(gòu)簡(jiǎn)介

    前面文章介紹微軟 Teams 會(huì)議系統(tǒng)、微信軟件與騰訊 PCG 服務(wù)三個(gè) Triton 推理服務(wù)器的成功案例,讓大家對(duì) Triton 有初步
    的頭像 發(fā)表于 11-02 10:44 ?2568次閱讀

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

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