

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

# 为生成式 AI 推理建议设置工作负载配置
<a name="generative-ai-inference-recommendations-workload-config"></a>

工作负载配置定义了 SageMaker AI 在评估您的模型或端点时使用的流量模式和基准参数。在运行推荐作业或基准测试作业之前，您需要创建工作负载配置。相同的工作负载配置可以在多个作业中重复使用。

您可以通过两种方式定义工作负载：
+ **内联规范。**直接在 API 调用中指定代币分配和流量参数。
+ **来自亚马逊 S3 的数据集。**使用`DatasetConfig`参数提供真实请求的代表性数据集。

## 使用内联参数创建工作负载配置
<a name="generative-ai-inference-recommendations-workload-config-inline"></a>

当您没有具有代表性的数据集时，使用内联参数来指定代币分布。

**Python (boto3)**

```
import boto3
import json

client = boto3.client("sagemaker", region_name="us-west-2")

workload_spec = {
    "benchmark": {"type": "aiperf"},
    "parameters": {
        "prompt_input_tokens_mean": 550,
        "prompt_input_tokens_stddev": 150,
        "output_tokens_mean": 150,
        "output_tokens_stddev": 50,
    },
}

response = client.create_ai_workload_config(
    AIWorkloadConfigName="my-workload-config",
    AIWorkloadConfigs={
        "WorkloadSpec": {"Inline": json.dumps(workload_spec)}
    },
)
print(response["AIWorkloadConfigArn"])
```

**AWS CLI**

```
aws sagemaker create-ai-workload-config \
  --ai-workload-config-name "my-workload-config" \
  --ai-workload-configs '{"WorkloadSpec": {"Inline": "{\"benchmark\": {\"type\": \"aiperf\"}, \"parameters\": {\"prompt_input_tokens_mean\": 550, \"output_tokens_mean\": 150}}"}}' \
  --region us-west-2
```

## 使用数据集创建工作负载配置
<a name="generative-ai-inference-recommendations-workload-config-dataset"></a>

如果您有真实请求的代表性数据集，请使用带`InputDataConfig`通道的`DatasetConfig`参数通过 Amazon S3 提供该数据集。

```
response = client.create_ai_workload_config(
    AIWorkloadConfigName="my-dataset-workload",
    DatasetConfig={
        "InputDataConfig": [
            {
                "ChannelName": "traffic",
                "DataSource": {
                    "S3DataSource": {
                        "S3Uri": "s3://DOC-EXAMPLE-BUCKET/datasets/traffic-trace/"
                    }
                }
            }
        ]
    },
    AIWorkloadConfigs={
        "WorkloadSpec": {"Inline": json.dumps(workload_spec)}
    },
)
```

默认情况下，会生成合成提示。您也可以使用公共数据集或提供来自 Amazon S3 的自定义数据集。

## 用于基准测试的工作负载配置
<a name="generative-ai-inference-recommendations-workload-config-benchmark"></a>

在创建用于对现有端点进行基准测试的工作负载配置时，您可以指定其他参数，例如分词器、并发度、请求计数和请求速率。

```
workload_spec = {
    "benchmark": {"type": "aiperf"},
    "parameters": {
        "tokenizer": "TinyLlama/TinyLlama-1.1B-Chat-v1.0",
        "concurrency": 1,
        "request_count": 10,
        "streaming": True,
        "prompt_input_tokens_mean": 550,
        "prompt_input_tokens_stddev": 150,
        "output_tokens_mean": 50,
        "output_tokens_stddev": 10,
        "request_rate": 1.0,
        "benchmark_duration": 60,
    },
    "tooling": {"api_standard": "openai", "version": "0.6.0"},
}
```

## 管理工作负载配置
<a name="generative-ai-inference-recommendations-workload-config-manage"></a>

使用以下操作来管理您的工作负载配置。

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

# Describe a workload configuration
response = client.describe_ai_workload_config(
    AIWorkloadConfigName="my-workload-config"
)

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

