本文主要介绍使用容器服务(VKE)快速部署基于 SGLang 的 DeepSeek-R1 满血版模型推理服务。
本方案结合火山引擎的多项加速技术,提供在 Kubernetes 集群中快速部署 DeepSeek-R1 大语言模型的方法:
方案核心优势:
本实践涉及较多组件,相互间有依赖,配置复杂,为了获得符合预期的结果,请务必根据本文指引操作。
同时开启 GDKV 模型加速和 EIC 时,实例节点的内存可能成为瓶颈。如有性能需求,建议只开启 ECI。操作方式请参见:EIC 性能测试方法。
为了获得符合预期的结果,同时符合容器服务的 使用限制,请按照本文方案(或在本文推荐的资源上)操作。如需替换方案,您可以联系对应的火山引擎客户经理咨询。
请勿使用 mGPU 对 GPU 进行切分。
完整的部署流程,依赖部分火山引擎邀测能力,请联系火山引擎客户经理申请如下功能的邀测试用:
高性能计算集群,用于实现高性能计算 GPU 实例(计算节点)的逻辑隔离,同一集群内实例间 RDMA 网络互联互通。详情请参见 创建高性能计算集群。
说明
高性能集群所在的 可用区 需要与 VKE 节点的 可用区 一致。
在容器服务中创建集群,需要注意以下列举的参数配置。其余参数说明和详细的操作步骤,请参见 创建集群。
配置项 | 说明 |
---|---|
集群配置 | |
Kubernetes 版本 | 选择 v1.28 及以上版本。 |
容器网络模型 | 选择 VPC-CNI。 |
节点池配置 | |
托管节点池 | 开启 托管节点池。 |
可用区 | 与 高性能计算集群 所在的可用区相同。 |
计算规格 | 选择前提条件中申请的高性能计算 GPU 型ecs.hpcpni3ln 规格。 |
高性能计算机群 | 选择之前创建的高性能计算集群。 |
节点数量 | 2 个。 |
数据盘 | 配置如下两个数据盘:
|
节点标签 (Labels) | 通过 VKE 部署 DeepSeek 模型时,需设置节点标签来配置 RDMA 使用模式。 |
Kubelet 自定义参数 | 通过 VKE 部署 DeepSeek 模型时,需通过 Kubelet 自定义参数配置 RDMA 设备的 NUMA 亲和策略。 |
组件配置 | |
nvidia-device-plugin | (必装)NVIDIA 设备驱动,支持在容器里使用 GPU 显卡设备的管理组件。 |
rdma-device-plugin | (必装)支持 RDMA 网卡设备的管理,提供 Pod Container 使用 RDMA 设备能力。 |
apig-controller | (必装)AI 网关控制器,提供云原生的 AI 网关能力,根据不同策略完成推理流量的智能负载均衡。 |
csi-ebs | (必装)支持容器集群使用存储服务的标准 CSI 接口实现。 |
prometheus-agent | (必装)托管 Prometheus 监控组件,采集 Kubernetes 集群监控指标数据到火山引擎托管 Prometheus 服务(VMP)。 |
apmplus-opentelemetry-collector | (必装)采集 OpenTelemetry 数据和 Prometheus 指标并发送至应用性能监控全链路版(APMPlus)。 |
apmplus-server-agent | (必装)采集服务和主机监控数据并发送至 APMPlus。 |
cr-credential-controller | (推荐安装)免密拉取镜像仓库(CR)镜像,简化部署操作。 |
keda | (推荐安装)基于 Kubernetes 的事件驱动的弹性伸缩器。基于复杂指标完成推理服务的弹性伸缩任务。 |
vci-virtual-kubelet | (推荐安装)利用弹性容器实例部署系统组件等 CPU 工作负载,免运维且不占用 GPU 节点计算资源。 |
EIC 通过以存代算、GDR 零拷贝等方式大幅降低推理 GPU 资源消耗,优化推理时延。
登录 弹性极速缓存控制台。
在左侧导航栏选择 实例管理,单击 创建实例。
根据界面提示配置实例参数,其中部分参数按如下说明配置,其余参数按需自定义配置。
配置项 | 说明 |
---|---|
VKE 集群 | 选择之前创建的 VKE 集群。 |
存储类型 | 选择 DRAM。 |
开启 RDMA | 开启。 |
节点 | 选择创建 VKE 集群时关联创建的节点。 |
网卡 | 设置为eth1 、eth2 、eth3 、eth4 。 |
单击页面右下角的 创建实例。实例状态显示 运行中,表示 EIC 实例创建成功。
如果创建实例时发生错误,实例状态将转变为 创建失败,您可以将鼠标悬浮到实例状态上查询具体失败原因。确认原因后单击实例对应的 删除 按钮来销毁实例,然后重新创建实例。若无法自行处理,请联系火山引擎客户经理获取相关技术支持。
本文使用 LeaderWorkerSet(LWS)来编排多节点的推理负载 (例如 DeepSeek R1 需要跨两个节点部署),LWS 支持把一组 Pod 作为 Replicate 的对象。
登录 容器服务控制台。
在左侧导航栏,选择 应用中心 > 应用模板,下拉到页面底部,单击 更多应用模板。
找到 leader-worker-set,鼠标悬停在该应用模板区域,然后单击 部署。
在 部署应用 页面,配置 leader-worker-set 服务参数。其中,部分参数按如下说明配置,其余参数根据界面提示或参考 应用模板 中的说明配置。
配置项 | 说明 |
---|---|
基本信息 | |
项目 | 选择需要部署应用的项目,确保与 VKE 集群所属项目相同。 |
集群 | 选择 前提条件 中创建的 VKE 集群。 |
命名空间 | 自定义选择目标集群下的命名空间。 |
编排模板 | |
Chart | 选择 leader-worker-set 的 Chart 版本,建议选择最新版本。 |
协议 | 阅读了解协议内容后勾选协议。 |
单击 确定,部署完成应用。
应用部署完成后会显示在 Helm 应用 页面。选择目标项目、集群、命名空间,找到已基于 leader-worker-set 模板部署的应用,单击应用名称,进入详情页面查看该应用的基本信息、关联创建的工作负载、服务、其他资源等。
容器服务基于 SGLang 框架提供 PD(Prefill-Decode)分离的 DeepSeek-R1 模型应用,可通过 应用模版 快速部署。
在 容器服务控制台 左侧导航栏,选择 应用中心 > 应用模板。
在 应用模板 页面,找到 deepseek-r1-sglang 应用模板,鼠标悬停在该应用模板区域,然后单击 部署。
在 部署应用 页面,配置 deepseek-r1-sglang 服务参数。其中,部分参数按如下说明配置,其余参数根据界面提示或参考 应用模板 中的说明配置。
配置项 | 说明 |
---|---|
基本信息 | |
项目 | 选择需要部署应用的项目,确保与 VKE 集群所属项目相同。 |
集群 | 选择 前提条件 中创建的 VKE 集群。 |
命名空间 | 自定义选择目标集群下的命名空间。 |
编排模板 | |
Chart | 选择 deepseek-r1-sglang 的 Chart 版本,建议选择最新版本。 |
参数配置 | 选择 deepseek-r1-sglang 的配置方法。如需启用弹性极速缓存 EIC,单击编辑图标,编辑values.yaml 文件,并新增如表格下方所示的 EIC 相关参数 YAML 内容。 |
协议 | 阅读了解协议内容后勾选协议。 |
EIC 相关参数 YAML 内容:
eic: enabled: true # EIC 实例 ID。登录弹性极速缓存控制台,进入实例详情页面的“实例信息”页签查看。 instanceID: "eicydx97nk******" # EIC 实例的 Endpoint。登录弹性极速缓存控制台,进入实例详情页面的“实例信息”页签查看。 remoteURL: "eic://192.168.xx.xx:12500;192.168.xx.xx:12500;192.168.xx.xx:12500" # EIC 节点网卡。登录弹性极速缓存控制台,进入实例详情页面的“节点列表”页签查看。 netLocalInterfaceNames: "eth1;eth2;eht3;eth4;eth5;eth6;eht7;eth8" # 部署 EIC 的节点所对应的 VKE 节点池 ID。登录容器服务控制台,进入目标集群管理页面中“节点管理 > 节点池”页面查看。 machinePool: "pd0ve352******"
单击 确定,部署完成应用。
应用部署完成后会显示在 Helm 应用 页面。选择目标项目、集群、命名空间,找到已部署的 deepseek-r1-sglang 应用,单击名称,进入详情页面查看该应用的基本信息、关联创建的工作负载、服务、其他资源等。
在 VKE 集群的 有状态负载 页面,查看 deepseek-r1-sglang 应用对应的负载状态。
通过 APIG Ingress 配置模型路由。APIG Ingress 基于火山引擎 API 网关(API Gateway,APIG) 提供托管的云原生网关功能,实现高可用、高扩展的 Ingress 流量管理方式,满足在云原生应用场景下对业务流量稳定性和高可用性的需求。
说明
使用 API 网关(APIG)暴露集群中的模型服务时,配置建议如下:
503
错误码,以及具体的错误详情。基础观测提供 AI 资源及推理服务的监控指标,深度观测提供推理应用的全链路性能监控服务。
配置完成后,SGLang 的应用指标会被采集到托管 Prometheus(VMP)服务,您可以在托管 Prometheus 控制台中使用 Explore 查询指标,示例如下:apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: name: sglang-api-svc-discover # 配置采集规则名称 namespace: default # 配置 ServiceMonitor 命名空间 labels: volcengine.vmp: "true" # 配置 ServiceMonitor 的标签,允许被 Prometheus-agent 发现 spec: endpoints: - port: http # 填写服务端口名称 namespaceSelector: matchNames: - default # 配置为服务所在的命名空间 selector: matchLabels: app: sglang # 配置服务的 Label 值,以定位和选择目标 Service
sglang
,可查看到如下示例所示的 SGLang 应用看板:登录上述 Grafana ,选择导入如下看版 JSON 文件:
导入后效果如图所示:
sglang
为关键字的服务,单击服务名,进入观测看板页面。说明
TTFT、TPOT 指标需要流式调用才会产生相应指标。
curl localhost:8080/v1/chat/completions -H "Content-Type: application/json" -d '{ "model": "/data/models/DeepSeek-R1", "messages": [ { "role": "user", "content": "hello" } ], "stream": true, "stream_options": { "include_usage": true, "continuous_usage_stats": true } }'
上述步骤中创建的 sglang-api-svc 服务提供 http api 端点。默认在 8080 端口,可以按照 OpenAI 兼容 API 方式去调用。
说明
sglang-api-svc 是安装 deepseek-r1-sglang 应用模板时生成的服务名。在 容器服务控制台 的目标集群管理页面左侧导航栏,选择 服务与路由 > 服务,搜索查询 sglang-api-svc 服务名称,查看 HTTP API 端点。
示例代码如下所示。
curl http://******/v1/chat/completions -H "Content-Type: application/json" -d '{ "model": "/data/models/DeepSeek-R1", "messages": [ {"role": "user", "content": "Who are you?"} ] }'
开启 API 网关的认证鉴权功能时,需要在请求中添加认证 Token。示例如下:
curl http://example.com/v1/chat/completions -X POST \ -H "Content-Type: application/json" \ -H "Authorization: Bearer eyJhbGciOiJSUzI1NiIsImtp***" \ -d '{ "model": "/models/deepseek", "messages": [ {"role": "system", "content": "You are a helpful assistant."}, {"role": "user", "content": "Who won the world series in 2020?"} ] }'