本文主要介绍使用容器服务(VKE)快速部署基于 Dynamo 和 vLLM 的 Qwen3-235B (PD 分离)模型推理服务。
本方案结合火山引擎的多项加速技术,提供在 Kubernetes 集群中快速部署 Qwen3-235B-A22B 模型的方法。
Qwen3:由阿里云推出的最新一代通义千问大模型,它包含 2 款混合专家(MoE)与 6 款密集(Dense)模型,参数量从 0.6B 到 235B 不等,能满足多样化需求。
Dynamo:NVIDIA Dynamo 是一个开源、低延迟的模块化推理框架,用于在分布式环境中服务生成式 AI 模型。
GDKV 模型加速:由火山引擎提供的基于 RDMA + GDR(GPU Direct RDMA)技术实现的模型极速加载方案。
弹性极速缓存 EIC:由火山引擎存储团队面向大语言模型推理场景推出的高性能分布式 KV Cache 缓存服务。
PD 分离技术:将推理过程分为两阶段,部署于不同硬件资源以优化性能:
本实践涉及较多组件,相互间有依赖,配置复杂,为了获得符合预期的结果,请务必根据本文指引操作。
同时开启 GDKV 模型加速和 EIC 弹性极速缓存时,实例节点的内存可能成为瓶颈。如有性能需求,建议只开启 EIC,操作方式,详见:EIC 性能测试方法。
为了获得符合预期的结果,同时符合容器服务的 使用限制,请按照本文方案(或在本文推荐的资源上)操作。如需替换方案,您可以联系对应的火山引擎客户经理咨询。
请勿使用 mGPU 对 GPU 进行切分。
完整的部署流程,依赖部分火山引擎邀测能力,请联系火山引擎客户经理申请如下功能的邀测试用:
高性能计算集群,用于实现高性能计算 GPU 实例(计算节点)的逻辑隔离,同一集群内实例间 RDMA 网络互联互通。详情请参见 创建高性能计算集群
说明
高性能集群所在的 可用区 需要与 VKE 节点的 可用区 一致。
在容器服务中创建集群,需要注意以下列举的参数配置。其余参数说明和详细的操作步骤,请参见 创建集群。
配置项 | 说明 |
---|---|
集群配置 | |
Kubernetes 版本 | 选择 v1.28 及以上版本。 |
容器网络模型 | 选择 VPC-CNI。 |
节点池配置 | |
托管节点池 | 开启 托管节点池。 |
可用区 | 与 高性能计算计算集群 所在的可用区相同。 |
计算规格 | 由于 Qwen3-235B 模型参数较大,需要选择有较大显存的 GPU 实例 ,例如 ecs.hpcpni3ln。 |
高性能计算机群 | 选择之前创建的高性能计算集群。 |
节点数量 | 2 个。 |
数据盘 | 配置如下两个数据盘:
|
节点标签 (Labels) | 通过 VKE 部署模型时,需设置节点标签来配置 RDMA 使用模式。 |
Kubelet 自定义参数 | 通过 VKE 部署模型时,需通过 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)。 |
metrics-server | (必装)为集群的自动伸缩机制提供容器资源监控指标。 |
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 实例创建成功。
如果创建实例时发生错误,实例状态将转变为 创建失败,您可以将鼠标悬浮到实例状态上查询具体失败原因。确认原因后单击实例对应的 删除 按钮来销毁实例,然后重新创建实例。若无法自行处理,请联系火山引擎客户经理获取相关技术支持。
NATS 和 etcd 需要使用存储卷,本文以创建云盘为例,示例截图如下。
说明
创建云盘的详细操作说明参见 EBS 云盘存储卷。
容器服务基于 Qwen和 Dynamo 框架提供 PD(Prefill-Decode)分离的模型应用,可通过 应用模版 快速部署。
在 容器服务控制台 左侧导航栏,选择 应用中心 > 应用模板。
在 应用模板 页面,找到 qwen3-dynamo-vllm-pd 应用模板,鼠标悬停在该应用模板区域,然后单击 部署。
在 部署应用 页面,配置 qwen3-dynamo-vllm-pd 服务参数。其中,部分参数按如下说明配置,其余参数根据界面提示或参考 应用模板 中的说明配置。
配置项 | 说明 |
---|---|
基本信息 | |
项目 | 选择需要部署应用的项目,确保与 VKE 集群所属项目相同。 |
集群 | 选择 前提条件 中创建的 VKE 集群。 |
命名空间 | 自定义选择目标集群下的命名空间。 |
编排模板 | |
Chart | 选择 qwen3-dynamo-vllm-pd 的 Chart 版本,建议选择最新版本。 |
参数配置 | 选择 qwen3-dynamo-vllm-pd 的配置方法。如需启用弹性极速缓存 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 应用 页面。选择目标项目、集群、命名空间,找到已部署的 qwen3-dynamo-vllm-pd 应用,单击名称,进入详情页面查看该应用的基本信息、关联创建的工作负载、服务、其他资源等。
在 VKE 集群的 有状态负载 页面,查看 qwen3-dynamo-vllm-pd 应用对应的负载状态。
支持按需编辑 values.yaml
文件修改配置。部分参数说明如下。
Value Key | 说明 | 示例 |
---|---|---|
modelConfig.local.path | 用于存放模型文件的 ECS 本地路径,务必与前置条件中的数据盘匹配。 | /data01/models |
prefillWorker.replicas | prefill worker 部署的副本数。 | 1 |
decodeWorker.replicas | decode worker 部署的副本数。 | 1 |
decodeWorker.router | router 算法选择。 | round-robin |
etcd.persistence.storageClass | ETCD 使用的存储类。 | ebs-ssd |
etcd.persistence.size | ETCD 存储的大小。 | 10Gi |
nats.config.cluster.enabled | nats 是否使用 cluster 配置。 | true |
nats.config.cluster.replicas | nats cluster 副本数,大于等于3。 | 3 |
nats.config.jetstream.fileStore.pvc.storageClassName | nats 使用的存储类。 | ebs-ssd |
nats.config.jetstream.fileStore.pvc.size | nats 存储的大小。 | 10Gi |
安装完成后,创建名为 [应用名称]-qwen3-dynamo-vllm-pd 的服务,推理服务端口为 8000
。在控制台上为服务创建路由规则允许从公网访问服务。
通过 APIG Ingress 配置模型路由。APIG Ingress 基于火山引擎 API 网关(API Gateway,APIG) 提供托管的云原生网关功能,实现高可用、高扩展的 Ingress 流量管理方式,满足在云原生应用场景下对业务流量稳定性和高可用性的需求。
说明
使用 API 网关(APIG)暴露集群中的模型服务时,配置建议如下:
503
错误码,以及具体的错误详情。基础观测提供 AI 资源及推理服务的监控指标,深度观测提供推理应用的全链路性能监控服务。
在集群管理页面的左侧导航栏中,选择 云原生观测 > 概览,单击 立即启用,开启云原生观测和容器服务观测。更多配置详情,请参见 开启观测、容器服务观测。
配置完成后,Dynamo 指标会被采集到托管 Prometheus(VMP)服务,您可以在托管 Prometheus 控制台中使用 Explore 查询指标,示例如下:
您可以使用 VMP 预置面板查看 Dynamo 应用监控,在 VMP 服务控制台,选择 监控看板,搜索dynamo
,可查看到如下示例所示的 Dynamo 应用看板:
您也可以自建 Grafana,并搭建 Dynamo 的监控看版。操作方式请参见 在容器服务集群中部署 Grafana 并接入工作区。
Dynamo
为关键字的服务,单击服务名,进入观测看板页面。说明
TTFT、TPOT 指标需要流式调用才会产生相应指标。
curl localhost:8000/v1/chat/completions -H "Content-Type: application/json" -d '{ "model": "Qwen/Qwen3-235B-A22Beek-R1", "messages": [ { "role": "user", "content": "hello" } ], "stream": true, "stream_options": { "include_usage": true, "continuous_usage_stats": true } }'
上述步骤中创建的 [应用名称]-qwen3-dynamo-vllm-pd 服务提供 HTTP API 端点。默认在 8000 端口,可以按照 OpenAI 兼容 API 方式去调用。示例如下:
curl localhost:8000/v1/chat/completions -H "Content-Type: application/json" -d '{ "model": "Qwen/Qwen3-235B-A22B", "messages": [ { "role": "user", "content": "In the heart of Eldoria, an ancient land of boundless magic and mysterious creatures, lies the long-forgotten city of Aeloria. Once a beacon of knowledge and power, Aeloria was buried beneath the shifting sands of time, lost to the world for centuries. You are an intrepid explorer, known for your unparalleled curiosity and courage, who has stumbled upon an ancient map hinting at ests that Aeloria holds a secret so profound that it has the potential to reshape the very fabric of reality. Your journey will take you through treacherous deserts, enchanted forests, and across perilous mountain ranges. Your Task: Character Background: Develop a detailed background for your character. Describe their motivations for seeking out Aeloria, their skills and weaknesses, and any personal connections to the ancient city or its legends. Are they driven by a quest for knowledge, a search for lost familt clue is hidden." } ], "stream": false, "max_tokens": 30 }'
您可以在应用对应 Helm 应用详情页 的 无状态负载 区域,单击关联创建的无状态负载名称,跳转到 无状态负载 页面,单击页面右上角控制台,登录应用对应 Pod,进行 API 调用。
开启 API 网关的认证鉴权功能时,需要在请求中添加认证 Token。示例如下:
说明
example.com
是步骤二中填写的域名。eyJhbGciOiJSUzI1NiIsImtp***
是步骤二中生成的 API Key。curl http://example.com/v1/chat/completions -X POST \ -H "Content-Type: application/json" \ -H "Authorization: Bearer eyJhbGciOiJSUzI1NiIsImtp*****" \ -d '{ "model": "Qwen/Qwen3-235B-A22B", "messages": [ {"role": "system", "content": "You are a helpful assistant."}, {"role": "user", "content": "Who won the world series in 2020?"} ] }'