【问题标题】:Limit on the rate of inferences one can make for a SageMaker endpoint限制 SageMaker 端点的推理速率
【发布时间】:2020-01-22 16:07:19
【问题描述】:

对 SageMaker 端点的推理速率是否有限制?

它是由端点背后的实例类型或实例数量决定的吗?

我尝试以AWS Service Quotas for SageMaker 查找此信息,但找不到。

我正在从 Spark 作业调用端点 abd 想知道并发任务的数量是否是我在运行推理时应该注意的一个因素(假设每个任务一次运行一个推理)

这是我得到的限制错误:

com.amazonaws.services.sagemakerruntime.model.AmazonSageMakerRuntimeException: null (Service: AmazonSageMakerRuntime; Status Code: 400; Error Code: ThrottlingException; Request ID: b515121b-f3d5-4057-a8a4-6716f0708980)
    at com.amazonaws.http.AmazonHttpClient$RequestExecutor.handleErrorResponse(AmazonHttpClient.java:1712)
    at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeOneRequest(AmazonHttpClient.java:1367)
    at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeHelper(AmazonHttpClient.java:1113)
    at com.amazonaws.http.AmazonHttpClient$RequestExecutor.doExecute(AmazonHttpClient.java:770)
    at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeWithTimer(AmazonHttpClient.java:744)
    at com.amazonaws.http.AmazonHttpClient$RequestExecutor.execute(AmazonHttpClient.java:726)
    at com.amazonaws.http.AmazonHttpClient$RequestExecutor.access$500(AmazonHttpClient.java:686)
    at com.amazonaws.http.AmazonHttpClient$RequestExecutionBuilderImpl.execute(AmazonHttpClient.java:668)
    at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:532)
    at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:512)
    at com.amazonaws.services.sagemakerruntime.AmazonSageMakerRuntimeClient.doInvoke(AmazonSageMakerRuntimeClient.java:236)
    at com.amazonaws.services.sagemakerruntime.AmazonSageMakerRuntimeClient.invoke(AmazonSageMakerRuntimeClient.java:212)
    at com.amazonaws.services.sagemakerruntime.AmazonSageMakerRuntimeClient.executeInvokeEndpoint(AmazonSageMakerRuntimeClient.java:176)
    at com.amazonaws.services.sagemakerruntime.AmazonSageMakerRuntimeClient.invokeEndpoint(AmazonSageMakerRuntimeClient.java:151)
    at lineefd06a2d143b4016906a6138a6ffec15194.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$$$a5cddfc4633c5dd8aa603ddc4f9aad5$$$$w$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$Predictor.predict(command-2334973:41)
    at lineefd06a2d143b4016906a6138a6ffec15200.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$$$50a9225beeac265557e61f69d69d7d$$$$w$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$anonfun$2.apply(command-2307906:11)
    at lineefd06a2d143b4016906a6138a6ffec15200.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$$$50a9225beeac265557e61f69d69d7d$$$$w$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$anonfun$2.apply(command-2307906:11)
    at scala.collection.Iterator$$anon$11.next(Iterator.scala:410)
    at org.apache.spark.util.Utils$.getIteratorSize(Utils.scala:2000)
    at org.apache.spark.rdd.RDD$$anonfun$count$1.apply(RDD.scala:1220)
    at org.apache.spark.rdd.RDD$$anonfun$count$1.apply(RDD.scala:1220)
    at org.apache.spark.SparkContext$$anonfun$runJob$5.apply(SparkContext.scala:2321)
    at org.apache.spark.SparkContext$$anonfun$runJob$5.apply(SparkContext.scala:2321)
    at org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:90)
    at org.apache.spark.scheduler.Task.doRunTask(Task.scala:140)
    at org.apache.spark.scheduler.Task.run(Task.scala:113)
    at org.apache.spark.executor.Executor$TaskRunner$$anonfun$13.apply(Executor.scala:533)
    at org.apache.spark.util.Utils$.tryWithSafeFinally(Utils.scala:1541)
    at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:539)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)

【问题讨论】:

  • 您是否检查过 CloudWatch 中的端点指标和端点日志?您是否使端点饱和?
  • 我不知道我是否饱和了。这就是我的问题试图澄清的问题。我可以看到指标(例如,模型延迟为 0.2 秒,每 5 分钟的调用次数约为 100K),但我不知道这些是否会导致出现节流错误。我正在尝试获取有关 SageMaker 使用哪些指标来决定它需要限制端点调用的信息。我还想了解如果发生这种情况我应该怎么做——我应该增加实例数量还是使用更大的机器?我只能通过反复试验才能发现吗?

标签: amazon-sagemaker


【解决方案1】:

Amazon SageMaker 提供模型托管服务 (https://docs.aws.amazon.com/sagemaker/latest/dg/how-it-works-hosting.html),该服务可根据您的推理要求为您提供很大的灵活性。

如您所述,首先您可以选择用于模型托管的实例类型。大量选项对于调整您的模型很重要。您可以将模型托管在基于 GPU 的机器 (P2/P3/P4) 或 CPU 机器上。您可以拥有具有更快 CPU(例如 C4)或更多 RAM(例如 R4)的实例。您还可以选择内核更多(例如 16xl)或更少(例如中)的实例。以下是您可以选择的所有实例的列表:https://aws.amazon.com/sagemaker/pricing/instance-types/。平衡性能和成本非常重要。实例类型的选择以及模型的类型和大小将决定在此单节点配置中您可以从模型中获得的每秒调用次数。测量这个数字很重要,以避免遇到您看到的油门错误。

您使用的 SageMaker 托管的第二个重要功能是能够将您的模型自动扩展到多个实例。您可以将模型托管的端点配置为根据端点上的负载自动添加和删除实例。 AWS 在托管您的模型并在它们之间分配请求的多个实例之前添加了一个负载均衡器。使用自动扩展功能,您可以在流量较低的时间保留较小的实例,并能够在流量高峰时间进行扩展,同时仍能保持较低的成本并将节流错误降至最低。有关 SageMaker 自动缩放选项的文档,请参见此处:https://docs.aws.amazon.com/sagemaker/latest/dg/endpoint-auto-scaling.html

【讨论】:

  • 在我们的用例中,我们希望在需要时依靠自动缩放来添加实例,而无需在我们处理更多或更少的数据时重新配置端点参数。我们希望 Auto Scale 能让我们做到这一点,但 AWS 支持人员告诉我们,Auto Scale 的响应时间为 6-8 分钟,这对于有效的 Auto Scaling 方法来说太慢了。
  • 自动伸缩的时间取决于模型部署的复杂程度。实例越小,部署的占用空间越小,扩展完成的速度就越快。您还可以控制放大的灵敏度,或者何时开始放大。例如,您可以将 CPU 阈值从 50% 降低到 35%。 AWS 中的自动扩展是为流量逐渐增加的常见用例设计的,其中 5 分钟是合理的增长时间。如果您需要其他内容,可以通过向端点发送虚假流量来手动触发扩展。
猜你喜欢
  • 2021-09-28
  • 2018-02-16
  • 2015-03-24
  • 1970-01-01
  • 2023-01-30
  • 1970-01-01
  • 2018-05-04
  • 1970-01-01
  • 2012-05-06
相关资源
最近更新 更多