如何对 Amazon SageMaker 上的 InternalServerError 响应进行故障排除?

上次更新时间:2020 年 9 月 24 日

当我在 Amazon SageMaker 中运行培训作业或做出预测时,请求失败并显示响应“HTTP Error 500: Internal Server Error”(HTTP 错误 500:内部服务器错误)或“InternalServerError: We encountered an internal error.Please try again”(内部服务器错误:我们遇到了内部错误。请重试)。 如何找到错误的根本原因?

解决方法

培训作业

重试请求。如果 TrainingJobStatus 仍显示 Failed(失败),请查看 FailureReason 以确定失败的原因。要查看完整的错误堆栈,请检查 Amazon CloudWatch logs,如下一节所述。

推理请求

检查与终端节点关联的 CloudWatch logs 以确定根本原因:

1.    打开 SageMaker 控制台

2.    根据错误发生的位置,选择 Training jobs(培训作业)或 Endpoints(终端节点)。

3.    选择培训作业或终端节点的名称。

4.    在 Monitor(监视器)部分中,选择 View logs(查看日志)以打开 CloudWatch 控制台。

5.    在 CloudWatch 控制台中,选择培训作业或终端节点的日志流:

对于培训作业,日志流位于 /aws/sagemaker/TrainingJobs CloudWatch 日志组中。流名称以培训作业名称开头(例如,imageclassfi-job-2020-04-05/xxxxx)。

对于终端节点,日志流位于 /aws/sagemaker/Endpoints/endpoint_name CloudWatch 日志组中。流名称以变体名称开头(例如,AllTraffic/i-xxxxxxx)。

6.    查看日志以找出详细的错误消息。为了简化此过程,您可以在培训作业或推理脚本中添加调试代码。例如,打印作业状态或数据集的实际值。然后,在 CloudWatch logs 中查找该打印消息。

下面是用于调试终端节点的推理代码示例。您可以使用此代码来确认您正确地调用了 predict() 函数。该代码还会打印向您显示传递到终端节点的实际值的 data 变量。在此示例中,MYDEBUG 是您要在 CloudWatch 日志流中搜索的关键字。

def predict():
    data = None
    print("MYDEBUG: Predict function called")
    # Convert from CSV to pandas
    if flask.request.content_type == 'text/csv':
        data = flask.request.data.decode('utf-8')
        s = StringIO.StringIO(data)
        data = pd.read_csv(s, header=None)
        ## To print the  actual data set
        print( "MYDEBUG: Printing data")
        print( data.head(10) )

7.    使用日志中的信息确定错误的根本原因。


这篇文章对您有帮助吗?


您是否需要账单或技术支持?