基础组件介绍
平台基础架构

完整的平台包含:
- 机器的标准化;
- 分布式存储(单机可忽略)、k8s 集群、监控体系(prometheus/grafana);
- 基础能力(tf/pytorch/mxnet/volcano/ray 等分布式,nni/ray 超参搜索);
- 平台 web 部分(oa/权限/项目组、在线构建镜像、在线开发、pipeline 拖拉拽、超参搜索、推理服务管理等)。
组件说明(命名空间 - 组件对照)
| 命名空间 | 组件名 | 组件说明 |
|---|---|---|
| infra | kubeflow-dashboard-frontend | CubeStudio 平台的 web 前端,提供静态文件的访问 |
| infra | kubeflow-dashboard | CubeStudio 平台的 web 后端,提供后端 api 的访问 |
| infra | kubeflow-dashboard-schedule | 调度 CubeStudio 系统自带的调度任务,比如定时清理 |
| infra | kubeflow-dashboard-worker | 执行 CubeStudio 系统自带的调度任务,比如定时清理 |
| infra | kubeflow-watch | 监控 CubeStudio 平台中的任务,发起通知和信息更新 |
| infra | mysql | 平台元数据的存储 |
| infra | redis | 平台缓存,和异步任务对接 |
| kube-system | kubernetes-dashboard-cluster | k8s 中 pod 的管理界面 |
| kube-system | dashboard-cluster-metrics-scraper | k8s pod 管理界面上的 pod 资源使用情况插件 |
| kube-system | nvidia-device-plugin-daemonset | k8s 中使用机器 gpu 驱动和设备的插件 |
| kube-system | hami-daemonset | k8s 中使用机器 gpu 虚拟化驱动和设备的插件 |
| kube-system | rdma-shared-dp-ds | k8s 中使用机器 rdma 网络和设备的插件 |
| kube-system | metrics-server | 集群资源使用情况的指标采集,用于 hpa |
| kube-system | kubeflow-prometheus-adapter | 将 prometheus 采集的指标转化为可用于 hpa 的指标 |
| kubeflow | labelstudio | 标注平台 |
| kubeflow | postgres | postgres 数据库,labelstudio 平台的元数据存储 |
| kubeflow | train-operator | tf/pytorch/xgb/mxnet/mpi 等分布式训练 operator |
| kubeflow | workflow-controller | argo 云原生调度 |
| kubeflow | minio | 对象存储 |
| kubeflow | volcano-* | volcano 分布式和批调度 |
| istio-system | istio-ingressgateway | 入口网关,代理所有外部访问 |
| istio-system | 其他 | istio 基础组件 |
| monitoring | dcgm-exporter | gpu 机器资源监控 |
| monitoring | node-exporter | cpu 机器资源监控 |
| monitoring | prometheus-k8s | 监控数据存储服务 |
| monitoring | grafana | 监控数据可视化 |
| jupyter | docker-* | 用户创建的在线构建镜像的 pod |
| jupyter | 其他 | 用户创建的在线 notebook |
| service | 全部 | 用户创建的内部服务和推理服务 |
| pipeline | 全部 | 用户创建的 pipeline 任务 |
| automl | 全部 | 用户创建的超参数搜索任务 |
说明:volcano 在本仓库的
install/kubernetes/volcano/volcano-development.yaml中部署到kubeflow命名空间;另有install/README.md中将其标注为volcano-system,以实际部署清单为准。
对开源软件的修改情况(版本与协议)
下表版本已对照
install/kubernetes/all_image.py与各组件部署 yaml 核实,并标注纠正项。
| 序号 | 名称 | 版本 | 软件类型 | 是否修改 | 开源协议 | 协议地址 |
|---|---|---|---|---|---|---|
| 1 | Redis | 7.4 | 开源软件 | 未修改,官方镜像商用 | BSD-3-Clause | https://github.com/redis/redis |
| 2 | Kubernetes Dashboard | v2.6.1 | 开源软件 | 未修改,官方镜像商用 | Apache-2.0 | https://github.com/kubernetes/dashboard |
| 3 | NVIDIA Device Plugin | v0.17.1 | 开源软件 | 未修改,官方镜像商用 | Apache-2.0 | https://github.com/NVIDIA/k8s-device-plugin |
| 4 | Hami | v2.8.0 | 开源软件 | 未修改,官方镜像商用 | Apache-2.0 | https://github.com/Project-HAMi/HAMi |
| 5 | RDMA Shared DP DS | v1.5.1 | 开源软件 | 未修改,官方镜像商用 | Apache-2.0 | https://github.com/Mellanox/k8s-rdma-shared-dev-plugin |
| 6 | Prometheus Adapter | v0.9.1 | 开源软件 | 未修改,官方镜像商用 | Apache-2.0 | https://github.com/kubernetes-sigs/prometheus-adapter |
| 7 | Training Operator | v1-8a066f9 | 开源软件 | 未修改,官方镜像商用 | Apache-2.0 | https://github.com/kubeflow/training-operator |
| 8 | Workflow Controller | v3.4.3 | 开源软件 | 未修改,官方镜像商用 | Apache-2.0 | https://github.com/argoproj/argo-workflows |
| 9 | MinIO | RELEASE.2023-04-20T17-56-55Z | 开源软件 | 未修改,官方镜像商用 | AGPL-3.0 | https://github.com/minio/minio |
| 10 | Volcano | v1.14.0 | 开源软件 | 未修改,官方镜像商用 | Apache-2.0 | https://github.com/volcano-sh/volcano |
| 11 | Istio | 1.15.0 | 开源软件 | 未修改,官方镜像商用 | Apache-2.0 | https://github.com/istio/istio |
| 12 | DCGM Exporter | 3.1.7-3.1.4 | 开源软件 | 未修改,官方镜像商用 | Apache-2.0 | https://github.com/NVIDIA/dcgm-exporter |
| 13 | Node Exporter | v1.5.0 | 开源软件 | 未修改,官方镜像商用 | Apache-2.0 | https://github.com/prometheus/node_exporter |
| 14 | Prometheus | v2.27.1 | 开源软件 | 未修改,官方镜像商用 | Apache-2.0 | https://github.com/prometheus/prometheus |
| 15 | Grafana | 9.5.20 | 开源软件 | 未修改,官方镜像商用 | AGPL-3.0 | https://github.com/grafana/grafana |
| 16 | PostgreSQL | 11.5 | 开源软件 | 未修改,官方镜像商用 | PostgreSQL | https://www.postgresql.org/about/licence/ |
| 17 | Label Studio | 见下方待核实 | 开源软件 | 部分修改 | Apache-2.0 | https://github.com/HumanSignal/label-studio |
⚠️ 已按代码纠正:
- Grafana:原文写 9.1.5,实际镜像为
grafana/grafana:9.5.20(install/kubernetes/all_image.py、install/kubernetes/prometheus/grafana/grafana-dp.yml)。- Volcano:原文「基础组件依赖」小节写 1.7.0,实际镜像为
volcanosh/vc-webhook-manager:v1.14.0(install/kubernetes/volcano/volcano-development.yaml),与本表 1.14.0 一致,已统一为 v1.14.0。⚠️ 待核实:Label Studio 版本。原文表与依赖小节均写 1.13.2,但
install/kubernetes/labelstudio/labelstudio.yaml:40实际使用自定义镜像 tagccr.ccs.tencentyun.com/cube-studio/label-studio:20260701,行内注释为heartexlabs/label-studio:1.10.1。具体基线版本请确认。
基础组件依赖
mysql / postgresql
- 版本:mysql
8.0.32(install/kubernetes/mysql/deploy.yaml)、postgres11.5; - 功能:CubeStudio 的基础元数据存储;
- 依赖关系:CubeStudio 自研 pod(infra/kubeflow-dashboard-* 的 pod)依赖数据库;企业自己准备 mysql/postgresql,并不作为商业版交付,可自行配置地址;
- 配置位置:infra/kubeflow-dashboard-* pod 的环境变量,可修改 mysql 地址,默认为 infra/mysql 的 service;
- 注意:开发者需自主完成 mysql 的高可用和按日备份。
redis
- 版本:redis
7.4(install/kubernetes/redis/redis.yaml); - 功能:CubeStudio 的缓存数据存储、异步任务的中间队列和结果存储;
- 依赖关系:CubeStudio 自研 pod(infra/kubeflow-dashboard-*)依赖 redis,企业可自己准备 redis;
- 配置位置:infra/kubeflow-dashboard-* pod 的环境变量,可修改 redis 地址,默认为 infra/redis 的 service;
- 注意:redis 版本太低可能无法支持依赖的功能,建议按依赖版本准备。
kubernetes-dashboard / metrics-scraper
- 版本:kubernetes-dashboard
v2.6.1、metrics-scraperv1.0.8; - 功能:CubeStudio 查看 pod 日志、搜索 pod、查看 service 和 node 基础信息等;metrics-scraper 用于在 k8s dashboard 中查看 pod 的资源使用情况;
- 依赖关系:CubeStudio 自研 pod(infra/kubeflow-dashboard-*)依赖 k8s dashboard;
- 配置位置:infra/kubeflow-dashboard-config 的 configmap,即 CubeStudio 的 config.py 配置文件;
- 注意:包含 user 版本和 cluster 版本的 k8s dashboard,可自行控制不同用户权限。
nvidia-device-plugin / dcgm-exporter / rdma-shared-dp-ds
- 版本:nvidia-device-plugin
v0.17.1、dcgm-exporter3.1.7-3.1.4、rdma-shared-dp-dsv1.5.1; - 功能:device-plugin 为 k8s 中调度 gpu 机器的 gpu 设备(cpu 机器不使用);dcgm-exporter 为 gpu 监控;rdma-shared-dp-ds 为 ib 交换机或 roce 网络对应的 k8s 插件;
- 依赖关系:gpu 机器初始化的必备条件;不同 gpu 厂商使用的插件和监控组件不同,需要厂商提供;
- 配置位置:infra/kubeflow-dashboard-config 的 configmap,即 CubeStudio 的配置文件;
- 注意:对于不同厂商的 AI 加速卡,需要不同的 gpu 插件、虚拟化插件和监控插件。
⚠️ 待核实:rdma-shared-dp-ds 版本。镜像为自定义 tag
ccr.ccs.tencentyun.com/cube-studio/k8s-rdma-shared-dev-plugin:mellanox(install/kubernetes/rdma/mellanox/daemonset.yaml),无法直接确认是否对应上游 v1.5.1。
hami
- 版本:
2.8.0(默认install/kubernetes/gpu/vgpu/vgpu.yaml使用projecthami/hami:v2.8.0;旧 k8s 版本变体 vgpu-k8s1.21.yaml / vgpu-k8s1.25.yaml 使用 2.3.x); - 功能:k8s 中以虚拟化方式调度 gpu 机器的 gpu 设备,目前支持英伟达 gpu(cpu 机器不使用);
- 依赖关系:虚拟化调用 gpu 的一种方式,也可在驱动层面做虚拟化;不同 gpu 厂商使用的插件不同,需要厂商提供虚拟化方法;
- 配置位置:infra/kubeflow-dashboard-config 的 configmap,即 CubeStudio 的配置文件;
- 注意:该组件是 cuda 层面做虚拟化的一种方式,最好每次只新建一个 pod。
labelstudio
- 版本:见上方「待核实」(原文标 1.13.2);
- 功能:标注平台;
- 依赖关系:CubeStudio 中仅做跳转链接;
- 配置位置:
myapp/views/home.py中的菜单配置(约home.py:251-255,菜单标题「标注平台」,menu_type: out_link,url/labelstudio/user/login/); - 注意:label studio 标注平台可配置账号密码及注册登录方式,可自行设置。
⚠️ 已按代码纠正:原文写「myapp/home.py 中的菜单配置」,当前仓库无
myapp/home.py;标注平台菜单实际定义在myapp/views/home.py(home.py:251-255)。
postgresql(labelstudio 元数据)
- 版本:
11.5(install/kubernetes/labelstudio/postgresql.yaml); - 功能:标注平台的元数据存储;
- 依赖关系:labelstudio 依赖 postgresql,CubeStudio 未直接依赖;
- 配置位置:kubeflow/label-studio 的 pod 环境变量中指定 postgresql 地址;后端读取标注库地址的配置项为
LABEL_STUDIO_DAT(myapp/config.py:1119,默认postgresql+psycopg2://postgres:postgres@postgresql.kubeflow:5432/labelstudio)。
training-operator
- 版本:
v1-8a066f9(install/kubernetes/all_image.py); - 功能:tf/pytorch/xgb/mxnet/mpi 等分布式训练;
- 依赖关系:相关分布式任务模板都依赖这个组件;CubeStudio 并没有直接依赖;
- 配置位置:
job-template/job/下 tf、pytorch、mxnet(deep-learning-framework)、mpi 等相关任务模板(详见 05-任务模板)。
volcano
- 版本:
v1.14.0(install/kubernetes/volcano/volcano-development.yaml,volcanosh/vc-webhook-manager:v1.14.0); - 功能:volcano 相关任务、nni 超参搜索、deepspeed 等分布式训练所依赖的底层分布式/批调度框架;
- 依赖关系:volcano 分布式任务、媒体分布式数据处理任务模板依赖该组件,nni 超参搜索也依赖它进行分布式集群部署;
- 配置位置:CubeStudio 代码中使用 vcjob 的 yaml 直接对接 k8s 集群,再由 volcano 解析和运行(CRD 见 平台架构-Kubernetes基础);
- 注意:多个地方使用(代码、模板任务等)。
workflow-controller、minio
- 版本:workflow-controller
v3.4.3、minioRELEASE.2023-04-20T17-56-55Z; - 功能:pipeline 的云原生调度;
- 依赖关系:CubeStudio 使用 workflow 运行 pipeline,workflow 使用 minio 作为中间日志和数据的存储;CubeStudio 也有定时任务清理过期 worker 和 minio 中过期文件;
- 配置位置:CubeStudio 代码中直接创建 workflow 的 yaml 并提交到目标 k8s 集群,然后监听 workflow 状态。
istio-ingressgateway / istiod
- 版本:
1.15.0; - 功能:ingressgateway 负责服务流量代理,istiod 为 istio 的控制面;
- 依赖关系:所有 notebook、nni 超参搜索使用 istio 做前缀代理;grafana/k8s-dashboard/CubeStudio 前后端、所有推理服务和内部服务都使用 istio-ingressgateway 做前缀处理;推理服务在 prometheus 中的统计也由 istio ingressgateway 提供;
- 配置位置:
install/kubernetes/virtual.yaml配置了基础组件的代理,其他在代码中直接对接 virtualservice 的 yaml; - 注意:全局流量入口均在 istio ingressgateway。
prometheus / node-exporter / grafana / prometheus-adapter
- 版本:prometheus
v2.27.1、node-exporterv1.5.0、grafana9.5.20、prometheus-adapterv0.9.1; - 功能:监控的生态组件;在 pipeline 拖拉拽界面可快速查看任务资源使用情况,在推理服务界面查看服务负载和 gpu 监控,在整体资源查看机器/pod 监控以及集群整体使用情况;
- 依赖关系:CubeStudio 只依赖 grafana 进行监控数据的显示,需要包含指定的几个页面;
- 配置位置:infra/kubeflow-dashboard-config 的 configmap,即 CubeStudio 的配置文件;
- 注意:如果是多 k8s 集群,注意每个集群的 prometheus 存储数据不要用同一个目录。