CubeStudio 是一款国产化、云原生的一站式开源人工智能平台,同时覆盖传统机器学习、深度学习与大模型全链路(MLOps / MaaS / 算力调度 / 训推平台),开源协议 MIT,开源免费商用,开源版本已有数千家企业私有化部署。平台提供多租户与算力纳管调度、算力租赁与 Token 中转站、拖拉拽 Pipeline 任务流编排、多机多卡分布式训练、超参搜索、推理服务、vGPU 虚拟化、云边端协同与边缘计算、图文音多模态自动化标注、大模型 SFT 微调 / 奖励模型 / 强化学习训练、vLLM / Ollama / MindIE 大模型多机推理、私有知识库 / LLMOps / 智能体、AI 模型市场,以及从数据到上线的全流程模型部署。原生适配昇腾、寒武纪、海光、摩尔线程、沐曦等国产异构算力与 x86 / ARM CPU 架构,支持 IB / RoCE / RDMA 高速网络及信创私有化、内网离线部署。
官网:www.cubestudio.vip | GitHub:github.com/data-infra/… | Gitee:gitee.com/data-infra/…
关键词:CubeStudio、cube-studio、vGPU、GPU 虚拟化、GPU 切分、GPU 共享、HAMi、显存隔离、算力切分、nvidia.com/vgpu、gpumem-percentage、Kubernetes GPU、device-plugin、GPU 利用率、MLOps、Prometheus 监控、降本增效
GPU 是 AI 平台最贵的资源,而实际场景中大量任务(Notebook 调试、小模型推理、教学实验)根本吃不满一张整卡——独占分配的结果就是利用率长期不足 30%。vGPU 虚拟化把一张物理 GPU 切分给多个任务共享,显存与算力按比例隔离,是提升 GPU 利用率、降低算力成本最直接的手段。
本文介绍 CubeStudio 的 vGPU 方案:基于第四范式开源的 HAMi(CUDA 层拦截)实现切分,从部署、配置修改、监控接入到平台侧调度机制,全程可复现。
一、方案概览
| 项目 | 说明 |
|---|---|
| 虚拟化方案 | HAMi(第四范式开源,CUDA 层拦截),资源名 nvidia.com/vgpu |
| 切分维度 | 显存按百分比切分 + 算力核按百分比切分 |
| 超分策略 | 默认关闭显存超分(devicememoryscaling: 1),只做隔离切分,稳定优先 |
| 生效范围 | 打了 vgpu: "true" 标签的节点 |
| 用户体验 | 在 Notebook / Pipeline / 推理服务中直接申请小数卡(如 0.5 卡),平台自动转换调度 |
| 监控 | HAMi 调度量与 Pod 实际使用情况接入 Prometheus / Grafana |
平台侧配置(install/docker/config.py):
# vgpu 的类型方式
VGPU_RESOURCE = {
"vgpu": "nvidia.com/vgpu", # 第四范式解决方案虚拟化方法,cuda 层拦截
}
VGPU_DRIVE_TYPE = "vgpu" # 第四范式解决方案
二、部署步骤
下载 HAMi chart 包:
wget https://githubfast.com/Project-HAMi/HAMi/releases/download/v2.8.0/hami-2.8.0.tgz
用 helm template 渲染出 vgpu.yaml:
helm template vgpu hami \
--set resourceName=nvidia.com/vgpu \
--set scheduler.kubeScheduler.imageTag=v1.28.15 \
--set version=v2.8.0 \
--set scheduler.overwriteEnv="false" \
-n kube-system > vgpu.yaml
resourceName需与平台VGPU_RESOURCE中的资源名一致;scheduler.kubeScheduler.imageTag需与集群 K8s 版本匹配。开源仓库install/kubernetes/gpu/vgpu/下已提供渲染好的样例:vgpu.yaml(HAMi 2.8.0),以及按 K8s 版本区分的vgpu-k8s1.21.yaml、vgpu-k8s1.25.yaml。
三、修改 vgpu.yaml(5 处调整)
- 关闭显存超分,只做切分:
"devicememoryscaling": 1(不做显存虚拟化超分,仅做隔离); - 节点选择器:
nodeSelector改为vgpu: "true"(仅在打标节点启用); - 命名空间:添加
namespace: kube-system; - 服务暴露:服务类型改为
type: ClusterIP并去掉nodePort; - NodePort 服务统一改为 ClusterIP,同时注释掉
externalTrafficPolicy: Local。
四、接入 Prometheus 监控
为 vgpu-hami-scheduler 服务添加注解(同步调度量信息,端口 9395):
annotations:
prometheus.io/scrape: "true"
prometheus.io/port: '9395'
prometheus.io/path: /metrics
为 vgpu-hami-device-plugin-monitor 服务添加注解(同步 Pod 实际使用情况,端口 9394):
annotations:
prometheus.io/scrape: "true"
prometheus.io/port: '9394'
prometheus.io/path: /metrics
接入后可采集到的核心指标(节选):
# 每张卡已分配的算力核数(百分比)
GPUDeviceCoreAllocated{deviceidx="0",deviceuuid="GPU-xxxx",zone="vGPU"} 90
# 每张卡的算力上限
GPUDeviceCoreLimit{...}
五、Bug 修复:补充 RBAC 权限
为 vgpu-hami-scheduler 角色添加 volumeattachments 权限,否则调度器会因权限不足报错:
# 添加 volumeattachments 权限
- apiGroups: ["storage.k8s.io"]
resources: ["volumeattachments"]
verbs: ["get", "list", "watch"]
六、平台侧调度机制:小数卡是怎么生效的
部署好 HAMi 只是第一步,真正让用户"无感使用"的是平台的调度转换层。用户在 Notebook / Pipeline / 推理服务中申请小数卡(如 0.5)时,CubeStudio 按 VGPU_DRIVE_TYPE 自动转换为对应的 K8s 资源请求:
| 驱动类型 | 申请 N 卡(0 < N < 1)的资源转换 | 对应方案 |
|---|---|---|
vgpu(默认) | nvidia.com/gpumem-percentage: N×100 + nvidia.com/gpucores: N×100 | HAMi:显存与算力核按百分比双维度切分 |
mgpu | Pod 注解 tencent.com/vcuda-core-limit: N×100 | 腾讯 vcuda(GPU Manager)方案 |
| 其他自定义 | 按 VGPU_RESOURCE 映射的资源名申请 | 预留扩展,可接入其它虚拟化方案 |
两个容易被忽视但很关键的细节:
- 0 卡隔离:申请 0 卡的容器会自动注入"可见 GPU 置空"的环境变量——否则 GPU 镜像默认能看到并占用节点上全部显卡;
- 整卡独占防碎片:申请 ≥1 整卡时走
gpu: "true"节点选择,调度策略尽量聚集占卡,避免整机的卡被零碎占用导致大任务无卡可用。
七、适用场景与收益
- 开发调试:多人共享一张卡跑 Notebook,开发期显存需求小,切分后一张 A100 可同时服务多名算法工程师;
- 小模型推理:单服务吃不满整卡时按 0.2 / 0.5 卡部署,同卡混部多个推理服务;
- 教学 / 实验环境:按人头切分配额,成本可控;
- 搭配平台能力:与 GPU 独占 / 共享 / 禁用模式、计量计费、算力租赁组合,实现 GPU 资源的精细化运营。
了解更多
CubeStudio 采用 MIT 开源协议,开源免费商用并支持源码交付与二次分发,开源版本已有数千家企业私有化部署。
- 官网与在线文档:www.cubestudio.vip
- 开源仓库(GitHub):github.com/data-infra/…
- 开源仓库(Gitee):gitee.com/data-infra/…
- HAMi 配置项参考:github.com/Project-HAM…