内容提要
KServe是Kubernetes上的AI推理平台,用于管理模型服务。本文介绍从零安装KServe Standard模式和Envoy Gateway,通过PVC部署Qwen2.5-0.5B-Instruct模型。步骤包括安装cert-manager、Envoy Gateway、创建Gateway、安装KServe,然后下载模型、创建PV/PVC和InferenceService,最后通过OpenAI兼容接口请求API。KServe将模型地址、Runtime、GPU资源和访问入口统一收敛到InferenceService中,简化推理服务管理。
延伸解读
KServe 与裸 Deployment 的差异
直接使用 vLLM + Deployment 可以快速启动推理服务,但模型来源、Runtime 选择、GPU 分配和访问入口等配置会散落在多个 YAML 中。KServe 通过 InferenceService 将这些配置统一收敛,由 Controller 自动创建底层 Deployment、Service 和 HTTPRoute,简化了多服务场景下的管理。
三种部署模式的选择
KServe 提供 Standard、Knative/Serverless 和 LLMInferenceService 三种模式。Standard 模式依赖少、链路清晰,适合常驻 GPU 的 vLLM 服务;Knative 模式支持 Scale to Zero 和请求驱动扩缩容,适合突发流量;LLMInferenceService 面向大规模 LLM 推理,支持高级分布式能力。单 GPU vLLM 场景下 Standard 模式通常更简单。
模型加载与存储的注意事项
本文使用 PVC 挂载模型,因为环境无法稳定访问 Hugging Face,因此从 ModelScope 下载。生产环境建议使用 CephFS、NFS 等共享存储。InferenceService 中通过 storageUri 指定模型来源,modelFormat 声明模型格式以匹配 Runtime。首次启动需要加载模型、编译 vLLM 和预热 CUDA Graph,磁盘较慢时可能需要十几分钟。
网络暴露与访问方式
KServe 使用 Gateway API 暴露服务,本文选择 Envoy Gateway 作为实现。测试集群没有 LoadBalancer,因此将 Envoy Service 配置为 NodePort,并通过 Host Header 模拟域名访问。实际生产环境应配置 DNS 解析到 Gateway 地址,或使用 LoadBalancer 类型服务。
Q&A
KServe是什么?它和直接使用Deployment运行vLLM有什么区别?
KServe是一个面向Kubernetes的标准化分布式生成式和预测式AI推理平台,用于管理模型服务。它不直接执行模型计算,而是通过InferenceService统一声明模型地址、Runtime、GPU资源和访问入口,由KServe Controller创建底层资源。直接使用Deployment运行vLLM虽然简单,但服务多起来后配置会散落在多个YAML中,难以管理。KServe将这些配置收敛到InferenceService中,简化了推理服务的管理。
KServe有哪几种部署模式?如何选择?
KServe主要有三种部署模式:InferenceService(Standard)、InferenceService(Knative/Serverless)和LLMInferenceService。选择时,如果需要高级LLM分布式推理能力(如Prefix-aware Routing、Prefill/Decode分离),选择LLMInferenceService;如果需要Scale to Zero、Revision和请求驱动扩缩容,选择Knative模式;否则,使用Standard模式通常更简单,适合传统模型和常驻的GPU、vLLM推理服务。
如何从零安装KServe Standard模式并配置Envoy Gateway?
安装步骤包括:1) 安装cert-manager(最低版本1.15.0);2) 安装Envoy Gateway(通过Helm);3) 创建GatewayClass和Gateway(本文使用NodePort类型);4) 安装KServe CRD和Controller(设置deploymentMode=Standard,启用Gateway API);5) 安装默认ClusterServingRuntime。具体命令可参考文章。
如何通过PVC在KServe中部署Qwen2.5-0.5B-Instruct模型?
首先从ModelScope下载模型到本地目录,然后创建hostPath类型的PV和PVC(生产环境建议使用共享存储),接着创建InferenceService,指定modelFormat为huggingface,storageUri为pvc://qwen-model,并设置vLLM参数(如--model_name、--max_model_len等)。提交后等待服务就绪即可。
KServe中InferenceService的modelFormat、storageUri和args参数分别有什么作用?
modelFormat声明模型格式,用于匹配对应的Runtime(如huggingface匹配HuggingFaceServer);storageUri指定模型来源,如pvc://qwen-model表示模型在名为qwen-model的PVC中;args是传给Runtime的启动参数,例如--model_name设置API中的模型名,--max_model_len限制最大上下文长度,--max-num-seqs控制单次调度序列数,--gpu-memory-utilization设置GPU显存使用比例。
如何通过OpenAI兼容接口请求KServe部署的模型?
首先获取Envoy Gateway的NodePort和节点IP,然后使用curl命令,设置Host Header为InferenceService的域名(如qwen-llm-kserve-test.example.com),请求/openai/v1/models查看模型列表,或请求/openai/v1/chat/completions发送对话请求。例如:curl -H "Host: qwen-llm-kserve-test.example.com" http://${NODE_IP}:${NODE_PORT}/openai/v1/chat/completions -d '{"model": "qwen", "messages": [{"role": "user", "content": "你好"}]}'。
KServe部署的推理服务如何暴露给外部访问?
KServe通过Gateway API暴露服务,本文使用Envoy Gateway作为实现。创建Gateway时,如果集群没有LoadBalancer,可以配置EnvoyProxy将Service类型设为NodePort。访问时,使用NodeIP:NodePort,并设置Host Header为InferenceService的域名(如qwen-llm-kserve-test.example.com)。如果配置了DNS,也可以直接使用域名访问。