每個 AI 應用程序都需要強大的推理引擎。無論您是部署圖像識別服務、智能虛擬助理還是欺詐檢測應用程序,可靠的推理服務器都能提供快速、準確和可擴展的預測,具有低延遲(對單個查詢的響應時間較短)和高吞吐量(在給定時間間隔內處理大量查詢)。然而,檢查所有這些方框可能很難實現,而且成本高昂。
團隊需要考慮部署可以利用以下功能的應用程序:
- 具有獨立執行后端的多種框架( ONNX 運行時、 TensorFlow 、 PyTorch )
- 不同的推理類型(實時、批量、流式)
- 用于混合基礎設施( CPU 、 GPU )的不同推理服務解決方案
- 可以顯著影響推理性能的不同模型配置設置(動態批處理、模型并發)
這些要求使人工智能推理成為一項極具挑戰性的任務,可以通過 NVIDIA Triton 推理服務器 .
這篇文章提供了一個逐步提高 AI 推理性能的教程 Azure 機器學習 使用 NVIDIA Triton 模型分析儀和 ONNX 運行時橄欖 ,如圖 1 所示。

工作流優化的機器學習模型
為了提高 AI 推理性能, ONNX Runtime OLive 和 Triton 模型分析器在模型部署之前自動執行參數優化步驟。這些參數定義了底層推理引擎將如何執行。您可以使用這些工具來優化 ONNX 運行時參數 (執行提供程序、會話選項和精度參數),以及 Triton 參數 (動態批處理和模型并發參數)。
階段 1 : ONNX 運行時橄欖優化
如果 Azure 機器學習是您部署 AI 應用程序的地方,那么您可能熟悉 ONNX 運行時。 ONNX Runtime 是微軟的高性能推理引擎,用于跨平臺運行 AI 模型。它可以跨多種配置設置部署模型,目前 Triton ?聲波風廓線儀支持。微調這些配置設置需要專門的時間和領域專業知識。
OLive ( ONNX Runtime Go Live )是一個 Python 包,通過使用 ONNX 運行時自動化加速模型的工作來加速此過程。它提供了兩種功能:將模型轉換為 ONNX 格式和自動調整 ONNX 運行時參數,以最大化推理性能。運行 OLive 將隔離并推薦 ONNX 運行時配置設置,以獲得最佳核心 AI 推理結果。
您可以使用以下 ONNX 運行時參數使用 OLive 優化 ONNX Runtime BERT 小隊模型:
- 執行提供程序:ONNX Runtime 通過其可擴展執行提供程序( EP )框架與不同的硬件加速庫協作,以在硬件平臺上優化運行 ONNX 模型,該框架可以利用平臺的計算能力優化執行。 OLive 探索了以下執行提供程序的優化:針對 CPU 的 MLA (默認 CPU EP )、英特爾 DNNL 和 OpenVino 、針對 GPU 的 NVIDIA CUDA 和 TensorRT 。
- 會話選項:OLive 瀏覽 ONNX 運行時會話選項,以找到線程控制的最佳配置,包括
inter_op_num_threads
、intra_op_num_threads
、execution_mode
和graph_optimization_level
。 - 精度:OLive 以不同的精度級別評估性能,包括
float32
和float16
,并返回最佳精度配置。
在運行了優化之后,您仍然可能會在應用程序級別上留下一些性能。使用 Triton 模型分析器可以進一步提高端到端吞吐量和延遲,該分析器能夠支持優化的 ONNX 運行時模型。
第 2 階段: Triton 模型分析器優化
NVIDIA Triton 推理服務器 是一款開源推理服務軟件,有助于標準化模型部署和執行,并在生產中提供快速、可擴展的人工智能推理。圖 2 顯示了 Triton 推理服務器在與客戶端應用程序和多個 AI 模型集成時如何管理客戶端請求。

