在單一端點後方的單一容器託管多個模型 - Amazon SageMaker

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

在單一端點後方的單一容器託管多個模型

多模型端點提供可擴展且經濟實惠的解決方案,而且可以部署大量模型。其運用相同資源機群及共享服務容器來託管所有模型。相較於使用單一模型端點,這能改善端點使用率,藉此降低託管成本。由於 Amazon 會 SageMaker 管理記憶體中的載入模型,並根據端點的流量模式對其進行擴展,因此可降低部署開銷。

下圖顯示多模型端點與單一模型端點的運作方式。

圖表顯示多模型端點與單一模型端點分別如何託管模型。

多模型端點非常適合託管大量模型,這些模型在共用服務容器採用相同機器學習 (ML) 架構。如您混合經常存取及不常存取的模型,則多模型端點可利用有效率的方式為此流量提供服務,運用更少資源並節省更多成本。您的應用程式應能容忍偶爾發生的冷啟動相關延遲處罰,這會在調用不常使用的模型時發生。

多模型端點支援託管 CPU 與 GPU 支援的模型。藉由採用 GPU 支援的模型,您可透過增加端點及其基礎加速運算執行個體的使用量來降低模型部署成本。

多模型端點也能支援跨模型記憶體資源的時間共享。這最適合用於模型大小和調用延遲相當類似的情況。在這種情況下,多模型端點可有效地在所有模型中使用執行個體。如果您的模型有明顯較高的每秒交易次數 (TPS) 或延遲需求,建議您將模型託管於專用端點。

您可利用具有下列特徵的多模型端點:

您不能將 multi-model-enabled 容器與 Amazon Elastic Inference 搭配使用。

您可以使用 AWS SDK for Python (Boto) 或 SageMaker 控制台建立多模型端點。對於 CPU 支援的多模型端點,您可整合多模型伺服器程式庫來建立搭配自訂建置容器的端點。

支援的演算法、架構與執行個體

如需資訊了解可搭配多模型端點使用的演算法、架構與執行個體類型,請參閱下列各節。

對於採用 CPU 支援執行個體的多模型端點,支援的演算法、架構與執行個體

下列演算法與架構的推論容器支援多模型端點:

若要使用任何其他架構或演算法,請使用 SageMaker 推論工具組來建置支援多模型端點的容器。如需相關資訊,請參閱為 SageMaker 多模型端點構建自己的容器

多模型端點支援所有 CPU 執行個體類型。

對於採用 GPU 支援執行個體的多模型端點,支援的演算法、架構與執行個體

SageMaker Trit on 推論伺服器支援在多模型端點上託管多個 GPU 支援的模型。這支援所有主要的推論架構,例如 NVIDIA® TensorRT™、MXNet、Python PyTorch、ONNX、XGBoost、科學套件學習、開放維諾、自訂 C++ 等。 RandomForest

若要採用任何其他架構或演算法,您可利用 Python 或 C ++ 的 Triton 後端編寫模型邏輯並為任何自訂模型提供服務。在伺服器準備就緒之後,您即可開始在單一端點後方部署數百個深度學習模型。

多模型端點支援下列 GPU 執行個體類型:

執行個體系列 執行個體類型 vCPU 每個 vCPU 的記憶體 GiB GPU 記憶體

p2

ml.p2.xlarge

4

15.25

1

12

p3

ml.p3.2xlarge

8

7.62

1

16

g5

ml.g5.xlarge

4

4

1

24

g5

ml.g5.2xlarge

8

4

1

24

g5

ml.g5.4xlarge

16

4

1

24

g5

ml.g5.8xlarge

32

4

1

24

g5

ml.g5.16xlarge

64

4

1

24

g4dn

ml.g4dn.xlarge

4

4

1

16

g4dn

ml.g4dn.2xlarge

8

4

1

16

g4dn

ml.g4dn.4xlarge

16

4

1

16

g4dn

ml.g4dn.8xlarge

32

4

1

16

g4dn

ml.g4dn.16xlarge

64

4

1

16

多模型端點的範例筆記本

若要進一步了解如何使用多模型端點,可嘗試下列範例筆記本:

