

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

# 設定 HyperPod 推論模型部署的請求限制
<a name="sagemaker-hyperpod-model-deployment-request-limits"></a>

您可以在 Amazon SageMaker HyperPod 推論模型部署上設定請求限制，以控制每個 Pod 接受的並行請求數量。達到限制時，多餘的請求會收到可設定的 HTTP 錯誤回應，啟用快速故障行為，並允許負載平衡器將流量重新導向至其他 Pod。

請求限制是由與模型容器一起執行的 nginx 附屬代理強制執行。這需要在部署上啟用指標。

## 先決條件
<a name="sagemaker-hyperpod-model-deployment-request-limits-prereqs"></a>

在設定請求限制之前，請確認：
+ 指標會在您的部署上啟用 (`metrics.enabled: true`)。只有在啟用指標時，才會建立強制執行請求限制的 nginx 附屬代理。

## 在部署 YAML 中設定請求限制
<a name="sagemaker-hyperpod-model-deployment-request-limits-configure"></a>

在 `InferenceEndpointConfig` YAML `worker`中新增 下的 `requestLimits`區段。下列範例會將每個 Pod 限制為 10 個並行請求，佇列為 5，並在超過限制時傳回 HTTP 503。

```
apiVersion: inference.sagemaker.aws.amazon.com/v1
kind: InferenceEndpointConfig
metadata:
  name: my-model
  namespace: ns-team-a
spec:
  modelName: my-model-name
  instanceType: ml.g5.8xlarge
  invocationEndpoint: invocations
  modelSourceConfig:
    modelSourceType: s3
    s3Storage:
      bucketName: my-model-bucket
      region: us-east-2
      modelLocation: models/my-model
  worker:
    image: my-model-image:latest
    modelInvocationPort:
      containerPort: 8080
      name: http
    modelVolumeMount:
      mountPath: /opt/ml/model
      name: model-weights
    resources:
      limits:
        nvidia.com/gpu: "1"
      requests:
        cpu: "4"
        memory: "32Gi"
        nvidia.com/gpu: "1"
    requestLimits:
      maxConcurrentRequests: 10
      maxQueueSize: 5
      overflowStatusCode: 503
  metrics:
    enabled: true
  tlsConfig:
    tlsCertificateOutputS3Uri: "s3://my-tls-bucket/certs"
```

## 欄位說明
<a name="sagemaker-hyperpod-model-deployment-request-limits-fields"></a>

`maxConcurrentRequests` (選用，整數)  
nginx 附屬代理每個 Pod 接受的並行請求數目上限。達到限制時，新的請求會排入佇列 （如果`maxQueueSize`已設定），或使用溢位狀態碼立即拒絕。下限：1。如果未設定或設定為 0，則不會強制執行並行限制。

`maxQueueSize` (選用，整數)  
達到並行請求限制時佇列的請求數量上限。佇列請求會等到處理中的請求完成。當佇列已滿時，新的請求會收到溢出狀態碼回應。下限：0。如果未將 設定為 0，則不會套用佇列 - 當達到並行請求限制時，會立即拒絕請求。

`overflowStatusCode` (選用，整數)  
超過請求限制時傳回的 HTTP 狀態碼。必須介於 400 到 599 之間。預設：429 （太多請求）。常見值：  
+ `429` — 太多請求 （預設）。速率限制的標準 HTTP 狀態。
+ `503` — 服務無法使用。當您希望負載平衡器在不同的 Pod 上重試時很有用。

## 請求限制的運作方式
<a name="sagemaker-hyperpod-model-deployment-request-limits-how-it-works"></a>

當推論請求送達 nginx 附屬代理時：

1. 如果作用中請求的數量低於 `maxConcurrentRequests`，則請求會轉送到模型容器。

1. 如果達到限制且`maxQueueSize`大於 0，請求會排入佇列，並等待 （最多 60 秒） 作用中的插槽變成可用。

1. 如果佇列已滿 （或未設定佇列），則會立即拒絕已設定 `overflowStatusCode`和 JSON 錯誤回應的請求：

   ```
   {
     "error": "Too many concurrent requests",
     "max_concurrent": 10,
     "max_queue_size": 5,
     "current": 10
   }
   ```

## 範例
<a name="sagemaker-hyperpod-model-deployment-request-limits-examples"></a>

**無佇列的嚴格並行限制**

若要立即拒絕多餘的請求而不進行佇列：

```
requestLimits:
  maxConcurrentRequests: 5
  overflowStatusCode: 429
```

**與佇列的並行限制**

若要在拒絕之前允許小型佇列：

```
requestLimits:
  maxConcurrentRequests: 10
  maxQueueSize: 5
  overflowStatusCode: 503
```

在此組態中，最多會同時處理 10 個請求。當第 11 個到第 15 個請求送達時，它們會排入佇列並等待作用中的插槽。第 16 個請求及之後的請求會收到 HTTP 503。