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