运行自定义负载测试 - Amazon SageMaker

运行自定义负载测试

Amazon SageMaker Inference Recommender 负载测试会根据您选择的延迟和吞吐量、自定义流量模式以及无服务器端点或实时实例(最多 10 个)的生产要求进行广泛的基准测试。

以下部分演示了如何使用 AWS SDK for Python (Boto3) 和 AWS CLI 以编程方式或使用 Amazon SageMaker Studio 或 SageMaker 控制台以交互方式创建、描述和停止负载测试。

创建负载测试作业

使用 AWS SDK for Python (Boto3) 和 AWS CLI 以编程方式或者使用 Studio 或 SageMaker 控制台以交互方式创建负载测试。与 Inference Recommender 推理推荐一样,在模型注册表中注册模型时,指定负载测试的作业名称、AWS IAM 角色 ARN、输入配置和模型包 ARN。负载测试还要求您指定流量模式和停止条件。

AWS SDK for Python (Boto3)

使用 CreateInferenceRecommendationsJob API 创建 Inference Recommender 负载测试。为 JobType 字段指定 Advanced 并提供:

  • 负载测试的作业名称 (JobName)。作业名称在您的 AWS 区域和 AWS 账户内必须是唯一的。

  • IAM 角色的 Amazon 资源名称 (ARN),此角色可让 Inference Recommender 代表您执行任务。为 RoleArn 字段定义此项。

  • 端点配置字典 (InputConfig),可在其中指定以下项:

    • 对于 TrafficPattern,请指定阶段或阶梯流量模式。对于阶段流量模式,每分钟以您指定的速率生成新用户。对于阶梯流量模式,会以您指定的速率按时间间隔(或步长)生成新用户。选择以下选项之一:

      • 对于 TrafficType,请指定 PHASES。之后,对于 Phases 数组,指定 InitialNumberOfUsers(开始时的并发用户数,最小值为 1,最大值为 3)、SpawnRate(负载测试的特定阶段,1 分钟内生成的用户数,最小值为 0,最大值为 3)和 DurationInSeconds(流量阶段应持续的时长,最小值为 120,最大值为 3600)。

      • 对于 TrafficType,请指定 STAIRS。之后,对于 Stairs 数组,指定 DurationInSeconds(流量阶段应持续的时长,最小值为 120,最大值为 3600)、NumberOfSteps(阶段内使用的间隔数)和 UsersPerStep(每个间隔内添加的用户数)。请注意,每个步骤的长度为 DurationInSeconds / NumberOfSteps 的值。例如,如果您的 DurationInSeconds600,并且您指定了 5 个步骤,则每个步骤的长度为 120 秒。

        注意

        用户将定义为系统生成的角色,它在循环中运行,并作为 Inference Recommender 的一部分调用对端点的请求。对于在 ml.c5.large 实例上运行的典型 XGBoost 容器,端点可以达到每分钟 30000 次调用 (500 tps),并且仅有 15-20 个用户。

    • 对于 ResourceLimit,指定 MaxNumberOfTests(Inference Recommender 作业的最大基准测试负载测试次数,最小值为 1,最大值为 10)和 MaxParallelOfTests(Inference Recommender 作业的并行基准测试负载测试的最大数量,最小值为 1,最大值为 10)。

    • 对于 EndpointConfigurations,您可以指定以下项之一:

      • InstanceType 字段,可以在其中指定要对其运行负载测试的实例类型。

      • ServerlessConfig,可以在其中指定无服务器端点的 MaxConcurrencyMemorySizeInMB 的理想值。有关更多信息,请参阅无服务器推理文档

  • 停止条件字典 (StoppingConditions),如果满足任意条件,则 Inference Recommender 作业将停止。在此示例中,请在字典中指定以下字段:

    • 对于 MaxInvocations,指定端点每分钟预期的最大请求数,最小值为 1,最大值为 30000。

    • 对于 ModelLatencyThresholds,指定 Percentile(模型延迟百分位数阈值)和 ValueInMilliseconds(模型延迟百分位数值,以毫秒为单位)。

    • (可选)对于 FlatInvocations,您可以指定是否在 TPS(每分钟调用次数)速率趋于平稳时继续进行负载测试。平稳的 TPS 速率通常意味着端点已达到容量。但是,您可能需要在满容量条件下继续监控端点。要在发生此情况时继续进行负载测试,请将此值指定为 Continue。否则,默认值为 Stop

