如何对 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. 使用日志中的信息确定错误的根本原因。