在线服务预测报错ModelArts.4503
问题现象
在线服务部署完成且服务已经处于“运行中”的状态后,向运行的服务发起推理请求,报错ModelArts.4503。
原因分析及处理方法
服务预测报错ModelArts.4503有多种场景,常见场景如下:
- 通信出错
请求报错:{"error_code":"ModelArts.4503","error_msg":"Failed to respond due to backend service not found or failed to respond"}
基于高性能考虑,ModelArts会复用同模型服务的连接。根据tcp协议,连接的断开可以由该连接的client端发起,也可以由server端发起。断开连接需要经过四次握手,所以可能会存在作为服务端的模型服务侧发起断开连接,但是该连接正在被作为客户端的ModelArts使用,从而导致通信出错,返回此错误信息。
如果您使用的是自定义镜像导入的模型,请增大自定义镜像中所使用的web server的keep-alive的参数值,尽量避免由服务端发起关闭连接。如您使用的Gunicorn来作为web server,可以通过Gunicorn命令的--keep-alive参数来设置该值。其他方式导入的模型,服务内部已做处理。
- 协议错误
请求报错:{"error_code":"ModelArts.4503", "error_msg":"Failed to find backend service because SSL error in the backend service, please check the service is https"}
部署在线服务使用的模型是从容器镜像中导入时,容器调用接口协议填写错误,会导致此错误信息。
出于安全考虑,ModelArts提供的推理请求都是https请求,从容器镜像中选择导入模型时,ModelArts允许使用的镜像提供https或http服务,但必须在“容器调用接口”中明确指定该镜像使用的是https或http服务。如下图所示:
图1 容器调用接口
如果您在“容器调用接口”中选择的结果跟您镜像实际提供的结果不匹配,例如您在这里选择的是https,但镜像里面实际提供的是http,就会遇到上述错误。反之,如果您选择的是http,但镜像里面实际提供的是https,也会遇到类似错误。
您可以创建一个新的模型版本,选择正确的协议(http或者https),重新部署在线服务或更新已有在线服务。
- 请求预测时间过长
报错:{"error_code": "ModelArts.4503", "error_msg": "Backend service respond timeout, please confirm your service is able to process the request without timeout. "}及报错:{"error_code": "ModelArts.4503", "error_msg": "Failed to find backend service because response timed out, please confirm your service is able to process the request without timeout. "}
因APIG(API网关)限制,平台每次请求预测的时间不超过40秒。数据从平台发送到服务,服务预测推理,再将结果返回的时间不超过限制,可以成功返回预测结果。当服务预测的时间过长或者频繁预测导致服务接收不过来请求,即会出现该报错。
可以通过以下方式解决问题:
- 服务预测请求内容过大时,会因数据处理慢导致请求超时,优化预测代码,缩短预测时间。
- 推理速度与模型复杂度强相关,优化模型,缩短预测时间。
- 扩容实例数或者选择性能更好的“计算节点规格”,例如使用GPU资源代替CPU资源,提升服务处理能力。
- 服务出错
报错:{"error_code": "ModelArts.4503","error_msg": "Backend service respond timeout, please confirm your service is able to process the request without timeout. "}
服务日志输出:
[2022-10-24 11:37:31 +0000] [897] [INFO] Booting worker with pid: 897 [2022-10-24 11:41:47 +0000] [1997] [INFO] Booting worker with pid: 1997 [2022-10-24 11:41:22 +0000] [1897] [INFO] Booting worker with pid: 1897 [2022-10-24 11:37:54 +0000] [997] [INFO] Booting worker with pid: 997
服务异常进程反复重启导致预测请求无法发送到服务实例。
可以通过以下方式解决问题:
- 缩小预测请求数量看是否问题还复现,如果不复现是因为负载过大导致服务进程退出,需要扩容实例数量或者提升规格。
- 推理代码本身存在错误,请排查推理代码解决。