如需如何建立及存取 Jupyter 筆記本執行個體 (您可以用來執行上述範例) 的指示 SageMaker,請參閱。Amazon SageMaker 筆記本實建立筆記本執行個體並開啟之後,請選擇 [SageMaker 範例] 索引標籤以查看所有 SageMaker範例的清單。多模型端點筆記本位於 ADVANCED FUNCTIONALITY (進階功能) 區段。若要開啟筆記本,請選擇其 Use (使用) 標籤,然後選擇 Create copy (建立複本)。

如需有關多模型端點使用案例的詳細資訊,請參閱下列部落格與資源:

多模型端點的運作方式

SageMaker 管理託管在容器記憶體中多模型端點上的模型生命週期。建立端點時,不必將所有模型從 Amazon S3 儲存貯體下載到容器,而是在呼叫端點時 SageMaker動態載入和快取它們。當 SageMaker 收到特定模型的調用請求時,它會執行以下操作:

  1. 路由請求至端點後方單一執行個體。

  2. 將模型從 S3 儲存貯體下載到該執行個體的儲存磁碟區。

  3. 載入模型至該加速運算執行個體的容器記憶體 (CPU 或 GPU,視您擁有 CPU 或 GPU 支援的執行個體而定)。如果模型已經加載到容器的內存中,則調用會更快,因為 SageMaker 不需要下載和加載它。

SageMaker 繼續將模型的要求路由到已載入模型的執行個體。不過,如果模型收到許多叫用要求,而且多模型端點還有其他執行個體,則會將一些要求 SageMaker 路由到另一個執行個體以容納流量。如果模型尚未載入第二個執行個體,則模型會下載到該執行個體的儲存磁碟區,並載入容器的記憶體中。

當執行個體的記憶體使用率很高且 SageMaker 需要將另一個模型載入記憶體時,它會從該執行個體的容器卸載未使用的模型,以確保有足夠的記憶體來載入模型。卸載的模型會留在執行個體的儲存磁碟區上,稍後可以載入容器的記憶體,而無須從 S3 儲存貯體再次下載。如果執行個體的儲存磁碟區達到其容量,請從儲存磁碟區 SageMaker 刪除任何未使用的模型。

若要刪除模型,請停止傳送請求並將其從 S3 儲存貯體中刪除。 SageMaker 在服務容器中提供多模型端點功能。將模型新增到多模型端點或從中刪除模型時,並不需要更新端點本身。若要新增模型,請將模型上傳到 S3 儲存貯體並進行調用。您不需要變更程式碼也能使用。

注意

當您更新多模型端點時,隨著多模型端點的智慧路由適應流量模式,端點的初始調用請求可能經歷較高延遲。但在其了解流量模式之後,您即可針對最常用模型體驗低延遲情況。較少使用的模型可能產生部分冷啟動延遲,這是由於模型會動態載入至執行個體。

設定 SageMaker 多模型端點模型快取行為

根據預設,多模型端點會在記憶體 (CPU 或 GPU,視您擁有 CPU 或 GPU 支援的執行個體而定) 與磁碟快取常用模型,以便提供低延遲推論。僅當容器用完記憶體或磁碟空間無法容納新目標模型時,才會從磁碟卸載和/或刪除已快取模型。

您可變更多模型端點的快取行為,並在呼叫 create_model 時,設定 ModelCacheSetting 參數來明確啟用或停用模型快取。

對於不受益於模型快取的使用案例,建議設定 ModelCacheSetting 參數的值為 Disabled。例如,當需要從端點為大量模型提供服務,但每個模型僅調用一次 (或很少使用) 時。對於這類使用案例,若設定 ModelCacheSetting 參數的值為 Disabled,則相較於預設快取模式,可提高 invoke_endpoint 請求的每秒交易數 (TPS)。在這些用例中,更高的 TPS 是因為invoke_endpoint請求後 SageMaker 會執行以下操作:

  • 以非同步方式從記憶體卸載模型,並在調用模型之後立即從磁碟刪除該模型。

  • 在推論容器為下載及載入模型提供更高並行性。對於 CPU 與 GPU 支援的端點而言,並行是容器執行個體 vCPU 數目的因素之一。

