故障診斷 - Amazon SageMaker AI

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

故障診斷

下列常見問答集可協助您進行 Amazon SageMaker 非同步推論端點問題疑難排解。

您可以使用下列方法,找到端點後面的執行個體計數:

  • 您可以使用 SageMaker AI DescribeEndpoint API 來描述端點後方在任何指定時間點的執行個體數目。

  • 檢視 Amazon CloudWatch 指標即可找到執行個體計數。檢視端點執行個體的指標,例如 CPUUtilizationMemoryUtilization,並且查看 1 分鐘期間的樣本計數統計資料。計數應等於作用中執行個體的數量。下列螢幕擷取畫面顯示 CloudWatch 主控台繪製的 CPUUtilization 指標,其中統計資料設定為 Sample count期間設定為 1 minute,得出的計數為 5。

CloudWatch 主控台顯示端點的作用中執行個體計數圖表。

下表依架構類型概述 SageMaker AI 容器的常見可調整環境變數。

TensorFlow

環境變數 描述

SAGEMAKER_TFS_INSTANCE_COUNT

若為以 TensorFlow 為基礎的模型,tensorflow_model_server 二進位是負責在記憶體載入模型、針對模型圖表執行輸入,以及衍生輸出的操作要素。通常會啟動此二進位的單一執行個體,為端點中的模型提供服務。此二進位內部為多執行緒,會繁衍多個執行緒,回應推論請求。在某些情況下,如果您發現 CPU 使用率率尚可 (使用率超過 30%),但記憶體使用率過低 (使用率低於 10%),不妨提高此參數。增加可服務的 tensorflow_model_servers 數量,通常會提高端點的輸送量。

SAGEMAKER_TFS_FRACTIONAL_GPU_MEM_MARGIN

此參數控管可用 GPU 記憶體的一部分,以初始化 CUDA/CUDNN 和其他 GPU 程式庫。0.2 表示 20% 的可用 GPU 記憶體保留用於初始化 CUDA/CUDNN 和其他 GPU 程式庫,而 80% 的可用 GPU 記憶體在 TF 處理程序平均分配。除非啟用此 allow_growth 選項,否則會預先配置 GPU 記憶體。

SAGEMAKER_TFS_INTER_OP_PARALLELISM

這樣一來便會與 inter_op_parallelism_threads 變數建立關聯。此變數會決定獨立非封鎖操作所使用的執行緒數量。0 代表系統會選取適當的號碼。

SAGEMAKER_TFS_INTRA_OP_PARALLELISM

這樣一來便會與 intra_op_parallelism_threads 變數建立關聯。可用於某些操作的執行緒數量隨即決定,例如矩陣乘法和加速減少。0 的值表示系統會選取適當的數字。

SAGEMAKER_GUNICORN_WORKERS

這個值控管要求 Gunicorn 為處理請求產生的工作者程序數量。此值可與其他參數搭配使用,衍生最大化推論輸送量的集合。除此之外,SAGEMAKER_GUNICORN_WORKER_CLASS 也控管產生的工作者的類型,通常是 asyncgevent

SAGEMAKER_GUNICORN_WORKER_CLASS

這個值控管要求 Gunicorn 為處理請求產生的工作者程序數量。此值可與其他參數搭配使用,衍生最大化推論輸送量的集合。除此之外,SAGEMAKER_GUNICORN_WORKER_CLASS 也控管產生的工作者的類型,通常是 asyncgevent

OMP_NUM_THREADS

Python 內部使用 OpenMP 在程序中實作多執行緒。通常會產生相當於 CPU 核心數量的執行緒。然而,在 Intel 的 HypeThreading 這類 Simultaneous Multi Threading (SMT) 實作時,若干程序可能會產生實際 CPU 核心數兩倍數量的執行緒,超額訂閱特定核心。在某些情況下,Python 二進位最終可能產生的執行緒數,會是可用處理器核心的四倍。因此,如果您使用工作者執行緒超額訂閱可用核心,則此參數的理想設定為 1,或是開啟 SMT 之 CPU 上 CPU 核心數量的一半。

TF_DISABLE_MKL

TF_DISABLE_POOL_ALLOCATOR

在某些情況下,如果將 TF_DISABLE_MKLTF_DISABLE_POOL_ALLOCATOR 設定為 1,則關閉 MKL 可加快推論速度。

PyTorch

環境變數 描述

SAGEMAKER_TS_MAX_BATCH_DELAY

這是 TorchServe 等待接收的批次延遲時間上限。

SAGEMAKER_TS_BATCH_SIZE

如果計時器時間到之前,TorchServe 未收到 batch_size 中指定的請求數量,則會將收到的請求傳送至模型處理常式。

SAGEMAKER_TS_MIN_WORKERS

TorchServe 允許縮減的工作者數量下限。

SAGEMAKER_TS_MAX_WORKERS

TorchServe 允許擴展的工作者數量上限。

SAGEMAKER_TS_RESPONSE_TIMEOUT

時間延遲,亦即推論未得到回應時,經過這段時間便會逾時。

SAGEMAKER_TS_MAX_REQUEST_SIZE