## 工作负载规格参考
<a name="generative-ai-inference-recommendations-workload-config-reference"></a>

本节提供了您在创建工作负载配置时在`WorkloadSpec.Inline`字段中传递的工作负载规范 JSON 文档的完整架构。

### 语法
<a name="generative-ai-inference-recommendations-workload-config-syntax"></a>

以下是带有常用参数的工作负载规范的代表性示例。所有参数都记录在下面的参考表中。

```
{
    "benchmark": {
        "type": "aiperf"
    },
    "parameters": {
        "prompt_input_tokens_mean": 550,
        "prompt_input_tokens_stddev": 150.0,
        "output_tokens_mean": 150,
        "output_tokens_stddev": 50.0,
        "concurrency": 10,
        "request_count": 100,
        "request_rate": 5.0,
        "benchmark_duration": 120,
        "streaming": true,
        "tokenizer": "meta-llama/Llama-3.2-1B"
    },
    "secrets": {
        "hf_token": "arn:aws:secretsmanager:us-west-2:111122223333:secret:my-hf-token-AbCdEf"
    },
    "tooling": {
        "api_standard": "openai"
    }
}
```

### 工作负载规格密钥
<a name="generative-ai-inference-recommendations-workload-config-keys"></a>

工作负载规范包含以下顶级密钥。未知密钥被拒绝。

#### 基准测试
<a name="workload-config-ref-benchmark"></a>

必需的映射。确定要使用的基准测试工具。

`benchmark/type`  
必需。基准引擎。唯一有效值为 `aiperf`。

#### 参数
<a name="workload-config-ref-parameters"></a>

可选的映射。传递给 aiPerf 引擎的基准参数。未知的参数名称会被拒绝。除非另有说明，否则所有参数均为可选参数。

**代币分配**

`prompt_input_tokens_mean`  
整数。生成合成提示的每个请求的输入令牌的平均数。别名：`synthetic_input_tokens_mean`，`isl`。

`prompt_input_tokens_stddev`  
浮动。输入令牌计数的标准差。别名：`synthetic_input_tokens_stddev`，`isl_stddev`。

`output_tokens_mean`  
整数。每个请求的输出令牌的平均数。别名：`prompt_output_tokens_mean`，`osl`。

`output_tokens_stddev`  
浮动。输出代币计数的标准差。别名：`prompt_output_tokens_stddev`，`osl_stddev`。

**流量整形**

`concurrency`  
整数。基准测试期间要发送的并发请求数。

`request_count`  
整数。要发送的请求总数。别名：`num_requests`。

`request_rate`  
浮动。每秒目标请求数。

`benchmark_duration`  
整数。基准测试的持续时间（以秒为单位）。

`max_concurrency`  
整数。允许的最大并发请求数。

`request_rate_mode`  
字符串。请求到达模式。别名：`arrival_pattern`。

`arrival_smoothness`  
浮动。控制请求到达的突发性。值越高，流量越流畅。别名：`vllm_burstiness`。

`prefill_concurrency`  
整数。并发的预填请求数。

**一般性问题**

`streaming`  
布尔值。是否使用直播响应。默认值：`true`。

`tokenizer`  
字符串。 HuggingFace 用于计算令牌的标记器的模型名称或本地目录路径。示例：`meta-llama/Llama-3.2-1B`。

`hf_token`  
字符串。Hugging Face 访问令牌，用于下载门控模型和分词器。别名：`HF_TOKEN`。对于敏感值，请使用该`secrets`部分，而不是以明文形式传递标记。

`request_timeout_seconds`  
整数。单个请求的超时时间（以秒为单位）。

`benchmark_grace_period`  
整数。基准测试完成后的宽限期（以秒为单位），允许正在进行的请求完成。

`extra_inputs`  
字符串。每个请求有效载荷中要包含的其他 JSON-encoded 输入。

