本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 Triton Inference Server 進行模型部署
Triton Inference Server
SageMaker AI Triton 容器可協助您在 SageMaker AI Hosting 平台部署 Triton Inference Server,以便在生產環境中為受過訓練的模型提供服務。它支援 SageMaker AI 操作的不同模式。如需 SageMaker AI 上可用的 Triton Inference Server 容器清單,請參閱 NVIDIA Triton Inference Containers (僅限 SM 支援)
對於端對端筆記本範例,我們建議查看 amazon-sagemaker-examples 儲存庫
Hosting 模式
Triton 容器支援下列 SageMaker AI Hosting 模式:
-
單一模型端點
-
這是 SageMaker AI 的預設操作模式。在此模式下,Triton 容器可以載入單一模型或單一整合模型。
-
模型的名稱必須作為容器環境的屬性傳遞,這是
CreateModelSageMaker AI API 呼叫的一部分。用來傳遞模型名稱的環境變數為SAGEMAKER_TRITON_DEFAULT_MODEL_NAME。
-
-
具有整合的單一模型端點
-
Triton Inference Server 支援整合,這是一個管線,或模型的 DAG (有向非循環圖)。雖然整合在技術上由多個模型組成,但在預設的單一模型端點模式,SageMaker AI 可以將整合本身 (代表管線的中繼模型) 視為要載入的主要模型,並隨後可以載入關聯的模型。
-
必須使用整合適當的模型名稱來載入模型。它必須作為容器環境的屬性傳遞,這是
CreateModelSageMaker API 呼叫的一部分。用來傳遞模型名稱的環境變數為SAGEMAKER_TRITON_DEFAULT_MODEL_NAME。
-
-
多模型端點
-
在此模式下,SageMaker AI 可以在單一端點提供多個模型。您可以透過將環境變數
‘MultiModel’: true指定為容器環境的屬性 (屬於CreateModelSageMaker API 呼叫的一部分) 來使用此模式。 -
依預設,執行個體啟動時不會載入任何模型。若要針對特定模型執行推斷請求,請將對應模型的
*.tar.gz檔案指定為InvokeEndpointSageMaker API 呼叫TargetModel屬性的引數。
-
-
具有整合的多模型端點
-
在此模式下,SageMaker AI 的功能如多模型端點所述。不過,SageMaker AI Triton 容器可以載入多個整合模型,這表示多個模型管線可以在相同的執行個體執行。SageMaker AI 會將每個整合視為一個模型,並且可以透過將對應的
*.tar.gz封存指定為TargetModel來調用每個模型的整合。 為了在動態記憶體
LOAD及UNLOAD期間實現更好的記憶體管理,我們建議您將整合大小保持較小。
-
推斷裝載類型
Triton 支援兩種透過網路傳送推斷負載的方法–json 及 binary+json (或二進制編碼的 json)。在這兩種情況下,JSON 有效負載都包括資料類型、形狀和實際推斷請求張量。要求張量必須是二進位張量。
使用 binary+json 格式,您必須在標題指定請求中繼資料的長度,以允許 Triton 正確解析二進制有效負載。在 SageMaker AI Triton 容器中,這是使用自訂 Content-Type 標題所完成:application/vnd.sagemaker-triton.binary+json;json-header-size={}。這與在獨立的 Triton Inference Server 使用 Inference-Header-Content-Length 標題不同,因為 SageMaker AI 不允許自訂標題。
使用 config.pbtxt 設定模型組態
對於 SageMaker AI 的 Triton Inference Server ,每個模型都必須包含一個 config.pbtxt 檔案,該檔案至少必須為模型指定下列組態:
-
name:雖然這對於在 SageMaker AI 以外執行的模型而言是選用的,但我們建議您始終為要在 SageMaker AI 上的 Triton 執行的模型提供名稱。 -
platform和/或backend:設置後端對於指定模型的類型非常重要。某些後端有進一步的分類,例如 tensorflow_savedmodel或tensorflow_graphdef。除了backend金鑰之外,這些選項也可以指定為金鑰platform的一部分。最常見的後端是tensorrt、onnxruntime、tensorflow、pytorch、python、dali、fil、以及openvino。 -
input:為輸入指定三個屬性:name、data_type及dims(形狀)。 -
output:為輸出指定三個屬性:name、data_type及dims(形狀)。 -
max_batch_size:將批次大小設定為大於或等於 1 的值,表示 Triton 應與模型搭配使用的最大批次大小。
有關組態 config.pbtxt 的更多詳細資訊,請參閱 Triton 的 GitHub 儲存庫
-
instance_groups:執行個體群組有助於指定特定模型的數量與位置。它們具有屬性 count、kind、及gpus(當kind為KIND_GPU時使用)。count屬性相當於工作者數量。對於一般模型服務,每個工作者都有自己的模型副本。同樣,在 Triton 中,count指定每個裝置的模型副本數量。例如,如果instance_group類型為KIND_CPU,則 CPU 有count個型號副本。注意
在 GPU 執行個體上,
instance_group組態適用於每個 GPU 裝置。例如,除非您明確指定哪些 GPU 裝置應載入模型,否則每個 GPU 裝置都會放置count個模型副本。 -
dynamic_batching及 sequence_batching:動態批處理用於無狀態模型,序列批處理用於有狀態模型 (您希望每次都將請求路由到相同的模型執行個體)。批次處理排程器會啟用每個模型的佇列,這有助於提高輸送量,具體取決於批次設定。 -
ensemble:整合模型表示一個或多個模型的管線以及這些模型之間輸入和輸出張量的連接。可以透過將 platform指定為ensemble來設定。整合組態只是模型管線的表示。在 SageMaker AI 上,整合下的所有模型都會被視為整合模型的相依物件,並被視為 SageMaker AI 指標 (例如LoadedModelCount) 的單一模型。
將預設的 Triton 指標發布至 Amazon CloudWatch
NVIDIA Triton Inference Container 在連接埠 8002 (可設定) 公開 Triton Inference Server 使用的不同模型及 GPU 指標。如需可用預設指標的完整詳細資訊,請參閱 Triton Inference Server
從版本 v23.07 開始,SageMaker AI Triton 容器支援透過指定一些環境變數將這些指標發布到 Amazon CloudWatch。為了抓取 Prometheus 指標,SageMaker AI Triton 容器利用 Amazon CloudWatch 代理程式。
您必須指定收集指標所需的環境變數如下:
| 環境變數 | 描述 | 範例值 |
|---|---|---|
|
|
指定此選項可允許 Triton 將指標發布至其 Prometheus 端點。 |
“true” |
|
|
指定此選項以啟動將指標發布到 Amazon CloudWatch 所需的預先檢查。 |
“true” |
|
|
指定此選項可指向要寫入測量結果的日誌群組。 |
"/aws/SageMaker AI/Endpoints/TritonMetrics/SageMakerTwoEnsemblesTest" |
|
|
指定此選項可指向您要查看並繪製指標的指標命名空間。 |
"/aws/SageMaker AI/Endpoints/TritonMetrics/SageMakerTwoEnsemblesPublicTest" |
|
|
將此連接埠指定為 8002 或任何其他連接埠。如果 SageMaker AI 尚未封鎖指定的連接埠,則會使用該連接埠。否則,會自動選擇另一個未封鎖的連接埠。 |
“8002” |
使用 Triton 在 SageMaker AI 上發布指標時,請記住下列限制:
雖然您可以透過 C-API 與 Python 後端 (v23.05 版以後) 產生自訂指標,但目前不支援將這些指標發布到 Amazon CloudWatch。
在 SageMaker AI 多模型端點 (MME) 模式中,Triton 在需要啟用模型命名空間的環境中執行,因為每個模型 (整合模型除外) 都被視為位於自己的模型儲存庫中。目前,這對指標造成了限制。啟用模型命名空間時,Triton 不會區分屬於不同整合的兩個具有相同名稱的模型之間的指標。因應措施是確保所部署的每個模型都有唯一的名稱。這也使得您可以更輕鬆地在 CloudWatch 找到指標。
環境變數
下表列出 SageMaker AI 上 Triton 支援的環境變數。
| 環境變數 | 描述 | 類型 | 可能的值 |
|---|---|---|---|
|
允許 Triton 在 SageMaker AI 多模型端點模式下操作。 |
Boolean |
|
|
指定要在 SageMaker AI 單一模型 (預設) 模式中載入的模型。對於整合模式,請指定適當的整合名稱。 |
字串 |
config.pbtxt 中指定的 |
|
|
字串 |
|
|
在 SageMaker AI Triton 容器,預設為 |
Boolean |
|
|
在 SageMaker AI 上時,預設連接埠為 8080。您可以在多容器案例中自訂不同的連接埠。 |
字串 |
|
|
這是使用多容器模式時由 SageMaker AI 平台所設定。 |
字串 |
|
|
雖然 SageMaker AI 目前不支援 GRPC,但如果您在自訂反向代理伺服器之前使用 Triton,您可以選擇啟用 GRPC。 |
Boolean |
|
|
GRPC 的預設連接埠是 8001,但您可以變更它。 |
字串 |
|
|
您可以設定預設 HTTP 請求處理常式執行緒的數量。 |
字串 |
|
|
SageMaker AI 依預設為 |
Boolean |
|
|
SageMaker AI 預設為 |
Boolean |
|
|
SageMaker AI 預設為 |
Boolean |
|
|
SageMaker AI 預設為 |
Boolean |
|
|
指定 Python 後端的 shm 大小 (以位元組為單位)。預設值為 16 MB,但可以增加。 |
字串 |
|
|
指定 Python 後端的 shm 增長大小 (以位元組為單位)。預設值為 1 MB,但可增加以允許更大的增量。 |
字串 |
|
|
預設值為 |
字串 |
|
|
限制用於模型載入的 GPU 記憶體百分比上限,允許其餘部分用於推斷請求。 |
字串 |
|
|
SageMaker AI 預設為 |
Boolean |
|
|
預設連接埠為 8002。 |
字串 |
|
|
SageMaker AI 預設為 |
Boolean |
|
|
如果您已啟用指標發布到 CloudWatch,則需要此選項。 |
字串 |
|
|
如果您已啟用指標發布到 CloudWatch,則需要此選項。 |
字串 |
|
|
在啟動 Triton Server 時附加的任何其他引數。 |
字串 |
|