翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Amazon SageMaker Inference Recommender のロードテストでは、レイテンシーとスループット、カスタムトラフィックパターン、選択したサーバーレスエンドポイントまたはリアルタイムのインスタンス (最大 10) の本番要件に基づいて、広範なベンチマークが実行されます。
以下のセクションでは、 と を使用してプログラムで、または Amazon SageMaker Studio Classic または SageMaker AI コンソールを使用してインタラクティブに、ロードテストを作成 AWS SDK for Python (Boto3) AWS CLI、説明、停止する方法について説明します。
ロードテストジョブを作成する
を使用してプログラムで負荷テストを作成するか AWS SDK for Python (Boto3)、 を使用して負荷テストを作成するか AWS CLI、Studio Classic または SageMaker AI コンソールを使用してインタラクティブに負荷テストを作成します。Inference Recommender の推論レコメンデーションと同様に、モデルをモデルレジストリに登録したときのロードテストのジョブ名、IAM AWS ロール ARN、入力設定、およびモデルパッケージ ARN を指定します。ロードテストでは、トラフィックパターンと停止条件も指定する必要があります。
CreateInferenceRecommendationsJob
API を使用して、Inference Recommender のロードテストを作成します。JobType
フィールドで Advanced
を指定し、以下を指定します。
-
ロードテストのジョブ名 (
JobName
)。ジョブ名は、 AWS リージョン内および AWS アカウント内で一意である必要があります。 -
Inference Recommender がユーザーに代わってタスクを実行できるようにする IAM ロールの Amazon リソースネーム (ARN)。これを
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
の値であることに注意してください。たとえば、DurationInSeconds
が600
の場合、5
ステップを指定すると、各ステップの長さは 120 秒になります。注記
ユーザーは、Inference Recommender の一部としてループ内で実行され、エンドポイントへのリクエストを呼び出すシステム生成アクターとして定義されます。
ml.c5.large
インスタンス上で実行される一般的な XGBoost コンテナの場合、エンドポイントは、わずか 15~20 人のユーザーで 1 分あたり 30,000 回の呼び出し (500 tps) に達することがあります。
-
-
ResourceLimit
には、MaxNumberOfTests
(Inference Recommender ジョブのベンチマークロードテストの最大数 (最小 1、最大 10)) とMaxParallelOfTests
(Inference Recommender ジョブの並列ベンチマークロードテストの最大数 (最小 1、最大 10)) を指定します。 -
EndpointConfigurations
には、以下のいずれかを指定できます。-
InstanceType
フィールド。ロードテストを実行するインスタンスタイプを指定します。 -
ServerlessConfig
。サーバーレスエンドポイントのMaxConcurrency
およびMemorySizeInMB
の理想的な値を指定します。詳細については、サーバーレス推論ドキュメントを参照してください。
-
-
-
停止条件ディクショナリ (
StoppingConditions
)。いずれかの条件が満たされると、Inference Recommender のジョブが停止します。この例では、ディクショナリで以下のフィールドを指定します。-
MaxInvocations
には、エンドポイントで想定される 1 分あたりの最大リクエスト数を指定します (最小 1、最大 30,000)。 -
ModelLatencyThresholds
には、Percentile
(モデルレイテンシーのパーセンタイルのしきい値) とValueInMilliseconds
(モデルレイテンシーのパーセンタイル値 (ミリ秒単位)) を指定します。 -
(オプション)
FlatInvocations
では、TPS (1 分あたりの呼び出し数) レートが平坦化したときにロードテストを続行するかどうかを指定できます。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'
}
)
CreateInferenceRecommendationsJob
に渡すことができるオプションの引数と必須の引数の完全なリストについては、Amazon SageMaker API リファレンスガイドを参照してください。
ロードテスト結果を取得する
負荷テストが 、、 AWS CLI Studio Classic AWS SDK for Python (Boto3)、または SageMaker AI コンソールで完了すると、すべての負荷テストでメトリクスをプログラムで収集できます。
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
ネストされたディクショナリには、レコメンデーションジョブ中に使用されるエンドポイントとバリアント名 (デプロイされた AWS 機械学習モデルInstanceType
) とともに、インスタンスタイプ () レコメンデーションが含まれます。Amazon CloudWatch Events でのモニタリングには、エンドポイントとバリアント名を使用できます。詳細については「Amazon CloudWatch で Amazon SageMaker AI をモニタリングするためのメトリクス」を参照してください。
EndpointConfiguration
のネストされたディクショナリには、インスタンス数 (InitialInstanceCount
) レコメンデーションも含まれています。これは、StoppingConditions
で指定されている MaxInvocations
を満たすためにエンドポイントでプロビジョニングする必要があるインスタンス数です。たとえば、InstanceType
が ml.m5.large
で、InitialInstanceCount
が 2
の場合、MaxInvocations
停止条件で指定された TPS を処理できるように、エンドポイントに対して 2 つの ml.m5.large
インスタンスをプロビジョニングする必要があります。
Metrics
ネストされたディクショナリには、リアルタイムエンドポイントの 1 時間あたりの推定コスト (CostPerHour
)、リアルタイムエンドポイントの推論あたりの推定コスト (CostPerInference
)、エンドポイントに送信されたInvokeEndpoint
リクエストの最大数、およびモデルが SageMaker AI に応答するのにかかった間隔 (マイクロ秒単位ModelLatency
) であるモデルレイテンシー () に関する情報が含まれています。モデルのレイテンシーには、リクエストを送信し、モデルのコンテナからレスポンスを取得するのにかかるローカル通信時間と、コンテナ内で推論を完了するのにかかる時間が含まれます。
以下の例は、サーバーレス推論レコメンデーションを返すように設定されたロードテストのレスポンスの 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
は例外で、ロードテストの設定時に MaxConcurrency
と MemorySizeInMB
に指定された値を示します。サーバーレスレコメンデーションではメトリクス ModelSetupTime
も測定され、これにより、サーバーレスエンドポイントでコンピューターリソースを起動するのにかかる時間 (マイクロ秒単位) が測定されます。サーバーレスエンドポイントの設定について詳しくは、サーバーレス推論のドキュメントを参照してください。