這篇文章將著重于使用 Triton 模型分析器優化兩個主要的 Parabricks 特性:
- 動態配料:Triton 允許服務器組合推理請求,以便動態創建批處理。這導致在固定延遲預算內增加吞吐量。
- 并發模型:Triton 允許同一模型的多個模型或實例在同一系統上并行執行。這導致吞吐量增加。
當以最佳級別部署時,這些功能非常強大。當以次優配置部署時,性能會受到影響,使終端應用程序容易受到當前苛刻的服務質量標準(延遲、吞吐量和內存要求)的影響。
因此,基于預期用戶流量優化批量大小和模型并發級別對于充分挖掘 Triton 的潛力至關重要。這些優化 模型配置設置 將在嚴格的延遲約束下提高吞吐量,在部署應用程序時提高 GPU 利用率。該過程可以使用 Triton 模型分析儀實現自動化。
給定一組約束,包括延遲、吞吐量目標或內存占用, Triton 模型分析器根據批量大小、模型并發性或其他[ZGK22]模型配置設置的不同級別,搜索并選擇最大化推理性能的最佳模型配置。部署和優化這些功能后,您將看到令人難以置信的結果。
教程:開始優化推理性能
在 Azure 機器學習上使用 ONNX Runtime OLive 和 Triton 模型分析器部署優化的機器學習模型需要四個步驟:
- 發射 Azure 虛擬機 使用 NVIDIA GPU 優化的虛擬機映像( VMI )
- 在模型上執行 ONNX 、 Runtime 、 OLive 和 Triton 模型分析器參數優化
- 分析和自定義結果
- 將優化的 Triton ONNX 運行時模型部署到 Azure 機器學習端點上
要完成本教程,請確保您有一個 Azure 帳戶,可以訪問 NVIDIA GPU 支持的虛擬機。例如,使用 Azure ND A100 v4 系列 虛擬機 NVIDIA A100 GPU , NCasT4 v3 系列 對于 NVIDIA T4 GPU 或 NCv3 系列 適用于 NVIDIA V100 GPU 。雖然建議使用 ND A100 v4 系列以獲得最大規模的性能,但本教程使用標準的 NC6s _ v3 虛擬機,使用單個 NVIDIA V100 GPU .
步驟 1 :使用 NVIDIA 的 GPU 優化 VMI 啟動 Azure 虛擬機
本教程使用 NVIDIA GPU 優化 VMI 在 Azure 市場上可用。它預先配置了 NVIDIA GPU 驅動程序、 CUDA 、 Docker 工具包、運行時和其他依賴項。此外,它還為開發人員構建 AI 應用程序提供了一個標準化堆棧。
為了最大限度地提高性能, NVIDIA 每季度對該 VMI 進行驗證和更新,并提供最新的驅動程序、安全補丁和對最新 GPU 的支持。
有關如何在 Azure VM 上啟動和連接 NVIDIA GPU 優化 VMI 的詳細信息,請參閱 Azure 虛擬機上的 NGC 文檔 .
第 2 步:執行 ONNX Runtime OLive 和 Triton 模型分析器優化
使用 SSH 連接到 Azure 虛擬機并加載 NVIDIA GPU 優化的 VMI 后,即可開始執行 ONNX Runtime OLive 和 Triton 模型分析器優化。
首先,克隆 GitHub 存儲庫并通過運行以下命令導航到內容根目錄:
git clone https://github.com/microsoft/OLive.git
接下來,加載 Triton 服務器容器 請注意,本教程使用版本號 22.06 。
docker run --gpus=1 --rm -it -v “$(pwd)”:/models nvcr.io/nvidia/tritonserver:22.06-py3 /bin/bash
加載后,導航到安裝 GitHub 材料的/models
文件夾:
cd /models
下載 OLive 和 ONNX 運行時包,以及要優化的模型。然后,通過設置以下環境變量,指定要優化的模型的位置:
- 導出模型_位置= https://olivewheels.blob.core.windows.net/models/bert-base-cased-squad.pth
- 導出模型_文件名= bert-base-cased-squad.pth
您可以使用您選擇的模型調整上面提供的位置和文件名。為了獲得最佳性能,請直接從 NGC 目錄 這些模型被訓練到高精度,并且具有高級證書和代碼樣本。
接下來,運行以下腳本:
bash download.sh $model_location $export model_filename
腳本將下載三個文件到您的機器上:
- 橄欖包裝:
onnxruntime_olive-0.3.0-py3-none-any.whl
- ONNX 運行時包:
onnxruntime_gpu_tensorrt-1.9.0-cp38-cp38-linux_x86_64.whl
- PyTorch Model:
bert-base-cased-squad.pth
在運行圖 1 中的管道之前,首先通過設置環境變量指定其輸入參數:
- 出口
model_name=bertsquad
- 出口
model_type=pytorch
- 出口
in_names=input_names,input_mask,segment_ids
- 出口
in_shapes=[[-1,256],[-1,256],[-1,256]]
- 出口
in_types=int64,int64,int64
- 出口
out_names=start,end
參數in_names
、in_shapes
和in_types
指模型預期輸入的名稱、形狀和類型。在這種情況下,輸入是長度為 256 的序列,但它們被指定為[-1256],以允許對輸入進行批處理。您可以更改與模型及其預期輸入和輸出相對應的參數值。
現在,您可以通過執行以下命令來運行管道:
bash optimize.sh $model_filename $model_name $model_type $in_names $in_shapes $in_types $out_names
該命令首先安裝所有必要的庫和依賴項,并調用 OLive 將原始模型轉換為 ONNX 格式。
接下來,調用 Triton 模型分析器,自動生成帶有模型元數據的模型配置文件。然后將配置文件傳遞回 OLive ,以通過前面討論的 ONNX 運行時參數(執行提供程序、會話選項和精度)進行優化。
為了進一步提高吞吐量和延遲,然后將 ONNX 運行時優化的模型配置文件傳遞到 Triton 模型庫中,供 Parabricks 模型分析器工具使用。 Triton 模型分析器然后運行 profile
命令 ,它設置優化搜索空間,并使用.yaml
配置文件指定 Triton 模型存儲庫的位置(見圖 3 )。

