工人死亡/工人与 Sagemaker 断开连接

问题描述 投票:0回答:2

我正在尝试设置一个多模型端点(或者更准确地重新设置它,因为我很确定它不久前在早期版本的 sagemaker 上运行)来进行语言翻译。但我经常遇到同样的问题。这就是我正在尝试运行的内容(从 sagemaker 上的笔记本):

import sagemaker
from sagemaker.pytorch.model import PyTorchModel
from sagemaker.predictor import JSONSerializer, JSONDeserializer

role = 'role_name...'
pytorch_model = PyTorchModel(model_data='s3://foreign-language-models/opus-mt-ROMANCE-en.tar.gz',
                             role=role,
                             framework_version="1.3.1",
                             py_version="py3",
                             source_dir="code",
                             entry_point="deploy_multi_model.py")
x = pytorch_model.predictor_cls(endpoint_name='language-translation')
x.serializer = JSONSerializer()
x.deserializer = JSONDeserializer()

x.predict({'model_name': 'opus-mt-ROMANCE-en', 'text': ["Hola que tal?"]})

我遇到了错误:

ModelError: An error occurred (ModelError) when calling the InvokeEndpoint operation: Received server error (500) from model with message "{
  "code": 500,
  "type": "InternalServerException",
  "message": "Worker died."
}

当我调查日志时,错误链接到唯一值得注意的一个:

epollEventLoopGroup-4-1 com.amazonaws.ml.mms.wlm.WorkerThread - 9000 Worker disconnected. WORKER_MODEL_LOADED

但我不明白为什么会发生这种情况。 任何帮助将不胜感激,因为这目前让我发疯!如果您需要我提供更多信息来提供帮助,请随时询问。

amazon-sagemaker
2个回答
2
投票

这个问题很老了,可能无法回答,但是,面对这些问题时的处理方法非常简单:

这正是由于一般内部错误而导致的服务不可用消息。您应该从CloudWatch打开完整的端点日志并查看它在哪里发生故障。原因可以是任何类型。

要调试问题,请通过单击训练过程屏幕中的“查看日志”或转到以下路径的 CloudWatch 直接访问日志:

CloudWatch / Log groups /aws/sagemaker/TrainingJobs / <your_job_name>
.

如果问题立即出现,可能与模型数据加载不正确或推理数据传递不正确有关。


0
投票

正如 @giuseppe-la-gualano 所建议的,这种情况下的 cloudwatch 错误可能与 SageMaker 端点在处理超出标准限制的负载/响应方面的限制有关。

潜在问题

用于推理的有效负载大小

对于端点,将每次调用的输入数据的最大大小限制为 6 MB。该值无法调整。

对于批量转换,每次调用的输入数据的最大大小为 100 MB。该值无法调整

如果出现此类错误,您将发现 SageMaker 端点的 CloudWatch 日志包含如下错误:

2023-11-03T05:13:06,763 [ERROR] epollEventLoopGroup-4-1 com.amazonaws.ml.mms.wlm.WorkerThread - Unknown exception

io.netty.handler.codec.CorruptedFrameException: Message size exceed limit: 6654978

在我的例子中,推理结果超出了 6MB 限制。

如何解决这个问题。

前进的方向可能是使用异步推理端点

  • 您构建请求并将请求放在 s3 上并获取位置
  • 您将预测指向位于 s3 上的输入负载
  • 在异步端点创建期间,您还可以以 s3 位置的形式指定推理可以将大尺寸输出放置到的位置。这通常在端点的异步推理配置中完成。
  • 预测将快速为您提供包含各种详细信息的响应,例如输出位置、故障位置、InferenceId 以及其他用于跟踪目的的信息。
{
  "ResponseMetadata": {
    "RequestId": "GUID",
    "HTTPStatusCode": 202,
    "HTTPHeaders": {
      "x-amzn-requestid": "GUID",
      "x-amzn-sagemaker-outputlocation": "s3://location/result.out",
      "x-amzn-sagemaker-failurelocation": "s3://location/file-error.out",
      "date": "Fri, 03 Nov 2023 05:45:51 GMT",
      "content-type": "application/json",
      "content-length": "54",
      "connection": "keep-alive"
    },
    "RetryAttempts": 0
  },
  "OutputLocation": "s3://location/result.out",
  "FailureLocation": "s3://location/file-error.out",
  "InferenceId": "GUID"
}
  • 您还可以选择配置 SNS 以在生成预测后通知状态

您可以查找是否存在输出或错误并采取相应措施。

© www.soinside.com 2019 - 2024. All rights reserved.