
# 在线服务预测报错ModelArts.4503
#### 问题现象
在线服务部署完成且服务已经处于"运行中"的状态后，向运行的服务发起推理请求，报错ModelArts.4503。
#### 原因分析及处理方法
服务预测报错ModelArts.4503有多种场景，常见场景如下：
1. 通信出错 请求报错：{"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参数来设置该值。其他方式导入的模型，服务内部已做处理。
   
2. 协议错误 请求报错：{"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://support.huaweicloud.com/trouble-modelarts/figure/zh-cn_image_0000001676846477.png "点击放大")
   如果您在"容器调用接口"中选择的结果跟您镜像实际提供的结果不匹配，例如您在这里选择的是https，但镜像里面实际提供的是http，就会遇到上述错误。反之，如果您选择的是http，但镜像里面实际提供的是https，也会遇到类似错误。
   您可以创建一个新的模型版本，选择正确的协议（http或者https），重新部署在线服务或更新已有在线服务。
   
3. 请求预测时间过长 报错：{"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秒。数据从平台发送到服务，服务预测推理，再将结果返回的时间不超过限制，可以成功返回预测结果。当服务预测的时间过长或者频繁预测导致服务接收不过来请求，即会出现该报错。
   可以通过以下方式解决问题：
   - 服务预测请求内容过大时，会因数据处理慢导致请求超时，优化预测代码，缩短预测时间。
   
   - 推理速度与模型复杂度强相关，优化模型，缩短预测时间。
   
   - 扩容实例数或者选择性能更好的"计算节点规格"，例如使用GP资源代替CPU资源，提升服务处理能力。
    
4. 服务出错 报错：{"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
   ```
   服务异常进程反复重启导致预测请求无法发送到服务实例。
   可以通过以下方式解决问题：
   - 缩小预测请求数量看是否问题还复现，如果不复现是因为负载过大导致服务进程退出，需要扩容实例数量或者提升规格。
   
   - 推理代码本身存在错误，请排查推理代码解决。
    
 
