

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 获取生成式 AI 推理部署建议
<a name="generative-ai-inference-recommendations-get-started"></a>

AI 推荐作业会分析您的模型和工作负载特征，以生成针对成本、延迟或吞吐量进行了优化的部署配置。该服务评估实例类型，应用推测性解码等优化，并在真实的 GPU 基础设施上对每种配置进行基准测试。

## 先决条件
<a name="generative-ai-inference-recommendations-get-started-prereqs"></a>

在创建推荐作业之前，您需要满足以下条件：
+ 以 HuggingFace 检查点格式对存储在 Amazon S3 中的工件进行建模，并带有 SafeTensor 权重
+ 用于推荐输出的 Amazon S3 存储桶
+  AWS 身份和访问管理 (IAM) Access Management 执行角色，可 SageMaker 授予 AI 访问您的模型工件和输出存储桶的权限

## 步骤 1：创建推荐作业
<a name="generative-ai-inference-recommendations-get-started-create"></a>

推荐任务会分析您的模型并生成部署建议。您可以指定模型位置、输出位置、工作负载配置和性能目标。

**Python (boto3)**

```
response = client.create_ai_recommendation_job(
    AIRecommendationJobName="my-recommendation-job",
    ModelSource={
        "S3": {
            "S3Uri": "s3://DOC-EXAMPLE-BUCKET/models/my-model/",
        }
    },
    OutputConfig={
        "S3OutputLocation": "s3://DOC-EXAMPLE-BUCKET/recommendations/"
    },
    PerformanceTarget={
        "Constraints": [
            {"Metric": "ttft-ms"}
        ]
    },
    AIWorkloadConfigIdentifier="my-recommendation-workload",
    RoleArn="arn:aws:iam::111122223333:role/ExampleRole",
)
print(response["AIRecommendationJobArn"])
```

**AWS CLI**

```
aws sagemaker create-ai-recommendation-job \
  --ai-recommendation-job-name "my-recommendation-job" \
  --model-source '{"S3": {"S3Uri": "s3://DOC-EXAMPLE-BUCKET/models/my-model/"}}' \
  --output-config '{"S3OutputLocation": "s3://DOC-EXAMPLE-BUCKET/recommendations/"}' \
  --performance-target '{"Constraints": [{"Metric": "ttft-ms"}]}' \
  --ai-workload-config-identifier "my-recommendation-workload" \
  --role-arn "arn:aws:iam::111122223333:role/ExampleRole" \
  --region us-west-2
```

您还可以指定以下可选参数：

`ComputeSpec`  
限制要评估的实例类型（最多三个）。例如：`{"InstanceTypes": ["ml.g5.12xlarge", "ml.p4d.24xlarge"]}`

`OptimizeModel`  
设置为`true`允许模型优化，例如推测性解码。

`InferenceSpecification`  
指定推理框架。有效值：`LMI`、`VLLM`。

## 步骤 2：监控作业状态
<a name="generative-ai-inference-recommendations-get-started-monitor"></a>

轮询任务状态，直到其达到终止状态。

**Python (boto3)**

```
import time

while True:
    response = client.describe_ai_recommendation_job(
        AIRecommendationJobName="my-recommendation-job"
    )
    status = response["AIRecommendationJobStatus"]
    print(f"Status: {status}")
    if status in ("Completed", "Failed", "Stopped"):
        break
    time.sleep(30)
```

**AWS CLI**

```
aws sagemaker describe-ai-recommendation-job \
  --ai-recommendation-job-name "my-recommendation-job" \
  --region us-west-2
```

## 第 3 步：查看建议
<a name="generative-ai-inference-recommendations-get-started-results"></a>

任务完成后，描述响应将包含一个`Recommendations`数组。每项建议都包含具有以下信息的部署就绪配置：

`DeploymentConfiguration`  
容器镜像 URI、实例类型、实例计数和环境变量。您可以使用此配置直接部署到 A SageMaker I 终端节点。

`ExpectedPerformance`  
经过验证的性能指标，包括第一个令牌的时间 (TTFT)、P90 和 P99 时的请求延迟、每秒令牌吞吐量以及请求吞吐量。

`OptimizationDetails`  
应用了诸如推测性解码或内核调整之类的优化技术及其配置参数。

可以应用以下优化技术：

推测解码  
推测性解码通过并行处理多个令牌而不是一次处理一个令牌来加快文本生成。一个轻量级的投机者在一个步骤中提出了几个候选代币，然后主模型在一次向前传递中将它们一起验证，保留同意自己分配的候选代币，而丢弃其余的候选代币。对投机者进行训练，使其与主模型的数据分布保持一致，以便其更多的提案被接受，这直接转化为每次向前传递产生的更有用的代币。保留了主模型的输出分布，因此响应质量保持不变。结果是更高的每秒输出令牌和更低的代币间延迟 (ITL)，从而改善您的吞吐量指标。

内核调整  
内核调整从解析模型执行图开始，以确定适合调整的性能关键内核，例如注意力和融合的运算符内核。然后调整它们的启动和平铺参数，以便实现与目标 GPU 硬件和预期的流量模式（例如并发性）更好地匹配。这些参数会影响内存重用、缓存局部性和并行性，从而提高执行效率。还调整了用于加载数据和计算的流水线阶段的数量，这有助于将内存移动与计算重叠。通过针对模型、硬件和服务工作负载的特定组合调整这些参数，内核调整可确保 GPU 得到充分利用，从而提高吞吐量和延迟。

以下绩效目标指标可用：

`ttft-ms`  
获得第一个代币的时间（以毫秒为单位）。

`throughput`  
每秒令牌数。

`cost`  
部署配置的每小时成本。

`ExpectedPerformance`响应中的每个指标都包含一个表示统计度量的`Stat`字段`Value`、a 和一个可选字段`Unit`。常见的统计数据包括：`average``p50`、`p90`、`p95`、`p99`、`max`、和`min`。

## 管理推荐资源
<a name="generative-ai-inference-recommendations-get-started-manage"></a>

使用以下操作来管理您的推荐任务和工作负载配置。

```
# List recommendation jobs
response = client.list_ai_recommendation_jobs(MaxResults=10)
for job in response["AIRecommendationJobs"]:
    print(f"{job['AIRecommendationJobName']} - {job['AIRecommendationJobStatus']}")

# Stop a running job
client.stop_ai_recommendation_job(
    AIRecommendationJobName="my-recommendation-job"
)

# Delete a job (must be in a terminal state)
client.delete_ai_recommendation_job(
    AIRecommendationJobName="my-recommendation-job"
)

# List workload configurations
response = client.list_ai_workload_configs(MaxResults=10)
for config in response["AIWorkloadConfigs"]:
    print(f"{config['AIWorkloadConfigName']} - {config['AIWorkloadConfigArn']}")

# Delete a workload configuration
client.delete_ai_workload_config(
    AIWorkloadConfigName="my-recommendation-workload"
)
```