

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

# 模型託管常見問答集


請參閱下列常見問答集項目，了解 SageMaker AI 推論託管常見問題的答案。

## 一般託管


在下列常見問答集項目中，有 SageMaker AI 推論的常見一般問題的答案。

### 問：Amazon SageMaker AI 提供哪些部署選項？


答：建立和訓練模型之後，Amazon SageMaker AI 提供四個選項來部署模型，以開始進行預測。即時推論適用於具有毫秒延遲要求、承載大小最多 25 MB、一般回應處理時間長達 60 秒、串流回應處理時間長達 8 分鐘的工作負載。批次轉換非常適合對事先已有的大批資料進行離線預測。非同步推論是專為不低於一秒延遲需求的工作負載所設計，可承載大小最多 1 GB 的資料，並且處理時間長達 60 分鐘。有了無伺服器推論，您可以快速部署機器學習模型推論，無需設定或管理基礎設施，並且只需為處理推論要求的運算容量付費，這對於間歇性工作負載來說是理想選擇。

### 問：如何在 SageMaker AI 中選擇模型部署選項？


如果您想要批次處理請求，可以選擇批次轉換。另一方面，如果您希望對模型的每個請求都接收推論，那麼可以考慮選擇非同步推論、無伺服器推論或即時推論。如果您有長時間的處理需求或大型有效負載，並且想要將請求排入佇列，則可以選擇非同步推論。如果您的工作負載有無法預測或間歇性的流量，您可以選擇無伺服器推論。如果您有持續的流量，並且需要較低且一致的請求延遲，則可以選擇即時推論。

### 問：我曾聽說過 SageMaker AI 推論很昂貴。託管模型時最佳化成本的最佳方法是什麼？


