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、多机部署、集群扩容、多集群、multi cluster、多资源组、resource group、org标签、节点标签、node label、CLUSTERS、kubeconfig、kubernetes-config、kubeflow-watch、算力均衡、adjust_node_resource、share标签、主集群、远程集群、多租户、算力调度
AI 平台的算力规模是慢慢长起来的:先一台机器起步,然后加机器扩成多机集群,业务多了要纳管好几个 K8s 集群,团队多了还要把算力按项目组切开、互不抢占。CubeStudio 的调度体系正是围绕这三层设计的——而且全部靠机器 label 驱动,机器由平台统一调度,用户不直接碰。本文把单机 → 多机 → 多集群 → 多资源组的扩展路径讲清。
一、一切的基础:机器 label
CubeStudio 用节点 label 决定「哪台机器干什么活」。这套 label 在部署脚本 install/kubernetes/start.sh:22 的 kubectl label node 命令里能看到完整集合:
业务角色(决定跑什么负载):
| label | 含义 |
|---|---|
cpu=true / gpu=true / vgpu=true | CPU / GPU / vGPU 机器 |
train=true | 可跑训练任务 |
notebook=true | 可跑 Notebook |
service=true | 可跑推理服务 |
rdma=true | 走 RDMA 高速网络 |
org=xx | 归属资源组(默认 org=public) |
gpu-type=xx | GPU 型号(如 gpu-type=A100,配算力时可写 2(T4)) |
控制组件:mysql / redis / kubeflow-dashboard / kubeflow / istio / monitoring / logging 等,标记各基础服务部署在哪台机器。
理解了这套 label,后面三层扩展本质都是「加机器 + 打对标签 + 改配置」。
二、单集群多机:扩容三步
在主节点单机部署好之后扩容:
- 分布式存储先行:机器学习平台强依赖高 IO 分布式存储,需把分布式文件系统挂到每台机器的
/data/k8s/下(用 juicefs 则免此步)。原理见平台「算力统筹与分布式存储」文档。 - 初始化新机器:装 docker、拉代码,在新机器上
sh pull_rancher_images.sh拉 rancher 镜像、bash init_node.sh拉平台镜像。 - 加入集群并打标签:在 rancher web 里把新机器以 Worker 角色注册进集群(执行注册命令时加
--node-name 新机器内网ip),然后打上service=true、train=true、notebook=true、org=public以及按需的cpu=true/gpu=true/gpu-type=A100。
三、多集群:一个 Web 纳管多个 K8s
原理:每个集群都完整部署平台,但只保留一个 Web 端。有 Web 的叫「主集群」,其余为「远程集群」,由主集群统一调度。
关键步骤:
-
远程集群瘦身:删掉远程集群多余组件(web / mysql / redis / labelstudio / dashboard-cluster),只留被调度的算力。
-
共享存储与独立监控:主从集群挂同一分布式存储到
/data/k8s;但要给新集群的 Prometheus 建独立存储目录(如prometheus-cluster2)避免冲突。 -
注入 kubeconfig:把远程集群的 config 放进主集群
install/kubernetes/kubeconfig/(规范命名如dev1-kubeconfig),生成kubernetes-configconfigmap。注意这个 configmap 在infra、pipeline、automl三个命名空间都会被挂载(start.sh:143-150),新增集群后三个命名空间都要重建:for ns in infra pipeline automl; do kubectl delete configmap kubernetes-config -n $ns kubectl create configmap kubernetes-config --from-file=kubeconfig -n $ns done -
登记 CLUSTERS:在
config.py的CLUSTERS(结构见config.py:1359)里加集群信息,字段NAME/KUBECONFIG/HOST/可选SERVICE_DOMAIN:CLUSTERS = { "dev1": { "NAME": "dev1", "KUBECONFIG": '/home/myapp/kubeconfig/dev1-kubeconfig', "HOST": 'xx.xx.xx.xx', } } -
加 watch 组件:复制
infra/kubeflow-watch的 deployment(cube/base/deploy-watch.yaml),把环境变量ENVIRONMENT(deploy-watch.yaml:77-81)改成新集群名——每个集群要有自己的 watch 副本。 -
收尾:重存一遍仓库密钥(会在各集群命名空间生成 hubsecret);把新集群的 minio 地址指向主集群(改
workflow-controller-configmap)。
完成后在「整体资源」界面能看到各集群资源;再在项目组的扩展参数里指定 {"cluster": "dev1"},该项目组的 notebook/pipeline/service 就调度到指定集群。
四、多资源组:按项目组切算力
同一集群的算力可以再切成多个资源组,做法极简:给机器打 org=xx 标签,再在项目组里把资源组配成 xx,保存后该项目组成员就自动使用这批算力。这样不同团队/业务线互不抢占,配额清晰。
五、进阶:项目组间自动算力均衡
资源组切死了会浪费——空闲组的机器帮不到繁忙组。CubeStudio 提供了自动均衡任务 adjust_node_resource(schedules.py:1107):
- 原则:把「可共享的机器」从负载最低的项目组划给负载最高的项目组,同时保住每组的最小可用算力。
- 可共享判定:机器 label
share为true(缺省即true)且train=true(schedules.py:1121),cpu、gpu 分别核算。 - 应急划拨:某 pod 因资源不足 Pending 超过 300 秒(5 分钟),立即划资源过去并推送通知(
schedules.py:1141)。
该任务在
CELERYBEAT_SCHEDULE中默认注释未启用,需手动开启;启用后默认每 10 分钟均衡一次(crontab(minute='*/10'),config.py:653-655)。
小结
CubeStudio 的算力扩展是一条清晰的阶梯:机器 label 是原子能力,单集群多机靠加 Worker + 打标签,多集群靠 kubeconfig + CLUSTERS + watch 副本纳管,多资源组靠 org 标签切分,再用 adjust_node_resource 做组间弹性均衡。一套体系,从一台机器平滑长到多集群多租户的算力池。
了解更多
CubeStudio 采用 MIT 开源协议,开源免费商用并支持源码交付与二次分发,开源版本已有数千家企业私有化部署。
- 官网与在线文档:www.cubestudio.vip
- 开源仓库(GitHub):github.com/data-infra/…
- 开源仓库(Gitee):gitee.com/data-infra/…