# Create a low-level SageMaker service client. import boto3 aws_region=<INSERT> sagemaker_client=boto3.client('sagemaker', region=aws_region) # Provide a name to your recommendation based on load testing load_test_job_name="<INSERT>" # Provide the name of the sagemaker instance type instance_type="<INSERT>" # Provide the IAM Role that gives SageMaker permission to access AWS services role_arn='arn:aws:iam::<account>:role/*' # Provide your model package ARN that was created when you registered your # model with Model Registry model_package_arn='arn:aws:sagemaker:<region>:<account>:role/*' sagemaker_client.create_inference_recommendations_job( JobName=load_test_job_name, JobType="Advanced", RoleArn=role_arn, InputConfig={ 'ModelPackageVersionArn': model_package_arn, "JobDurationInSeconds": 7200, 'TrafficPattern' : { # Replace PHASES with STAIRS to use the stairs traffic pattern 'TrafficType': 'PHASES', 'Phases': [ { 'InitialNumberOfUsers': 1, 'SpawnRate': 1, 'DurationInSeconds': 120 }, { 'InitialNumberOfUsers': 1, 'SpawnRate': 1, 'DurationInSeconds': 120 } ] # Uncomment this section and comment out the Phases object above to use the stairs traffic pattern # 'Stairs' : { # 'DurationInSeconds': 240, # 'NumberOfSteps': 2, # 'UsersPerStep': 2 # } }, 'ResourceLimit': { 'MaxNumberOfTests': 10, 'MaxParallelOfTests': 3 }, "EndpointConfigurations" : [{ 'InstanceType': 'ml.c5.xlarge' }, { 'InstanceType': 'ml.m5.xlarge' }, { 'InstanceType': 'ml.r5.xlarge' }] # Uncomment the ServerlessConfig and comment out the InstanceType field if you want recommendations for a serverless endpoint # "ServerlessConfig": { # "MaxConcurrency": value, # "MemorySizeInMB": value # } }, StoppingConditions={ 'MaxInvocations': 1000, 'ModelLatencyThresholds':[{ 'Percentile': 'P95', 'ValueInMilliseconds': 100 }], # Change 'Stop' to 'Continue' to let the load test continue if invocations flatten 'FlatInvocations': 'Stop' } )

请参阅 Amazon SageMaker API 参考指南,查看有关可传递给 CreateInferenceRecommendationsJob 的可选和必需参数的完整列表。

AWS CLI