`random_seed`  
整数。生成随机数的种子。默认值：`42`。

`verbose`  
布尔值。启用详细日志。默认值：`false`。

`num_conversations`  
整数。要模拟的多回合对话数量。别名：`conversation_num`，`num_sessions`。

`model_selection_strategy`  
字符串。当端点上有多个模型可用时选择模型的策略。

**热身**

预热参数控制一个可选的预热阶段，该阶段在测得的基准测试之前运行。这会启动模型服务器的缓存和 JIT 编译。

`warmup_duration`  
整数。预热阶段的持续时间（以秒为单位）。

`warmup_request_count`  
整数。预热请求的数量。别名：`num_warmup_requests`。

`warmup_concurrency`  
整数。预热期间的并发级别。

`warmup_prefill_concurrency`  
整数。在预热期间预填并发。

`warmup_request_rate`  
浮动。预热期间的请求速率。

`warmup_arrival_pattern`  
字符串。热身期间的到达模式。

`warmup_grace_period`  
浮动。预热结束后的宽限期（以秒为单位）。

`num_warmup_sessions`  
整数。热身会话的次数。

**数据集**

`public_dataset`  
字符串。用于基准测试提示而不是合成生成的公共数据集的名称。

`custom_dataset_type`  
字符串。通过 Amazon S3 提供的自定义数据集的格式。

`input_file`  
字符串。基准测试容器内输入数据集文件的路径。当您通过`DatasetConfig`参数提供数据集时，数据将挂载到`/opt/ml/input/data/{ChannelName}/`。使用此参数指向该装载路径中的特定文件。

**图像输入**

用于对接受图像输入的多模态模型进行基准测试的参数。

`image_width_mean`  
浮动。合成图像的平均宽度（以像素为单位）。

`image_width_stddev`  
浮动。图像宽度的标准差。

`image_height_mean`  
浮动。合成图像的平均高度（以像素为单位）。

`image_height_stddev`  
浮动。图像高度的标准差。

`image_batch_size`  
整数。每次请求的图像数量。别名：`batch_size_image`。

`image_format`  
字符串。图像格式（例如`png`、`jpeg`）。

**视频输入**

用于对接受视频输入的多模态模型进行基准测试的参数。

`video_batch_size`  
整数。每次请求的视频数量。别名：`batch_size_video`。

`video_duration`  
浮动。合成视频的时长（以秒为单位）。

`video_fps`  
整数。合成视频的每秒帧数。

`video_width`  
整数。合成视频的宽度（以像素为单位）。

`video_height`  
整数。合成视频的高度（以像素为单位）。

`video_synth_type`  
字符串。合成视频生成的类型。

`video_format`  
字符串。视频容器格式。

`video_codec`  
字符串。视频编解码器。

`video_audio_sample_rate`  
整数。音频采样率（以 Hz 为单位）。

`video_audio_num_channels`  
整数。音频声道数。

`video_audio_codec`  
字符串。音频编解码器。

`video_audio_depth`  
字符串。音频位深度。

#### 密钥
<a name="workload-config-ref-secrets"></a>

可选的映射。使用本节通过 AWS 引用 Secrets Manager 机密而不是将它们作为纯文本包含在中来传递敏感值（例如 Hugging Huging Face 访问令牌）。`parameters`

每个密钥都是一个参数名称，其值是 Secrets Manager 中 AWS 密钥的 ARN。在作业启动时，该服务会解析密钥并将该值注入基准测试环境。

```
"secrets": {
    "hf_token": "arn:aws:secretsmanager:us-west-2:111122223333:secret:my-hf-token-AbCdEf"
}
```

#### 工具
<a name="workload-config-ref-tooling"></a>

可选的映射。指定 API 标准和工具版本。

`tooling/api_standard`  
可选。端点使用的 API 标准。例如 `openai`。

`tooling/version`  
可选。基准测试工具的版本。默认为最新的可用版本。