You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

KServe从0.7升级至0.9后自定义MAR文件请求返回500错误

问题分析与解决方案

针对KServe从0.7升级到0.9后自定义PyTorch MAR文件推理返回500(连接拒绝)的问题,结合你提供的信息(Pod正常启动、官方示例运行正常、无直接tornado依赖),核心原因大概率集中在TorchServe版本兼容性或KServe代理与模型服务的通信配置上,以下是具体排查和解决步骤:

排查方向

1. 验证TorchServe内部服务是否正常监听端口

进入运行中的Pod,执行以下命令查看端口监听状态:

netstat -tulpn | grep torchserve
# 或使用ss命令(若netstat未安装)
ss -tulpn | grep torchserve

如果没有输出,说明TorchServe并未在预期端口(默认8080)启动,需进一步查看启动日志。

2. 检查TorchServe启动日志

查看Pod内TorchServe的启动日志,重点排查依赖冲突或启动失败信息:

# 查看容器标准输出
kubectl logs <pod-name> -c <predictor-container-name>
# 或查看TorchServe的日志文件
kubectl exec -it <pod-name> -- cat /tmp/logs/ts_log.log

若日志中出现tornado相关的版本冲突或启动报错,说明MAR文件的间接依赖与KServe 0.9内置的TorchServe依赖版本不兼容(KServe 0.9升级了TorchServe版本,其依赖的tornado版本可能与你的MAR文件间接依赖的版本冲突)。

3. 核对RawDeployment的端口配置

检查你的InferenceService RawDeployment配置,确保容器端口与TorchServe实际监听端口一致:

apiVersion: serving.kserve.io/v1beta1
kind: InferenceService
metadata:
  name: custom-model
spec:
  predictor:
    rawDeployment:
      spec:
        template:
          spec:
            containers:
            - name: kserve-container
              image: your-custom-image
              ports:
              - containerPort: 8080  # 需与TorchServe推理端口一致
                name: http
                protocol: TCP

KServe 0.9对RawDeployment的端口转发逻辑可能有调整,若TorchServe新版本修改了默认端口,需同步更新此处配置。

解决方法

1. 修复依赖兼容性问题

  • 重新打包MAR文件:使用KServe 0.9对应的TorchServe版本重新打包模型,确保间接依赖(如tornado)与TorchServe内置版本兼容。你可以先拉取KServe 0.9的TorchServe镜像,查看其依赖版本:
docker run --rm kserve/torchserve:0.9.0 pip list | grep tornado

然后在打包MAR时,通过requirements.txt指定该版本的tornado。

  • 覆盖依赖版本:在RawDeployment的容器配置中添加环境变量,强制安装兼容的tornado版本:
containers:
- name: kserve-container
  image: your-custom-image
  env:
  - name: EXTRA_REQUIREMENTS
    value: "tornado==<兼容版本号>"

2. 显式指定TorchServe启动参数

在RawDeployment的容器启动命令中,显式指定TorchServe的监听地址和端口,避免自动配置异常:

containers:
- name: kserve-container
  image: your-custom-image
  command: ["torchserve"]
  args:
  - "--start"
  - "--model-store"
  - "/mnt/models"
  - "--models"
  - "model=model.mar"
  - "--ts-config"
  - "/mnt/config/config.properties"
  volumeMounts:
  - name: config-volume
    mountPath: /mnt/config
volumes:
- name: config-volume
  configMap:
    name: torchserve-config

同时在config.properties中明确端口配置:

inference_address=http://0.0.0.0:8080
management_address=http://0.0.0.0:8081
metrics_address=http://0.0.0.0:8082

3. 匹配KServe代理转发配置

确保KServe的代理(如Istio)正确将推理请求转发到TorchServe的端口。若使用RawDeployment,KServe默认会转发到容器配置的containerPort,因此只要该端口与TorchServe监听端口一致即可。

内容的提问来源于stack exchange,提问作者Waqas Shah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 03:05:21