使用 create-inference-recommendations-job API 创建 Inference Recommender 负载测试。为 JobType 字段指定 Advanced 并提供:

  • 负载测试的作业名称 (job-name)。作业名称在您的 AWS 区域和 AWS 账户内必须是唯一的。

  • IAM 角色的 Amazon 资源名称 (ARN),此角色可让 Inference Recommender 代表您执行任务。为 role-arn 字段定义此项。

  • 端点配置字典 (input-config),可在其中指定以下项:

    • 对于 TrafficPattern,请指定阶段或阶梯流量模式。对于阶段流量模式,每分钟以您指定的速率生成新用户。对于阶梯流量模式,会以您指定的速率按时间间隔(或步长)生成新用户。选择以下选项之一:

      • 对于 TrafficType,请指定 PHASES。之后,对于 Phases 数组,指定 InitialNumberOfUsers(开始时的并发用户数,最小值为 1,最大值为 3)、SpawnRate(负载测试的特定阶段,1 分钟内生成的用户数,最小值为 0,最大值为 3)和 DurationInSeconds(流量阶段应持续的时长,最小值为 120,最大值为 3600)。

      • 对于 TrafficType,请指定 STAIRS。之后,对于 Stairs 数组,指定 DurationInSeconds(流量阶段应持续的时长,最小值为 120,最大值为 3600)、NumberOfSteps(阶段内使用的间隔数)和 UsersPerStep(每个间隔内添加的用户数)。请注意,每个步骤的长度为 DurationInSeconds / NumberOfSteps 的值。例如,如果您的 DurationInSeconds600,并且您指定了 5 个步骤,则每个步骤的长度为 120 秒。

        注意

        用户将定义为系统生成的角色,它在循环中运行,并作为 Inference Recommender 的一部分调用对端点的请求。对于在 ml.c5.large 实例上运行的典型 XGBoost 容器,端点可以达到每分钟 30000 次调用 (500 tps),并且仅有 15-20 个用户。

    • 对于 ResourceLimit,指定 MaxNumberOfTests(Inference Recommender 作业的最大基准测试负载测试次数,最小值为 1,最大值为 10)和 MaxParallelOfTests(Inference Recommender 作业的并行基准测试负载测试的最大数量,最小值为 1,最大值为 10)。

    • 对于 EndpointConfigurations,您可以指定以下项之一:

      • InstanceType 字段,可以在其中指定要对其运行负载测试的实例类型。

      • ServerlessConfig,可以在其中指定无服务器端点的 MaxConcurrencyMemorySizeInMB 的理想值。

  • 停止条件字典 (stopping-conditions),如果满足任意条件,则 Inference Recommender 作业将停止。在此示例中,请在字典中指定以下字段:

    • 对于 MaxInvocations,指定端点每分钟预期的最大请求数,最小值为 1,最大值为 30000。

    • 对于 ModelLatencyThresholds,指定 Percentile(模型延迟百分位数阈值)和 ValueInMilliseconds(模型延迟百分位数值,以毫秒为单位)。

    • (可选)对于 FlatInvocations,您可以指定是否在 TPS(每分钟调用次数)速率趋于平稳时继续进行负载测试。平稳的 TPS 速率通常意味着端点已达到容量。但是,您可能需要在满容量条件下继续监控端点。要在发生此情况时继续进行负载测试,请将此值指定为 Continue。否则,默认值为 Stop