如需為多模型端點選擇 SageMaker ML 執行個體類型的指導方針,請參閱多模型端點部署的執行個體建議

多模型端點部署的執行個體建議

為多模型端點選取 SageMaker ML 執行個體類型時,需要考量幾個項目:

  • 為需要服務的所有模型佈建足夠的 Amazon Elastic Block Store (Amazon EBS) 容量。

  • 在效能 (將冷啟動次數減到最少) 與成本 (請勿過度佈建執行個體容量) 之間取得平衡。如需針對端點和多模型端點之每個執行個體類型 SageMaker 連接的儲存磁碟區大小的相關資訊,請參閱託管執行個體儲存磁碟區

  • 若是設定為在 MultiModel 模式下執行的容器,則相較於預設的 SingleModel 模式,為其執行個體佈建的儲存磁碟區會較大。相較於 SingleModel 模式,這可在執行個體儲存磁碟區快取更多模型。

選擇 SageMaker ML 執行個體類型時,請考慮下列事項:

  • 目前所有 CPU 執行個體類型與單一 GPU 執行個體類型均支援多模型端點。

  • 對於您要託管於多模型端點後方模型的流量分佈 (存取模式),以及模型大小 (可在執行個體的記憶體載入幾個模型),請留意下列資訊:

    • 將執行個體的記憶體容量視為模型要載入的快取空間,並將 vCPU 數量視為對於已載入模型執行推論的並行限制 (假設調用模型已繫結 CPU)。

    • 對於 CPU 支援的執行個體,vCPU 數量會影響每個執行個體的最大並行調用 (假設調用模型已繫結 CPU)。更高數量的 vCPU 可讓您同時調用更多唯一模型。

    • 對於 GPU 支援的執行個體,較高執行個體與 GPU 記憶體容量可讓您載入更多模型並準備就緒可提供推斷請求服務。

    • 對於 CPU 與 GPU 支援的執行個體,擁有部分可用 “閒置” 記憶體,以便卸載未使用模型,這尤其適用具多個執行個體的多模型端點。如果執行個體或可用區域故障,這些執行個體上的模型會重新路由到端點後方的其他執行個體。

  • 決定載入/下載時間公差:

    • d 執行個體類型系列 (例如 m5d、c5d 或 r5d) 以及 g5 隨附 NVMe (非揮發性記憶體儲存裝置) SSD,可提供高 I/O 效能,而且可能會縮短將模型下載到儲存磁碟區所需的時間,以及容器從儲存磁碟區載入模型所需的時間。

    • 由於 d 和 g5 執行個體類型隨附 NVMe SSD 儲存體,因此 SageMaker 不會將 Amazon EBS 儲存磁碟區連接到託管多模型端點的這些 ML 運算執行個體。當模型的大小類似且同質 (亦即它們具有類似的推論延遲和資源需求),自動擴展的效果最理想。

您也可利用下列指引來協助您最佳化多模型端點的模型載入:

選擇無法將所有目標模型保存於記憶體的執行個體類型

在某些情況下,您可以選擇不能一次將所有目標模型保存在記憶體中的執行個體類型,以降低成本。 SageMaker 在記憶體不足時動態卸載模型,以為新目標模型騰出空間。對於不常請求的模型,您會犧牲動態負載延遲。在延遲需求較嚴密的情況下,您可選擇較大的執行個體類型或更多執行個體。預先投入時間進行效能測試及分析,可協助成功進行生產部署。

評估模型快取命中

Amazon CloudWatch 指標可協助您評估模型。如需詳細資訊了解可搭配多模型端點使用的指標,請參閱CloudWatch 多模型端點部署的指標

您可以使用 ModelCacheHit 指標的 Average 統計資料,監控已載入模型中的請求比率。您可以使用 ModelUnloadingTime 指標的 SampleCount 統計資料,監控在某個期間內傳送到容器的取消載入請求數量。如模型太常卸載 (代表出現輾轉現象 (Thrashing);由於模型工作集的快取空間不足,因此再次取消載入及載入模型),請考慮使用具有更多記憶體的較大執行個體類型,或增加多模型端點後方的執行個體數量。對於具有多個執行個體的多模型端點,請注意模型可能會在 1 個以上的執行個體上載入。