上述配置文件可用于以多種方式自定義 Triton 模型分析器的搜索空間。該文件需要模型存儲庫的位置、要優化的參數及其范圍,以創建 Triton 模型分析器用于查找最佳配置設置的搜索空間。
- 第 1-5 行指定了重要的路徑,例如優化模型所在的輸出模型存儲庫的位置。
- 第 10 行指定了參數 concurrency ,該參數指定了要由 性能分析器 ,它模擬用戶流量。
- 第 15 行指定了
bert_default
模型,其對應于從 PyTorch 到 ONNX 轉換獲得的默認模型。該模型是基線模型,因此使用了動態批處理(第 17 行)和模型并發(第 20 行)的非優化值 - 第 19 行和第 32 行顯示了在優化過程中必須滿足的 30ms 延遲約束。
- 第 28 行指定了
bertsquad
模型,其對應于橄欖優化模型。此模型與bert_default
模型不同,因為此處的動態批處理參數搜索空間設置為 1 、 2 、 4 、 8 和 16 ,模型并發參數搜索空間設為 1 、 3 、 4 和 5 。
profile
命令記錄每個并發推理請求級別的結果,并且對于每個并行推理請求級別,記錄 25 個不同參數的結果,因為動態批處理和模型并發參數的搜索空間分別具有五個唯一值,總計等于 25 個不同的參數。請注意,運行此操作所需的時間將隨著圖 3 中概要文件配置文件中搜索空間中提供的配置數量的增加而增加。
腳本然后運行 Triton 模型分析儀分析 命令 使用圖 4 所示的附加配置文件來處理結果。該文件指定了輸出模型存儲庫的位置,其中通過profile
命令生成結果,以及將記錄性能結果的 CSV 文件的名稱。

analyze
命令的配置文件,并處理profile
命令的結果雖然profile
和analyze
命令可能需要幾個小時才能運行,但優化的模型配置設置將確保部署的模型具有強大的長期推理性能。對于較短的運行時間,調整模型配置文件(圖 3 ),在希望優化的參數上使用較小的搜索空間。
演示運行完成后,將生成兩個文件: optim _ Results 。 png ,如圖 5 所示,以及 Optimal _ ConfigFile _ Location 。 txt ,表示要部署在 Azure 機器學習上的最佳配置文件的位置。建立非優化基線(藍線)。通過 OLive 優化實現的性能提升如圖所示(淺綠線),以及 OLive + Triton 模型分析器優化(深綠線)。
步驟 3 :分析性能結果