TorchServe 的承載大小上限。

SAGEMAKER_TS_MAX_RESPONSE_SIZE

TorchServe 的回應大小上限。

多模型伺服器 (MMS)

環境變數 描述

job_queue_size

針對推論請求承載類型龐大的情況,以及由於承載較大,因此 JVM 堆積記憶體使用量可能較高時,不妨調整這個參數。理想中,不妨降低 JVM 的堆積記憶體要求,並允許 Python 工作者為實際的模型服務分配更多記憶體。JVM 僅用於接收 HTTP 請求、將請求排入佇列,以及將請求分派給 Python 型工作者進行推論。如果增加 job_queue_size,到頭來可能會增加 JVM 的堆記憶體使用量,最終從 Python 工作者可能使用的主機移除記憶體。因此,調整此參數時請務必小心。

default_workers_per_model

此參數用於後端模型服務,調整可能獲得不錯的效果,因為這個參數是整個模型服務的關鍵要素,也是 Python 為每個模型生成執行緒的基礎。如果此元素速度較慢 (或調整不當),則前端調整可能無效。

您可以讓非同步推論使用與即時推論或批次轉換相同的容器。請確認容器的逾時和承載大小限制,已設定為處理較大的承載和更長的逾時。

請參閱下列非同步推論限制:

  • 承載大小限制:1 GB

  • 逾時限制:請求最多可能需要 60 分鐘。

  • 佇列訊息 TimeToLive (TTL):6 小時

  • 可以放置在 Amazon SQS 內的訊息數量:無限制。不過,標準佇列的傳輸中訊息數量配額為 120,000,FIFO 佇列配額為 20,000。

非同步推論一般可根據調用或執行個體橫向擴展。若為調用指標,不妨查看 ApproximateBacklogSize 這個定義佇列中尚未處理之項目數量的指標。您可以利用此指標或 InvocationsPerInstance 指標,了解哪些 TPS 可能受節制。在執行個體層級,請檢查執行個體類型及其 CPU/GPU 使用率,定義何時橫向擴展。如果單一執行個體的容量超過 60-70% 通常是好事,代表硬體正在飽和。

不建議使用多個擴展政策,因為這些政策可能會發生衝突,導致硬體層級混淆,在橫向擴展時導致延遲。

請檢查您的容器是否能夠同時處理 ping 並調用請求。SageMaker AI 調用請求大約需要 3 分鐘,在此期間,由於逾時導致 SageMaker AI 將容器偵測為 ,因此通常多個 ping 請求最終會失敗Unhealthy

是。MaxConcurrentInvocationsPerInstance 是非同步端點的功能。這個功能不需要自訂容器實作。MaxConcurrentInvocationsPerInstance 控制調用請求傳送至客戶容器的速率。如果此值設為 1,則無論客戶容器有多少工作者,一次都只會將 1 個請求傳送至容器。

這個錯誤意味著客戶容器傳回錯誤。SageMaker AI 無法控制客戶容器的行為。SageMaker AI 只會傳回來自 的回應ModelContainer,不會重試。如果需要,您可以將調用設定為失敗時重試。建議您開啟容器記錄,並檢查容器日誌,找出模型 500 錯誤的根本原因。此外,也請在失敗點檢查相應的 CPUUtilizationMemoryUtilization 指標。您也可以將 S3FailurePath 設定為 Amazon SNS 中的模型回應,做為非同步錯誤通知的一部分,調查失敗的原因。

您可以查看指標 InvocationsProcesssed;該指標應與您希望根據單一並行在一分鐘內處理的調用次數一致。

最佳實務是啟用 Amazon SNS 這個訊息導向的應用程式通知服務,讓多個訂閱者利用各種傳輸通訊協定 (包括 HTTP、Amazon SQS 和電子郵件) 請求和接收時間關鍵訊息的 “推送” 通知。使用 CreateEndpointConfig 並指定 Amazon SNS 主題建立端點時,非同步推論會發布通知。

要使用 Amazon SNS 檢查異步終端節點的預測結果,首先需要建立一個主題、訂閱主題、確認您對主題的訂閱,並記下該主題的 Amazon Resource Name (ARN)。有關如何建立、訂閱和尋找 Amazon SNS 主題 Amazon ARN 的詳細資訊,請參閱 Amazon SNS 開發人員指南配置 Amazon SNS。如需如何搭配非同步推論使用 Amazon SNS 的更多資訊,請參閱查看預測結果

是。非同步推論提供一種機制,可在沒有請求時將執行個體縮減為零。如果您的端點在這些期間縮減為零執行個體,則在佇列中的請求數量超過擴展政策指定的目標之前,端點將不會再次橫向擴展。這樣一來,佇列中請求的等待時間可能很長。在這種情況下,如果您想針對小於指定佇列目標的新請求,從零執行個體縱向擴展,可以使用稱為 HasBacklogWithoutCapacity 的其他擴展政策。如需如何定義此擴展政策的更多資訊,請參閱自動擴展非同步端點

如需各區域非同步推論支援的執行個體詳盡清單,請參閱 SageMaker 定價。繼續之前,請檢查您所在區域是否提供所需的執行個體。