答：若要使用 SageMaker AI 推論最佳化您的成本，您應該在您的使用案例中，選擇正確的託管選項。您還可以使用像是 [Amazon SageMaker AI Savings Plans](https://aws.amazon.com/savingsplans/ml-pricing/)、使用 [SageMaker AI Neo](https://docs.aws.amazon.com/sagemaker/latest/dg/neo.html) 進行模型最佳化、[多模型端點](https://docs.aws.amazon.com/sagemaker/latest/dg/multi-model-endpoints.html)和[多容器端點](https://docs.aws.amazon.com/sagemaker/latest/dg/multi-container-endpoints.html)，或自動擴展等推論功能。如需如何最佳化推論成本的秘訣，請參閱[推論成本最佳化最佳實務](inference-cost-optimization.md)。

### 問：為什麼我應該使用 Amazon SageMaker Inference Recommender？


答：如果您需要適當端點組態的建議，以提高效能並降低成本，請使用 Amazon SageMaker Inference Recommender。過去，想要部署模型資料的科學家必須執行手動基準測試，以選取正確的端點組態。首先，他們必須根據其模型的資源要求和範例承載，從 70 多種可用的執行個體類型中，選取正確的機器學習執行個體類型，然後將模型最佳化，以因應不同的硬體。接著，需進行廣泛的載入測試，以驗證是否符合延遲和輸送量需求，同時維持較低成本。推論建議程式可協助您執行以下項目，消除此複雜性：
+ 透過執行個體建議，幾分鐘內即可開始使用。
+ 進行跨執行個體類型的負載測試，以在數小時內取得端點組態的建議。
+ 自動調整容器和模型伺服器參數，並在特定執行個體類型中，執行模型最佳化。

### 問：什麼是模型伺服器？


答：SageMaker AI 端點是使用容器化 Web 伺服器 (包含模型伺服器) 的 HTTP REST 端點。這些容器負責載入並回應機器學習模型的要求。容器需要實作一個 Web 伺服器，用以在 8080 連接埠上回應 `/invocations` 和 `/ping`。

常見的模型伺服器包括 TensorFlow 服務、TorchServe 和多模型伺服器。SageMaker AI 架構容器內建了這些模型伺服器。

### 問：什麼是使用 Amazon SageMaker AI 自備容器？


答：SageMaker AI 推論中的所有內容都是容器化的。SageMaker AI 為熱門架構提供受管容器，例如 TensorFlow、SKlearn 和 HuggingFace。如需這些映像檔的完整更新清單，請參閱[可用映像](https://github.com/aws/deep-learning-containers/blob/master/available_images.md)。

 有時候，您可能需要為自訂架構建置一個容器。這種方法稱為*自備容器*或*BYOC*。使用 BYOC 方法，您可以提供 Docker 映像檔來設定您的架構或程式庫。然後，您可以將映像推送至 Amazon Elastic Container Registry (Amazon ECR)，以便您透過 SageMaker AI 使用該映像。

或者，您也可以擴展容器，而不是從頭開始建置映像。您可以擷取 SageMaker AI 提供的其中一個基礎映像，並在 Dockerfile 中將相依項新增上去。

### 問：是否需要在 SageMaker AI 上訓練我的模型，以便在 SageMaker AI 端點上託管模型？


答：SageMaker AI 提供的能力，可讓您將非 SageMaker AI 訓練的自備架構模型部署到任何 SageMaker AI 主控選項上。

SageMaker AI 要求您將模型封裝在 `model.tar.gz` 檔案中，並具有特定的目錄結構。每個架構都有自己的模型結構 (請參閱以下範例結構問題)。[如需詳細資訊，請參閱 [TensorFlow](https://sagemaker.readthedocs.io/en/stable/frameworks/tensorflow/deploying_tensorflow_serving.html#deploying-directly-from-model-artifacts)、[PyTorch](https://sagemaker.readthedocs.io/en/stable/frameworks/pytorch/using_pytorch.html#bring-your-own-model) 和 MXNet](https://sagemaker.readthedocs.io/en/stable/frameworks/mxnet/using_mxnet.html#deploy-endpoints-from-model-data) 的 SageMaker Python SDK 文件。

雖然您可以從預先建置的架構映像 (例如 TensorFlow、PyTorch 和 MXNet) 中進行選擇來裝載訓練過的模型，但您也可以建立自己的容器，以便在 SageMaker AI 端點上託管訓練過的模型。如需逐步解說，請參閱範例 Jupyter 筆記本[建立您自己的演算法容器](https://github.com/aws/amazon-sagemaker-examples/blob/main/advanced_functionality/scikit_bring_your_own/scikit_bring_your_own.ipynb)。

### 問：如果我想要在 SageMaker AI 上部署，但不在 SageMaker AI 上進行訓練，應該如何建構模型？


答：SageMaker AI 要求將模型成品壓縮到`.tar.gz`檔案或*壓縮包*中。SageMaker AI 會自動將此 `.tar.gz` 檔案擷取到容器中的 `/opt/ml/model/` 目錄中。壓縮包不應該包含任何符號連結或不必要的文件。如果您正在使用其中一個架構容器，例如 TensorFlow、PyTorch 或 MXNet，容器會預期您的 TAR 結構如下所示：

**TensorFlow**

```
model.tar.gz/
             |--[model_version_number]/
                                       |--variables
                                       |--saved_model.pb
            code/
                |--inference.py
                |--requirements.txt
```

**PyTorch**

```
model.tar.gz/
             |- model.pth
             |- code/
                     |- inference.py
                     |- requirements.txt  # only for versions 1.3.1 and higher
```

**MXNet**

```
model.tar.gz/
            |- model-symbol.json
            |- model-shapes.json
            |- model-0000.params
            |- code/
                    |- inference.py
                    |- requirements.txt # only for versions 1.6.0 and higher
```

### 問：調用 SageMaker AI 端點時，我可以提供 `ContentType` 和 `Accept` MIME 類型。哪一種是用來識別正在發送和接收的資料類型？


答：`ContentType` 是請求內文中輸入資料的 MIME 類型 (您要發送到端點的資料的 MIME 類型)。模型伺服器會使用 `ContentType` 來判斷它是否可以處理提供的類型。

`Accept` 是推論回應的 MIME 類型 (端點傳回資料的 MIME 類型)。模型伺服器使用 `Accept` 類型來確定它是否可以處理傳回提供的類型。

常見的 MIME 類型包括 `text/csv`、`application/json` 和 `application/jsonlines`。

### 問：SageMaker AI 推論支援哪些資料格式？


答：SageMaker AI 會將任何請求傳遞至模型容器，而不進行修改。容器必須包含反序列化請求的邏輯。如需瞭解更多內建演算法定義格式的詳細資訊，請參閱[推論的常見資料格式](https://docs.aws.amazon.com/sagemaker/latest/dg/cdf-inference.html)。如果您要建置自己的容器或使用 SageMaker AI 架構容器，您可以包含邏輯以接受您選擇的請求格式。

同樣地，SageMaker AI 也會傳回回應而不進行修改，然後用戶端必須還原序列化回應。在內建演算法的情況下，它們會傳回特定格式的回應。如果您要建置自己的容器或使用 SageMaker AI 架構容器，您可以包含邏輯，根據您選擇的請求格式以傳回回應。

### 問：如何使用影片或映像等二進位資料調用我的端點？


使用[調用端點](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_runtime_InvokeEndpoint.html) API 呼叫，在您的端點中進行推論。

將輸入作為承載傳遞給 `InvokeEndpoint` API 時，您必須提供模型預期的正確輸入資料類型。在 `InvokeEndpoint` API 呼叫中傳遞承載時，要求位元組會直接轉送至模型容器。舉例來說，在映像中您可以使用`application/jpeg`替代`ContentType`，並確定您的模型可以對此類型的資料執行推論。這適用於 JSON，CSV，影片或您可能正在處理的任何其他輸入類型。

要考慮的另一個因素是承載大小限制。即時端點的承載限制為 25 MB，無伺服器端點則為 4 MB。您可以將影片拆分為多個影格，並單獨調用每個影格的端點。或者，如果您的使用案例允許，您可以使用支援最多 1 GB 承載的非同步端點，在承載中傳送整個影片。

如需如何使用非同步推論在大型影片上執行電腦視覺推論的範例，請參閱此[部落格文章](https://aws.amazon.com/blogs/machine-learning/run-computer-vision-inference-on-large-videos-with-amazon-sagemaker-asynchronous-endpoints/)。

## 即時推論


在下列常見問答集項目中，有 SageMaker AI 即時推論的常見問題答案。

### 問：如何建立 SageMaker AI 端點？


答：您可以透過支援的工具建立 SageMaker AI AWS端點，例如 AWS SDKs、SageMaker Python SDK AWS 管理主控台 AWS CloudFormation、 和 AWS Cloud Development Kit (AWS CDK)。

端點建立中有三個關鍵實體：SageMaker AI 模型、SageMaker AI 端點組態和 SageMaker AI 端點。SageMaker AI 模型會指向您正在使用的模型資料和映像。端點組態會定義您的生產變體，其中可能包括執行個體類型和執行個體計數。然後，您可以使用 SageMaker AI 的[create\$1endpoint](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker.html#SageMaker.Client.create_endpoint) API 呼叫或 SageMaker AI 的[.deploy()](https://sagemaker.readthedocs.io/en/stable/api/inference/model.html) 呼叫，利用模型和端點組態中的中繼資料建立端點。

### 問：是否需要使用 SageMaker Python SDK 來建立/調用端點？


答：否，您可以使用各種 AWS SDKs（請參閱[叫用](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_runtime_InvokeEndpoint.html#API_runtime_InvokeEndpoint_SeeAlso)/[建立](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEndpoint.html#API_CreateEndpoint_SeeAlso)可用的 SDKs)，甚至直接呼叫對應的 Web APIs。

### 問：多模型端點 (MME) 和多模型伺服器 (MMS) 有何差異？


答：多模型端點是 SageMaker AI 提供的即時推論選項。使用多模型端點，您可以在一個端點後面託管數千個模型。[多模型伺服器](https://github.com/awslabs/multi-model-server)是提供機器學習模型的開放原始碼架構。它可提供多模型端點所需的 HTTP 前端和模型管理功能，以將多個模型託管於單一容器內、動態地將模型載入到容器中及從中卸載模型，以及在指定的載入模型上執行推論。

### 問：即時推論支援哪些不同的模型部署架構？


答：SageMaker AI 即時推論支援各種模型部署架構，例如多模型端點、多容器端點和序列推論管道。

[多模型端點 (MME) — MME](https://docs.aws.amazon.com/sagemaker/latest/dg/multi-model-endpoints.html) 可讓客戶以符合成本效益的方式部署上千個超個人化模型。所有模型都部署在共用資源叢集上。當模型的大小和延遲相似且屬於相同的機器學習 (ML) 架構時，MME 效果最佳。當您不需要隨時呼叫相同的模型時，這些端點非常適合。您可以將個別模型動態載入到 SageMaker AI 端點以滿足您的請求。

[多容器端點 (MCE) — MCE](https://docs.aws.amazon.com/sagemaker/latest/dg/multi-container-endpoints.html) 允許客戶部署 15 個具有多種機器學習 (ML) 架構和功能的不同容器，而不需要冷啟動，而且只使用一個 SageMaker 端點。您可以直接調用這些容器。當您想要將所有模型保留在記憶體中時，MCE 最適合。

[序列推論管道 (SIP)](https://docs.aws.amazon.com/sagemaker/latest/dg/inference-pipelines.html) — 您可以使用 SIP 在單一端點上將 2 到 15 個容器串連在一起。SIP 主要適用於在一個端點中結合預處理和模型推論，並用於低延遲操作。

## 無伺服器推論


以下常見問答集項目回答了 Amazon SageMaker 無伺服器推論的常見問題。

### 問：什麼是 Amazon SageMaker 無伺服器推論？


答：[使用 Amazon SageMaker 無伺服器推論來部署模型](serverless-endpoints.md)是專門建置的無伺服器模型服務選項，可讓您輕鬆部署和擴充機器學習 (ML) 模型。無伺服器推論端點會自動啟動運算資源，並根據流量進行縮減與擴增，您無需選擇執行個體類型、執行佈建容量或管理擴展政策。您可以選擇指定無伺服器端點的記憶體需求。您只需為執行推論程式碼的持續時間及處理的資料量付費即可，閒置期間不需付費。

### 問：為什麼要使用無伺服器推論？


答：無伺服器推論可免除預先佈建容量和管理擴展政策的需求，從而簡化開發人員體驗。無伺服器推論可根據使用模式，在幾秒鐘內立即從數萬個推論擴展到數千個推論，因此非常適合間歇性或無法預測流量的機器學習 (ML) 應用程式。例如，薪資處理公司使用的聊天機器人服務在月底的查詢數量增加，而在本月其它時間的流量是間歇性的。在這種情況下，佈建整個月的執行個體並不符合成本效益，因為您最終會支付閒置期間的費用。

無伺服器推論可協助您解決這些類型的使用案例，提供開箱即用的自動快速擴充功能，而不需要預先預測流量或管理擴展政策。此外，您只需為執行推論程式碼的運算時間和資料處理付費，因此非常適合具有間歇性流量的工作負載。

### 問：如何為無伺服器端點選擇正確的記憶體大小？


答：您的無伺服器端點的 RAM 大小下限為 1024 MB (1 GB)，而您可以選擇的 RAM 大小上限為 6144 MB (6 GB)。您可以選擇的記憶體大小為 1024 MB、2048 MB、3072 MB、4096 MB、5120 MB 或 6144 MB。無伺服器推論會根據您選取的記憶體按比例自動指派運算資源。如果您選擇較大的記憶體大小，您的容器可以存取更多 vCPU。

根據您的模型大小選擇端點的記憶體大小。一般而言，記憶體大小應至少與模型大小一樣大。您可能需要進行基準測試，才能基於延遲 SLA 選擇適合模型的記憶體選取項目。記憶體大小增量的定價不同；如需更多資訊，請參閱 [Amazon SageMaker 定價頁面](https://aws.amazon.com/sagemaker/pricing/)。

## 批次轉換


在下列常見問答集項目中，有 SageMaker AI 批次轉換的常見問題答案。

### 問：批次轉換如何分割我的資料？


答：在特定檔案格式中 (例如 CSV、RecordIO 和 TFRecord)，SageMaker AI 可以將您的資料分割為單一記錄或多重記錄的迷你批次，然後將其作為承載傳送至模型容器。當 `[BatchStrategy](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html#sagemaker-CreateTransformJob-request-BatchStrategy)` 的值為 `MultiRecord` 時，SageMaker AI 在每個請求中傳送最大數量的記錄，最高可達 `MaxPayloadInMB` 限制。當 `BatchStrategy` 的值為 `SingleRecord`，Amazon SageMaker AI 則會在每個請求中傳送個別記錄。

### 問：單一記錄的批次轉換和承載限制的逾時上限是多少？


答：批次轉換的逾時時間上限為 3600 秒。記錄 (每個小批次) 的[承載大小上限](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html#sagemaker-CreateTransformJob-request-MaxPayloadInMB)為 100 MB。

### 問：如何加快批次轉換工作？


A：如果您使用的是 `[CreateTransformJob](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html)` API，您可以使用 `[MaxPayloadInMB](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html#SageMaker-CreateTransformJob-request-MaxPayloadInMB)`、`[MaxConcurrentTransforms](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html#SageMaker-CreateTransformJob-request-MaxConcurrentTransforms)` 或 `[BatchStrategy](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html#SageMaker-CreateTransformJob-request-BatchStrategy)` 等參數的最佳值，縮短完成批次轉換工作所需的時間。`MaxConcurrentTransforms` 的理想值等於批次轉換工作中的運算工作者的數量。如果您使用的是 SageMaker AI 主控台，可以在**批次轉換工作組態**頁面的**其他組態**區段中指定這些最佳參數值。SageMaker AI 會自動尋找內建演算法的最佳參數設定。針對自訂演算法，請透過 [execution-parameters](https://docs.aws.amazon.com/sagemaker/latest/dg/your-algorithms-batch-code.html#your-algorithms-batch-code-how-containe-serves-requests) 端點來提供這些值。

### 問：批次轉換原生支援哪些資料格式？


答：批次轉換支援 CSV 和 JSON。

## 非同步推論


在下列常見問答集項目中，有 SageMaker AI 非同步推論的常見一般問題的答案。

### 問：什麼是 Amazon SageMaker 非同步推論？


答：非同步推論將傳入請求排入佇列，並進行非同步處理。此選項非常適合承載大小龐大的請求，或是傳入時處理須時較長的請求。或者，您可以設定 auto-scaling，在不主動處理請求時，將執行個體計數縮減為零。

### 問：如何在沒有流量時將端點縮減到 0？


答：Amazon SageMaker AI 支援自動擴展 (自動擴展) 您的非同步端點。自動擴展會動態調整針對模型佈建的執行個體數量，因應工作負載的變更。與 SageMaker AI 支援的其他託管模型不同，使用非同步推論，您也可以將非同步端點執行個體縮減為零。擴展端點後，執行個體數量為零時，收到的請求會排入佇列進行處理。如需詳細資訊，請參閱[自動擴展非同步端點](https://docs.aws.amazon.com/sagemaker/latest/dg/async-inference-autoscale.html)。

Amazon SageMaker 無伺服器推論也會自動縮減為零。由於 SageMaker AI 會管理擴展您的無伺服器端點，但如果您沒有遇到任何流量，則會套用相同的基礎架構，所以您不會觀察到這種情況。