使用 Triton Inference Server 進行模型部署 - Amazon SageMaker

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用 Triton Inference Server 進行模型部署

Triton Inference Server 是一種開放原始碼推斷服務軟體,可簡化 AI 推斷。使用 Triton,您可以部署使用多個深度學習和機器學習架構建置的任何模型,包括 TensorRT TensorFlow PyTorch、ONNX、Open VINO、Python、 RAPIDS FIL等。

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

    • 為了在動態記憶體 LOADUNLOAD 期間實現更好的記憶體管理,我們建議您將整合大小保持較小。

推斷裝載類型

Triton 支援兩種透過網路傳送推斷負載的方法–jsonbinary+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 的一部分。最常見的後端是 tensorrtonnxruntimetensorflowpytorchpythondalifil、以及 openvino

  • input:為輸入指定三個屬性:namedata_typedims (形狀)。

  • output:為輸出指定三個屬性:namedata_typedims (形狀)。

  • max_batch_size:將批次大小設定為大於或等於 1 的值,表示 Triton 應與模型搭配使用的最大批次大小。

如需設定 的詳細資訊config.pbtxt,請參閱 Triton 的 GitHub 儲存庫 。Triton 提供了幾種用於調整模型行為的組態。一些最常見及最重要的組態選項包括:

  • instance_groups:執行個體群組有助於指定特定模型的數量與位置。它們具有屬性 countkind、及 gpus (當 kindKIND_GPU 時使用)。count 屬性相當於工作者數量。對於一般模型服務,每個工作者都有自己的模型副本。同樣,在 Triton 中,count 指定每個裝置的模型副本數量。例如,如果instance_group類型為 KIND_CPU,則 CPU具有模型複本count數目。

    注意

    在GPU執行個體上,instance_group組態適用於每個GPU裝置。例如,除非您明確指定哪些GPU裝置應載入模型,否則模型複本count的數量會放置在每個GPU裝置上。

  • dynamic_batchingsequence_batching:動態批處理用於無狀態模型,序列批處理用於有狀態模型 (您希望每次都將請求路由到相同的模型執行個體)。批次處理排程器會啟用每個模型的佇列,這有助於提高輸送量,具體取決於批次設定。

  • ensemble:整合模型表示一個或多個模型的管線以及這些模型之間輸入和輸出張量的連接。可以透過將 platform 指定為 ensemble 來設定。整合組態只是模型管線的表示。在 上 SageMaker,集合下的所有模型都會視為集合模型的相依性,並視為 SageMaker 指標的單一模型,例如 LoadedModelCount

將預設 Triton 指標發佈至 Amazon CloudWatch

NVIDIA Triton 推論容器會公開不同模型和 Triton 推論伺服器中使用的連接埠 8002 GPUs (可設定) 指標。如需可用預設指標的完整詳細資訊,請參閱 Triton 推論伺服器指標的 GitHub 頁面。這些指標採用 Prometheus 格式,可以使用 Prometheus 抓取器組態進行抓取。

從 23.07 版開始, SageMaker Triton 容器支援 CloudWatch 透過指定幾個環境變數,將這些指標發佈至 Amazon。為了抓取 Prometheus 指標, SageMaker Triton 容器會利用 Amazon CloudWatch 代理程式。

您必須指定收集指標所需的環境變數如下:

環境變數 描述 範例值

SAGEMAKER_TRITON_ALLOW_METRICS

指定此選項可允許 Triton 將指標發布至其 Prometheus 端點。

“true”

SAGEMAKER_TRITON_PUBLISH_METRICS_TO_CLOUDWATCH

指定此選項,以開始將指標發佈至 Amazon 所需的預先檢查 CloudWatch。

“true”

SAGEMAKER_TRITON_CLOUDWATCH_LOG_GROUP

指定此選項可指向要寫入測量結果的日誌群組。

"/aws/SageMaker/Endpoints/TritonMetrics/SageMakerTwoEnsemblesTest"

SAGEMAKER_TRITON_CLOUDWATCH_METRIC_NAMESPACE

指定此選項可指向您要查看並繪製指標的指標命名空間。

"/aws/SageMaker/Endpoints/TritonMetrics/SageMakerTwoEnsemblesPublicTest"

SAGEMAKER_TRITON_METRICS_PORT

將此連接埠指定為 8002 或任何其他連接埠。如果 SageMaker 未封鎖指定的連接埠,則會使用它。否則,會自動選擇另一個未封鎖的連接埠。

“8002”

