KServe自定义预测器就绪检查失效,如何让queue-proxy等待模型加载?
解决KServe queue-proxy提前调用模型容器的问题
针对你遇到的queue-proxy未等待模型加载完成就发起调用的问题,可通过以下几种方式解决:
方法一:为queue-proxy配置关联模型状态的就绪探针
KServe的queue-proxy默认不会自动等待模型容器就绪,需显式配置其就绪探针,让它依赖模型容器的就绪状态。在spec.predictor下添加queueProxy字段,配置对应的就绪检查规则:
apiVersion: serving.kserve.io/v1beta1 kind: InferenceService metadata: name: custom-model spec: predictor: containers: - name: kserve-container image: private-registry/kserve:1.0.3 readinessProbe: httpGet: path: / port: 8080 failureThreshold: 100 initialDelaySeconds: 300 periodSeconds: 300 resources: requests: nvidia.com/gpu: 1 cpu: 6000m memory: 16Gi limits: nvidia.com/gpu: 1 cpu: 6000m memory: 16Gi queueProxy: readinessProbe: httpGet: path: /ready port: 8080 initialDelaySeconds: 300 periodSeconds: 10 failureThreshold: 60
queue-proxy的/ready端点会自动检查后端模型容器的就绪状态,只有模型容器就绪探针成功后,queue-proxy的就绪探针才会通过,此时才会开始接收并转发外部请求。
方法二:修正模型容器的就绪探针端点
确保你的自定义预测器实现KServe标准的就绪端点,比如/v1/models/<model-name>:ready,该端点需在模型完全加载完成后才返回200状态码。如果之前配置的/路径在模型加载过程中就返回200,会导致KServe误判模型已就绪。调整后的就绪探针配置示例:
readinessProbe: httpGet: path: /v1/models/custom-model:ready port: 8080 failureThreshold: 100 initialDelaySeconds: 60 periodSeconds: 10
模型容器的就绪探针仅在模型加载完成后成功,部分KServe版本会自动让queue-proxy依赖此状态,避免提前调用。
方法三:用初始化容器预加载模型
如果模型加载可独立于预测器启动流程,可添加初始化容器先完成模型加载至GPU的操作,再启动预测器容器。这样预测器启动时模型已加载完成,就绪探针可快速通过:
apiVersion: serving.kserve.io/v1beta1 kind: InferenceService metadata: name: custom-model spec: predictor: containers: - name: kserve-container image: private-registry/kserve:1.0.3 readinessProbe: httpGet: path: /v1/models/custom-model:ready port: 8080 failureThreshold: 10 initialDelaySeconds: 30 periodSeconds: 10 resources: requests: nvidia.com/gpu: 1 cpu: 6000m memory: 16Gi limits: nvidia.com/gpu: 1 cpu: 6000m memory: 16Gi initContainers: - name: model-loader image: private-registry/model-loader:v1 command: ["bash", "-c", "load-model-to-gpu --model-path /models"] resources: requests: nvidia.com/gpu: 1 cpu: 6000m memory: 16Gi limits: nvidia.com/gpu: 1 cpu: 6000m memory: 16Gi volumeMounts: - name: model-storage mountPath: /models volumes: - name: model-storage persistentVolumeClaim: claimName: model-pvc
内容的提问来源于stack exchange,提问作者aesher9o1
相关产品推荐
相关产品推荐

