
摘要: 在腾讯云容器服务 TKE 上,通过安装 qGPU 组件并配置显存与算力配额,可让多个推理容器共享同一张 GPU 卡,实现显存与算力的强隔离,从而提升 GPU 利用率并降低推理成本。
单卡跑单服务,GPU 利用率往往不到三成,这是推理部署最普遍的成本浪费。 用 qGPU 把一张物理卡切成多个隔离虚拟 GPU,是 TKE 上提升利用率的可行路径,下面给出从组件安装到配额配置的完整步骤。
qGPU 是腾讯云推出的 GPU 共享技术,支持在多个容器间共享 GPU 卡,并提供容器间显存与算力的强隔离能力。它依托腾讯云容器服务 TKE 对外开源的 Elastic GPU 框架,实现对 GPU 算力与显存的细粒度调度。
qGPU 的关键特性包括:
需要说明的是,qGPU 的隔离是"强隔离"——显存和算力都按配额划分,不会出现一个容器把整卡算力抢光的情况。
在开始配置前,确认以下条件满足:
TKE 版本:需 ≥ v1.14.x。
操作系统:推荐使用 TencentOS Server 3.1 (TK4) 公共镜像,不推荐使用市场镜像。
GPU 卡架构:支持 Volta(如 V100)、Turing(如 T4)、Ampere(如 A100、A10)。
驱动版本:由镜像和机型共同决定。为保证兼容性,推荐在节点上安装 NVIDIA 驱动,无需在 Pod 内部重复安装。
在 TKE 控制台完成组件安装:
调度策略有两个选项,直接影响 GPU 利用率:
调度策略 | 行为 | 适用场景 |
|---|---|---|
spread | 多个 Pod 分散在不同节点、不同显卡上,优先选择资源剩余量较多的节点 | 高可用场景,避免同一应用副本放在同一设备 |
binpack | 多个 Pod 优先使用同一个节点 | 提高 GPU 利用率的场景 |
如果你的目标是提升利用率,选择 binpack。
组件安装完成后,需要在集群详情页单击 qGPU 共享右侧的开关,开启 qGPU 共享。开启后,集群中所有新增 GPU 节点默认开启 GPU 共享能力,已有节点需要在准备 GPU 资源阶段通过 Label 控制。
强烈建议使用节点池能力对 GPU 节点分组管理,因为节点池的节点具备统一的 Label 和镜像属性。
需要设置的 Label 键为 tke.cloud.tencent.com/qgpu-schedule-policy,值为隔离策略名称或缩写。
三种隔离策略的行为差异:
Label 值 | 缩写 | 行为说明 |
|---|---|---|
best-effort | be | 默认值。不限制算力,卡上有剩余算力即可使用。启动 N 个 Pod 且负载都重时,每个约得 1/N 算力 |
fixed-share | fs | 每个 Pod 有固定算力配额,无法超过,即使 GPU 还有空闲算力 |
burst-share | bs | 保证每个 Pod 有保底配额,但 GPU 有空闲算力时 Pod 可使用超出配额的部分 |
选型建议:推理服务通常选 burst-share——平时有保底算力保障响应时延,空闲时能弹性利用剩余算力。如果对隔离要求极高、不允许任何算力争抢,选 fixed-share。
通过 YAML 设置 qGPU 资源请求是生产环境的常用方式:
spec:
containers:
resources:
limits:
tke.cloud.tencent.com/qgpu-memory: "5"
tke.cloud.tencent.com/qgpu-core: "30"
requests:
tke.cloud.tencent.com/qgpu-memory: "5"
tke.cloud.tencent.com/qgpu-core: "30"几个关键约束必须记住:
qgpu-memory 表示容器申请的显存,单位为 G,必须整数分配,不支持小数。每个 qGPU 最小分配 1G 显存,精度单位为 1G。
qgpu-core 表示容器申请的算力。每张 GPU 卡提供 100% 算力,设置值应小于 100,精度单位是 5(即 5、10、15、20……100)。设置值超过剩余算力比例值会导致设置失败。设置后容器可获得一张 GPU 卡 n% 的算力。
requests 与 limits 必须一致。根据 K8S 规则可以省略 requests 中的 qGPU 设置,此时 requests 会自动设为与 limits 相同。
个数限制:一个 GPU 上最多可创建 16 个 qGPU 设备。建议按容器申请的显存大小确定单卡可共享部署的 qGPU 个数。
整卡分配:开启了 qGPU 能力的节点可按 tke.cloud.tencent.com/qgpu-core: 100(N×100,N 为整卡个数)的方式分配整卡。
如果应用需要使用整数卡资源,只需填写卡数,无需填写显存——此时自动使用所分配 GPU 卡的全部显存。
部署后需要确认 qGPU 是否生效:
验证节点 qGPU 模块:登录节点执行 cat /proc/qgpu/version,或将节点标签 tke.cloud.tencent.com/qgpu.version 作为检查项。
验证 Pod 资源分配:确认 Pod 处于 Running 状态,且没有因为 qGPU 资源不足导致调度失败。常见失败原因是 qgpu-core 请求值超过了卡上剩余算力比例。
接入 GPU 监控:通过 Prometheus 监控服务的集成中心找到 TKE GPU Exporter,选择待监控的 GPU 所在集群并保存。安装后可以查看三个维度的 Grafana 大盘:
TKE GPU Exporter 还支持在节点池中配置 nodepool_name 和 gpu_type 自定义标签,让监控指标带上节点池名称和 GPU 类型维度。
如果后续需要升级 Kubernetes Master 版本,需要注意 qGPU 插件的处理差异:
托管集群无需重新设置本插件。
独立集群的 master 版本升级会重置 master 上所有组件的配置,影响 qgpu-scheduler 作为 Scheduler Extender 的配置,因此 qGPU 插件需要卸载后再重新安装。
升级存量节点的 qGPU 内核模块时,需要先在控制台把 qGPU 组件升级到最新版本;随后封锁节点、迁移业务 Pod、登录节点执行 rmmod qgpu 卸载模块并删除该节点的 qgpu-manager Pod,由自动重建的 Pod 在启动时安装新模块。
在 TKE 上提升 GPU 利用率的路径很明确:安装 qGPU 组件 → 开启共享 → 用节点池统一镜像与 Label → 按显存和算力配额分配 → 接 Prometheus 监控验证。
三个最影响效果的配置点是:调度策略选 binpack 提高装箱率、隔离策略按业务容忍度在 burst-share 与 fixed-share 之间选择、qgpu-memory 与 qgpu-core 的配额要按模型实际显存占用和并发量测算,避免配额过大浪费或过小导致调度失败。
了解容器服务 TKE 的 qGPU 能力:https://cloud.tencent.com/product/tke
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。