在 上使用 Triton 發佈指標時 SageMaker,請記住下列限制:

  • 雖然您可以透過 C-API 和 Python 後端 (23.05 版之後) 產生自訂指標,但目前不支援這些指標發佈至 Amazon CloudWatch。

  • 在 SageMaker 多模型端點 (MME) 模式中,Triton 會在需要啟用模型名稱調節的環境中執行,因為每個模型 (集合模型除外) 都被視為在自己的模型儲存庫中。目前,這對指標造成了限制。啟用模型命名空間時,Triton 不會區分屬於不同整合的兩個具有相同名稱的模型之間的指標。因應措施是確保所部署的每個模型都有唯一的名稱。這也可讓您更輕鬆地在 中查詢指標 CloudWatch。

環境變數

下表列出 Triton 在 上支援的環境變數 SageMaker。

環境變數 Description (描述) Type 可能的值

SAGEMAKER_MULTI_MODEL

允許 Triton 在 SageMaker 多模型端點模式下操作。

Boolean

true, false

SAGEMAKER_TRITON_DEFAULT_MODEL_NAME

指定要在 SageMaker 單一模型 (預設) 模式中載入的模型。對於整合模式,請指定適當的整合名稱。

字串

<model_name> 如 config.pbtxt 中指定的

SAGEMAKER_TRITON_PING_MODE

'ready' 是 SageMaker單一模型模式中的預設模式,'live'也是 SageMaker多模型端點模式中的預設模式。

字串

ready, live

SAGEMAKER_TRITON_DISABLE_MODEL_NAMESPACING

在 SageMaker Triton 容器中,true預設會將此設為 。

Boolean

true, false

SAGEMAKER_BIND_TO_PORT

在 上時 SageMaker,預設連接埠為 8080。您可以在多容器案例中自訂不同的連接埠。

字串

<port_number>

SAGEMAKER_SAFE_PORT_RANGE

使用多容器模式時,由 SageMaker 平台設定。

字串

<port_1><port_2>

SAGEMAKER_TRITON_ALLOW_GRPC

雖然 SageMaker GRPC目前不支援,但如果您在自訂反向代理前使用 Triton,您可以選擇啟用 GRPC。

Boolean

true, false

SAGEMAKER_TRITON_GRPC_PORT

的預設連接埠GRPC為 8001,但您可以進行變更。

字串

<port_number>

SAGEMAKER_TRITON_THREAD_COUNT

您可以設定預設HTTP請求處理常式執行緒的數量。

字串

<number>

SAGEMAKER_TRITON_LOG_VERBOSE

true 預設為關閉 SageMaker此選項。

Boolean

true, false

SAGEMAKER_TRITON_LOG_INFO

false 依預設,在 上 SageMaker。

Boolean

true, false

SAGEMAKER_TRITON_LOG_WARNING

false 依預設,在 上 SageMaker。

Boolean

true, false

SAGEMAKER_TRITON_LOG_ERROR

false 依預設,在 上 SageMaker。

Boolean

true, false

SAGEMAKER_TRITON_SHM_DEFAULT_BYTE_SIZE

指定 Python 後端的 shm 大小 (以位元組為單位)。預設值為 16 MB,但可以增加。

字串

<number>

SAGEMAKER_TRITON_SHM_GROWTH_BYTE_SIZE

指定 Python 後端的 shm 增長大小 (以位元組為單位)。預設值為 1 MB,但可增加以允許更大的增量。

字串

<number>

SAGEMAKER_TRITON_TENSORFLOW_VERSION

預設值為 2。從 Triton v23.04 開始,Triton 不再支援 Tensorflow 2。您可以為舊版本設定此變數。

字串

<number>

SAGEMAKER_TRITON_MODEL_LOAD_GPU_LIMIT

限制用於模型載入的GPU記憶體百分比上限,允許其餘部分用於推論請求。

字串

<number>

SAGEMAKER_TRITON_ALLOW_METRICS

false 依預設,在 上 SageMaker。

Boolean

true, false

SAGEMAKER_TRITON_METRICS_PORT

預設連接埠為 8002。

字串

<number>

SAGEMAKER_TRITON_PUBLISH_METRICS_TO_CLOUDWATCH

false 依預設,在 上 SageMaker。將此變數設定為 true,以允許將 Triton 預設指標推送至 Amazon CloudWatch。如果啟用此選項,當指標發佈至您的帳戶時,您必須負責 CloudWatch 成本。

Boolean

true, false

SAGEMAKER_TRITON_CLOUDWATCH_LOG_GROUP

如果您已啟用發佈至 的指標,則需要 CloudWatch。

字串

<cloudwatch_log_group_name>

SAGEMAKER_TRITON_CLOUDWATCH_METRIC_NAMESPACE

如果您已啟用發佈至 的指標,則需要 CloudWatch。

字串

<cloudwatch_metric_namespace>

SAGEMAKER_TRITON_ADDITIONAL_ARGS

在啟動 Triton Server 時附加的任何其他引數。

字串

<additional_args>