基線對應于具有非優化 ONNX 運行時參數( CUDA 后端,具有全精度)和非優化 Triton 參數(無動態批處理和模型并發)的模型。隨著基線的建立,很明顯,從 OLive 和 Triton 模型分析器在各種推理請求并發級別( x 軸)上的優化中獲得的推理吞吐量性能( y 軸)有了很大提升,仿真結果如下: Triton 性能分析儀 ,一種通過生成推理請求來模擬用戶流量的工具。
OLive 優化通過以混合精度將執行提供程序調整為 TensorRT 以及其他 ONNX 運行時參數,提高了模型性能(淺綠線)。然而,這顯示了沒有 Triton 動態批處理或模型并發的性能。因此,可以使用 Triton 模型分析器進一步優化該模型。
Triton 模型分析器在優化模型并發性和動態批處理后,進一步將推理性能提高了 20% (深綠線)。 Triton 模型分析器選擇的最終最佳值是兩個模型并發性(兩個 BERT 模型副本將保存在 GPU 上)和 16 個最大動態批處理級別(一次最多 16 個推理請求將一起批處理)。
總體而言,使用優化參數的推理性能增益超過 10 倍。
此外,如果您希望應用程序具有特定級別的推理請求,則可以通過配置 Triton perf_analyzer .您還可以調整模型配置文件,以包括: 要優化的其他參數 例如延遲分批。
您現在可以使用 Azure 機器學習部署優化模型了。
步驟 4 :將優化模型部署到 Azure 機器學習端點
部署優化的人工智能模型,以便在 使用 Triton 的 Azure 機器學習 涉及使用 托管在線端點 和 Azure 機器學習工作室 沒有代碼接口。
托管在線端點幫助您以交鑰匙方式部署 ML 模型。它負責服務、擴展、保護和監控您的模型,將您從設置和管理底層基礎設施的開銷中解放出來。
要繼續,請確保已下載 Azure CLI ,并且手頭有圖 6 所示的 YAML 文件。

第一 注冊您的模型 使用上述 YAML 文件以 Triton 格式。您注冊的模型應該類似于圖 7 ,如模型所示 Azure 機器學習工作室的頁面。

接下來,選擇 Triton 模型,選擇“部署”,然后選擇“部署到實時端點”繼續通過向導將 ONNX 運行時和 Triton 優化模型部署到端點。請注意,將 Triton 模型部署到 Azure 機器學習管理端點時,不需要評分腳本。
祝賀現在,您已經在 Azure 機器學習上部署了一個 BERT 小隊模型,該模型使用 ONNX 運行時和 Triton 參數優化了推理性能。通過優化這些參數,相對于未優化的基線 BERT 小隊模型,您的性能提高了 10 倍。
探索機器學習模型推理工具的資源
以下是有關使用 NVIDIA Triton 、 ONNX Runtime 和 Azure 機器學習部署 AI 應用程序的更多資源:
Triton
- 下載 NVIDIA Triton 作為 來自 NGC 的 Docker 容器 .
- 開始使用 Triton 使用教程、筆記本和文檔。
- 訪問 Triton 和 模型分析器 GitHub 存儲庫,以及 關于 Triton 的博客文章 和 Triton 推理服務器技術概述 深入了解 Triton 提供的功能及其工作方式。
- 學習如何 在 Azure 機器學習上將模型部署到 NVIDIA Triton .
- 看 Triton-specific GTC sessions on demand.?
- 大規模部署 Triton 多實例 GPU 和 Kubernetes .
學習如何 西門子能源公司 和 美國運通 使用 Triton 加速人工智能推理工作流程。了解您的公司如何開始 Triton?使用 NVIDIA 人工智能企業 和 NVIDIA LaunchPad .
ONNX 運行時和 Azure 機器學習
- 使用部署機器學習模型 Azure 機器學習管理的在線端點 .
- 了解 在 Azure 機器學習上部署實時機器學習服務 .
- 了解更多關于到的旅程 使用 ONNX 運行時優化大規模 transformer 模型推理 .
- 優化和部署 transformer INT8 inference with ONNX Runtime- TensorRT on NVIDIA GPU .
- 了解如何 使用 ORT web 在 web 上運行和部署機器學習模型 .
了解 Microsoft 如何 Bing 在 NVIDIA GPU 上改進了 BERT 推理 對于實時服務需求,每秒服務超過一百萬 BERT 個推論。
?