aws sagemaker create-inference-recommendations-job\ --region <region>\ --job-name <job-name>\ --job-type ADVANCED\ --role-arn arn:aws:iam::<account>:role/*\ --input-config \"{ \"ModelPackageVersionArn\": \"arn:aws:sagemaker:<region>:<account>:role/*\", \"JobDurationInSeconds\": 7200, \"TrafficPattern\" : { # Replace PHASES with STAIRS to use the stairs traffic pattern \"TrafficType\": \"PHASES\", \"Phases\": [ { \"InitialNumberOfUsers\": 1, \"SpawnRate\": 60, \"DurationInSeconds\": 300 } ] # Uncomment this section and comment out the Phases object above to use the stairs traffic pattern # 'Stairs' : { # 'DurationInSeconds': 240, # 'NumberOfSteps': 2, # 'UsersPerStep': 2 # } }, \"ResourceLimit\": { \"MaxNumberOfTests\": 10, \"MaxParallelOfTests\": 3 }, \"EndpointConfigurations\" : [ { \"InstanceType\": \"ml.c5.xlarge\" }, { \"InstanceType\": \"ml.m5.xlarge\" }, { \"InstanceType\": \"ml.r5.xlarge\" } # Use the ServerlessConfig and leave out the InstanceType fields if you want recommendations for a serverless endpoint # \"ServerlessConfig\": { # \"MaxConcurrency\": value, # \"MemorySizeInMB\": value # } ] }\" --stopping-conditions \"{ \"MaxInvocations\": 1000, \"ModelLatencyThresholds\":[ { \"Percentile\": \"P95\", \"ValueInMilliseconds\": 100 } ], # Change 'Stop' to 'Continue' to let the load test continue if invocations flatten \"FlatInvocations\": \"Stop\" }\"
Amazon SageMaker Studio

使用 Studio 创建负载测试。

  1. 在 Studio 应用程序中,选择主页图标 ( Home icon in Studio )。

  2. 在 Studio 的左侧边栏中,选择部署

  3. 从下拉列表中选择 Inference Recommender

  4. 选择创建 Inference Recommender 作业。这将打开一个标题为创建 Inference Recommender 作业的新选项卡。

  5. 从下拉模型组字段中选择模型组的名称。该列表包括您账户中已注册到模型注册表的所有模型组,包括在 Studio 外部注册的模型。

  6. 从下拉模型版本字段中选择模型版本。

  7. 选择 Continue(继续)。

  8. 名称字段中提供作业的名称。

  9. (可选)在描述字段中提供作业的描述。

  10. 选择一个向 Inference Recommender 授予对 AWS 服务的访问权限的 IAM 角色。您可以创建角色并附加 AmazonSageMakerFullAccess IAM 托管策略来实现此目标,或者您可以让 Studio 为您创建角色。

  11. 选择停止条件以扩展可用的输入字段。提供一组用于停止部署推荐的条件。

    1. 每分钟最大调用次数字段中指定预计的针对端点的每分钟最大请求数。

    2. 模型延迟阈值字段中指定模型延迟阈值(以微秒为单位)。模型延迟阈值描述了从 Inference Recommender 中查看的模型响应所花费的时间间隔。此时间间隔包括发送请求以及从模型容器提取响应的本地通信时间,以及在容器中完成推理所用的时间。

  12. 选择流量模式以扩展可用的输入字段。

    1. 通过在初始用户数字段中指定一个整数来设置初始虚拟用户数。

    2. 生成速率字段提供一个整数。生成速率设置每秒创建的用户数。

    3. 通过在持续时间字段中指定一个整数来设置阶段的持续时间(以秒为单位)。

    4. (可选)添加其他流量模式。要做到这一点,请选择添加

  13. 选择其他设置以显示最长测试持续时间字段。指定作业期间测试可花费的最长时间(以秒为单位)。在定义的持续时间之后不会安排新作业。这有助于确保正在进行的作业不会停止,并且您只能查看已完成的作业。

  14. 选择 Continue(继续)。

  15. 选择选定实例

  16. 用于基准测试的实例字段中,选择将实例添加到测试。为 Inference Recommender 选择最多 10 个实例以用于负载测试。

  17. 选择其他设置

    1. 最大测试次数字段提供一个整数,该整数设置作业可以执行的测试次数上限。请注意,每个端点配置均生成一个新的负载测试。

    2. 最大并行测试数字段提供一个整数。此设置定义了可以并行运行的负载测试数量的上限。

  18. 选择提交

    负载测试最长可能需要 2 个小时。

    警告

    不要关闭此选项卡。如果关闭此选项卡,则将取消 Inference Recommender 负载测试作业。

SageMaker console

执行以下操作,通过 SageMaker 控制台创建自定义负载测试:

  1. 转到位于 https://console.aws.amazon.com/sagemaker/ 的 SageMaker 控制台。

  2. 在左侧导航窗格中,选择推理,然后选择 Inference Recommender

  3. Inference Recommender 作业页面上,选择创建作业

  4. 对于步骤 1:模型配置,执行以下操作:

    1. 对于作业类型,选择高级 Recommender 作业

    2. 如果您使用的是已在 SageMaker 模型注册表中注册的模型,请打开从模型注册表中选择模型开关并执行以下操作:

      1. 对于模型组下拉列表,在 SageMaker 模型注册表中选择您的模型所在的模型组。

      2. 对于模型版本下拉列表,选择所需的模型版本。

    3. 如果您使用的是已在 SageMaker 中创建的模型,请关闭从模型注册表中选择模型开关并执行以下操作:

      1. 对于模型名称字段,输入您的 SageMaker 模型的名称。

    4. 对于 IAM 角色,您可以选择具有创建实例推荐作业所需权限的现有 AWS IAM 角色。或者,如果您没有现有角色,则可以选择创建新角色来打开角色创建弹出窗口,SageMaker 随后将向您创建的新角色添加必要权限。

    5. 对于用于对负载进行基准测试的 S3 存储桶,输入示例负载存档的 Amazon S3 路径,其中应包含示例负载文件,Inference Recommender 使用这些文件在不同的实例类型上对模型进行基准测试。

    6. 对于负载内容类型,输入示例负载数据的 MIME 类型。

    7. 对于流量模式,请执行以下操作来配置负载测试的阶段:

      1. 对于初始用户数,指定开始时的并发用户数(最小值为 1,最大值为 3)。

      2. 对于生成速率,为该阶段指定 1 分钟内要生成的用户数(最小值为 0,最大值为 3)。

      3. 对于持续时间(秒),指定流量阶段的持续时间(以秒为单位,最小值为 120,最大值为 3600)。

    8. (可选)如果您已关闭从模型注册表中选择模型开关并指定 SageMaker 模型,则对于容器配置,请执行以下操作:

      1. 对于下拉列表,选择模型的机器学习域,例如计算机视觉、自然语言处理或机器学习。

      2. 对于框架下拉列表,选择容器的框架,例如 TensorFlow 或 XGBoost。

      3. 对于框架版本,输入容器映像的框架版本。

      4. 对于最近的模型名称下拉列表,选择与您自己的模型最匹配的预训练的模型。

      5. 对于任务下拉列表,选择模型完成的机器学习任务,例如图像分类或回归。

    9. (可选)对于使用 SageMaker Neo 进行模型编译,您可以为已使用 SageMaker Neo 编译的模型配置推荐作业。对于数据输入配置,使用类似于 {'input':[1,1024,1024,3]} 的格式为模型输入正确的输入数据形状。

    10. 选择下一步

  5. 对于步骤 2:实例和环境参数,请执行以下操作:

    1. 对于选择用于基准测试的实例,最多可以选择 8 种实例类型来进行基准测试。

    2. (可选)对于环境参数范围,可以指定有助于优化模型的环境参数。将参数指定为对。

    3. 选择下一步

  6. 对于步骤 3:作业参数,请执行以下操作:

    1. (可选)对于作业名称字段,输入您的实例推荐作业的名称。在创建作业时,SageMaker 会在该名称的末尾附加一个时间戳。

    2. (可选)对于作业描述字段,输入作业的描述。

    3. (可选)对于加密密钥下拉列表,按名称选择 AWS KMS 密钥或输入其 ARN 来加密您的数据。

    4. (可选)对于最大测试次数,输入要在推荐作业期间运行的测试次数。

    5. (可选)对于最大并行测试次数,输入要在推荐作业期间运行的并行测试的最大次数。

    6. 对于最长测试持续时间,输入您希望每项测试运行的最长时间(以秒为单位)。

    7. 对于每分钟最大调用次数,输入端点在停止推荐作业之前可达到的每分钟最大请求数。达到此限制后,SageMaker 将终止作业。

    8. 对于 P99 模型延迟阈值 (ms),输入模型延迟百分位数(以毫秒为单位)。

    9. 选择下一步

  7. 对于步骤 4:查看作业,请查看您的配置,然后选择提交

获取您的负载测试结果

在负载测试完成后,您可以使用 AWS SDK for Python (Boto3)、AWS CLI、Studio 或 SageMaker 控制台跨所有负载测试收集指标。

AWS SDK for Python (Boto3)

使用 DescribeInferenceRecommendationsJob API 收集指标。为 JobName 字段指定负载测试的作业名称:

load_test_response = sagemaker_client.describe_inference_recommendations_job( JobName=load_test_job_name )

打印响应对象。

load_test_response['Status']

这将返回与以下示例类似的 JSON 响应。请注意,此示例显示了实时推理的推荐实例类型(有关显示无服务器推理推荐的示例,请参阅此示例后面的示例)。

{ 'JobName': 'job-name', 'JobDescription': 'job-description', 'JobType': 'Advanced', 'JobArn': 'arn:aws:sagemaker:region:account-id:inference-recommendations-job/resource-id', 'Status': 'COMPLETED', 'CreationTime': datetime.datetime(2021, 10, 26, 19, 38, 30, 957000, tzinfo=tzlocal()), 'LastModifiedTime': datetime.datetime(2021, 10, 26, 19, 46, 31, 399000, tzinfo=tzlocal()), 'InputConfig': { 'ModelPackageVersionArn': 'arn:aws:sagemaker:region:account-id:model-package/resource-id', 'JobDurationInSeconds': 7200, 'TrafficPattern': { 'TrafficType': 'PHASES' }, 'ResourceLimit': { 'MaxNumberOfTests': 100, 'MaxParallelOfTests': 100 }, 'EndpointConfigurations': [{ 'InstanceType': 'ml.c5d.xlarge' }] }, 'StoppingConditions': { 'MaxInvocations': 1000, 'ModelLatencyThresholds': [{ 'Percentile': 'P95', 'ValueInMilliseconds': 100} ]}, 'InferenceRecommendations': [{ 'Metrics': { 'CostPerHour': 0.6899999976158142, 'CostPerInference': 1.0332434612791985e-05, 'MaximumInvocations': 1113, 'ModelLatency': 100000 }, 'EndpointConfiguration': { 'EndpointName': 'endpoint-name', 'VariantName': 'variant-name', 'InstanceType': 'ml.c5d.xlarge', 'InitialInstanceCount': 3 }, 'ModelConfiguration': { 'Compiled': False, 'EnvironmentParameters': [] } }], 'ResponseMetadata': { 'RequestId': 'request-id', 'HTTPStatusCode': 200, 'HTTPHeaders': { 'x-amzn-requestid': 'x-amzn-requestid', 'content-type': 'content-type', 'content-length': '1199', 'date': 'Tue, 26 Oct 2021 19:57:42 GMT' }, 'RetryAttempts': 0} }

前几行提供了有关负载测试作业本身的信息。这包括作业名称、角色 ARN、创建时间和删除时间。

InferenceRecommendations 字典包含 Inference Recommender 推理推荐的列表。

EndpointConfiguration 嵌套字典包含实例类型 (InstanceType) 推荐以及已在推荐作业期间使用的端点和变体名称(已部署的 AWS 机器学习模型)。您可以在 Amazon CloudWatch Events 中使用端点和变体名称进行监控。请参阅使用 Amazon CloudWatch 监控 Amazon SageMaker了解更多信息。

EndpointConfiguration 嵌套字典还包含实例计数 (InitialInstanceCount) 推荐。这是您应在端点中预置的实例数量,以满足 StoppingConditions 中指定的 MaxInvocations。例如,如果 InstanceTypeml.m5.largeInitialInstanceCount2,则应为端点配置 2 个 ml.m5.large 实例,以便端点能够处理 MaxInvocations 停止条件中指定的 TPS。

Metrics 嵌套字典包含以下各项的相关信息:实时端点的每小时估计费用 (CostPerHour)(以美元为单位)、实时端点的每次推理的估计费用 (CostPerInference)、每分钟发送到端点的最大 InvokeEndpoint 请求数以及模型延迟 (ModelLatency)(即模型响应 SageMaker 所花费的时间间隔,以微秒为单位)。模型延迟包括发送请求以及从模型容器提取响应所花费的本地通信时间,以及在容器中完成推理所用的时间。

以下示例显示了配置为返回无服务器推理推荐的负载测试作业的响应的 InferenceRecommendations 部分:

"InferenceRecommendations": [ { "EndpointConfiguration": { "EndpointName": "value", "InitialInstanceCount": value, "InstanceType": "value", "VariantName": "value", "ServerlessConfig": { "MaxConcurrency": value, "MemorySizeInMb": value } }, "InvocationEndTime": value, "InvocationStartTime": value, "Metrics": { "CostPerHour": value, "CostPerInference": value, "CpuUtilization": value, "MaxInvocations": value, "MemoryUtilization": value, "ModelLatency": value, "ModelSetupTime": value }, "ModelConfiguration": { "Compiled": "False", "EnvironmentParameters": [], "InferenceSpecificationName": "value" }, "RecommendationId": "value" } ]

您可以像解释实时推理的结果一样解释无服务器推理的推荐,但 ServerlessConfig 是一个例外,它告知您在设置负载测试时为 MaxConcurrencyMemorySizeInMB 指定的值。无服务器推荐还会衡量指标 ModelSetupTime,后者衡量在无服务器端点上启动计算资源所花费的时间(以微秒为单位)。有关设置无服务器端点的更多信息,请参阅无服务器推理文档

AWS CLI

使用 describe-inference-recommendations-job API 收集指标。为 job-name 标志指定负载测试的作业名称:

aws sagemaker describe-inference-recommendations-job --job-name <job-name>

这将返回与下面类似的响应。请注意,此示例显示了实时推理的推荐实例类型(有关显示无服务器推理推荐的示例,请参阅此示例后面的示例)。

{ 'JobName': 'job-name', 'JobDescription': 'job-description', 'JobType': 'Advanced', 'JobArn': 'arn:aws:sagemaker:region:account-id:inference-recommendations-job/resource-id', 'Status': 'COMPLETED', 'CreationTime': datetime.datetime(2021, 10, 26, 19, 38, 30, 957000, tzinfo=tzlocal()), 'LastModifiedTime': datetime.datetime(2021, 10, 26, 19, 46, 31, 399000, tzinfo=tzlocal()), 'InputConfig': { 'ModelPackageVersionArn': 'arn:aws:sagemaker:region:account-id:model-package/resource-id', 'JobDurationInSeconds': 7200, 'TrafficPattern': { 'TrafficType': 'PHASES' }, 'ResourceLimit': { 'MaxNumberOfTests': 100, 'MaxParallelOfTests': 100 }, 'EndpointConfigurations': [{ 'InstanceType': 'ml.c5d.xlarge' }] }, 'StoppingConditions': { 'MaxInvocations': 1000, 'ModelLatencyThresholds': [{ 'Percentile': 'P95', 'ValueInMilliseconds': 100 }] }, 'InferenceRecommendations': [{ 'Metrics': { 'CostPerHour': 0.6899999976158142, 'CostPerInference': 1.0332434612791985e-05, 'MaximumInvocations': 1113, 'ModelLatency': 100000 }, 'EndpointConfiguration': { 'EndpointName': 'endpoint-name', 'VariantName': 'variant-name', 'InstanceType': 'ml.c5d.xlarge', 'InitialInstanceCount': 3 }, 'ModelConfiguration': { 'Compiled': False, 'EnvironmentParameters': [] } }], 'ResponseMetadata': { 'RequestId': 'request-id', 'HTTPStatusCode': 200, 'HTTPHeaders': { 'x-amzn-requestid': 'x-amzn-requestid', 'content-type': 'content-type', 'content-length': '1199', 'date': 'Tue, 26 Oct 2021 19:57:42 GMT' }, 'RetryAttempts': 0 } }

前几行提供了有关负载测试作业本身的信息。这包括作业名称、角色 ARN、创建时间和删除时间。

InferenceRecommendations 字典包含 Inference Recommender 推理推荐的列表。

EndpointConfiguration 嵌套字典包含实例类型 (InstanceType) 推荐以及已在推荐作业期间使用的端点和变体名称(已部署的 AWS 机器学习模型)。您可以在 Amazon CloudWatch Events 中使用端点和变体名称进行监控。请参阅使用 Amazon CloudWatch 监控 Amazon SageMaker了解更多信息。

Metrics 嵌套字典包含以下各项的相关信息:实时端点的每小时估计费用 (CostPerHour)(以美元为单位)、实时端点的每次推理的估计费用 (CostPerInference)、每分钟发送到端点的最大 InvokeEndpoint 请求数以及模型延迟 (ModelLatency)(即模型响应 SageMaker 所花费的时间间隔,以微秒为单位)。模型延迟包括发送请求以及从模型容器提取响应所花费的本地通信时间,以及在容器中完成推理所用的时间。

以下示例显示了配置为返回无服务器推理推荐的负载测试作业的响应的 InferenceRecommendations 部分:

"InferenceRecommendations": [ { "EndpointConfiguration": { "EndpointName": "value", "InitialInstanceCount": value, "InstanceType": "value", "VariantName": "value", "ServerlessConfig": { "MaxConcurrency": value, "MemorySizeInMb": value } }, "InvocationEndTime": value, "InvocationStartTime": value, "Metrics": { "CostPerHour": value, "CostPerInference": value, "CpuUtilization": value, "MaxInvocations": value, "MemoryUtilization": value, "ModelLatency": value, "ModelSetupTime": value }, "ModelConfiguration": { "Compiled": "False", "EnvironmentParameters": [], "InferenceSpecificationName": "value" }, "RecommendationId": "value" } ]

您可以像解释实时推理的结果一样解释无服务器推理的推荐,但 ServerlessConfig 是一个例外,它告知您在设置负载测试时为 MaxConcurrencyMemorySizeInMB 指定的值。无服务器推荐还会衡量指标 ModelSetupTime,后者衡量在无服务器端点上启动计算机资源所花费的时间(以微秒为单位)。有关设置无服务器端点的更多信息,请参阅无服务器推理文档

Amazon SageMaker Studio

推荐填充在 Studio 中名为推理推荐的新选项卡中。显示结果最多可能需要 2 小时。此选项卡包含结果详情列。

详情列提供有关负载测试作业的信息,例如为负载测试作业指定的名称、作业创建时间(创建时间) 等。它还包含设置信息,例如每分钟发生的最大调用次数以及有关使用的 Amazon 资源名称的信息。

结果列提供了部署目标SageMaker 推荐窗口,可在其中根据部署重要性调整结果的显示顺序。您可以在三个下拉菜单中为使用案例提供成本延迟吞吐量的重要性级别。对于每个目标(成本、延迟和吞吐量),您可以设置重要性级别:最低重要性低重要性中等重要性高度重要最重要

根据您对每个目标的重要性选择,Inference Recommender 在面板右侧的 SageMaker 推荐字段中显示其顶级推荐,以及估计的每小时费用和推理请求。它还提供了有关预期模型延迟、最大调用次数和实例数的信息。

除了显示的顶级推荐之外,您还可以在所有运行部分中查看为 Inference Recommender 测试的所有实例显示的相同信息。

SageMaker console

可以通过执行以下操作在 SageMaker 控制台中查看您的自定义负载测试作业结果:

  1. 转到位于 https://console.aws.amazon.com/sagemaker/ 的 SageMaker 控制台。

  2. 在左侧导航窗格中,选择推理,然后选择 Inference Recommender

  3. Inference Recommender 作业页面上,选择推理推荐作业的名称。

在作业的详细信息页面上,您可以查看推理推荐,它们是 SageMaker 为您的模型推荐的实例类型,如以下屏幕截图所示。


                                    SageMaker 控制台中作业详细信息页面上的推理推荐列表的屏幕截图。

在此部分中,您可以按模型延迟每小时成本每次推理成本每分钟调用次数等各种因素比较实例类型。

在此页面上,您还可以查看为作业指定的配置。在监控部分中,您可以查看已为每种实例类型记录的 Amazon CloudWatch 指标。要详细了解如何解释这些指标,请参阅解释结果

停止您的负载测试

使用 StopInferenceRecommendationsJob API、Studio 或 SageMaker 控制台以编程方式停止负载测试作业。

AWS SDK for Python (Boto3)

JobName 字段指定负载测试的作业名称:

sagemaker_client.stop_inference_recommendations_job( JobName='<INSERT>' )
AWS CLI

job-name 标志指定负载测试的作业名称:

aws sagemaker stop-inference-recommendations-job --job-name <job-name>
Amazon SageMaker Studio

关闭您在其中启动自定义负载作业的选项卡以停止 Inference Recommender 负载测试。

SageMaker console

要通过 SageMaker 控制台停止负载测试作业,请执行以下操作:

  1. 转到位于 https://console.aws.amazon.com/sagemaker/ 的 SageMaker 控制台。

  2. 在左侧导航窗格中,选择推理,然后选择 Inference Recommender

  3. Inference Recommender 作业页面上,选择您的负载测试作业。

  4. 选择停止作业

  5. 在弹出的对话框中,选择确认

停止作业后,作业的状态将变为正在停止