在單一端點後方的單一容器託管多個模型 - 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™、、 PyTorch、MXNet、Python、、ONNXXGBoost、科學套件學習、開放 RandomForestVINO、自訂 C++ 等。

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

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

執行個體系列 執行個體類型 vCPUs 每 v 的記憶體 GiB CPU GPUs 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 範例的清單。多模型端點筆記本位於ADVANCEDFUNCTIONALITY部分中。若要開啟筆記本,請選擇其 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或視您是否擁有執行個體CPU或GPU備份的執行個體而定) 和磁碟上快取GPU,以提供低延遲推論。僅當容器用完記憶體或磁碟空間無法容納新目標模型時,才會從磁碟卸載和/或刪除已快取模型。

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

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

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

  • 在推論容器為下載及載入模型提供更高並行性。對於這兩個端點CPU和GPU已支援的端點,並行是容器執行個體數目 vCPUs 的因素。

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

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

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

  • 為所有需要提供服務的模型佈建足夠的 Amazon 彈性區塊存放區 (AmazonEBS) 容量。

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

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

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

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

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

    • 將實例上的內存量視為要加載的模型的緩存空間,並將其數量 vCPUs 視為在加載模型上執行推斷的並發限制(假設調用模型綁定到)。CPU

    • 對於CPU支持的實例, vCPUs 影響每個實例的最大並發調用數量(假設調用模型綁定到)。CPU較高的數量 vCPUs 可讓您同時叫用更多唯一的模型。

    • 對於GPU支援的執行個體,較高數量的執行個體和GPU記憶體可讓您載入更多模型,並準備好為推論要求提供服務。

    • 對於兩個執行個體CPU和GPU支援的執行個體,都有一些可用的「鬆弛」記憶體,以便可以卸載未使用的模型,尤其是對於具有多個執行個體的多模型端點。如果執行個體或可用區域故障,這些執行個體上的模型會重新路由到端點後方的其他執行個體。

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

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

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

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

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

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

評估模型快取命中

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

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