基础组件介绍 - tencentmusic/cube-studio GitHub Wiki

平台基础架构

输入图片说明

完整的平台包含

  • 1、机器的标准化
  • 2、分布式存储(单机可忽略)、k8s集群、监控体系(prometheus/efk/zipkin)
  • 3、基础能力(tf/pytorch/mxnet/valcano/ray等分布式,nni/katib超参搜索)
  • 4、平台web部分(oa/权限/项目组、在线构建镜像、在线开发、pipeline拖拉拽、超参搜索、推理服务管理等)

组件说明

命名空间 组件名 组件说明
infra kubeflow-dashboard-frontend cube-studio平台的web前端
infra kubeflow-dashboard cube-studio平台的web后端
infra kubeflow-dashboard-schedule 用来调度cube-studio系统自带的调度任务,比如定时清理
infra kubeflow-dashboard-worker 用来执行cube-studio系统自带的调度任务,比如定时清理
infra kubeflow-watch 用来监控cube-studio平台中的任务,发起通知和信息更新
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 gpu-manager-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 spark-operator spark serverless 分布式计算
kubeflow train-operator tf/pytorch/xgb/mxnet/mpi等分布式
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任务

基础组件依赖

mysql/postgresql

版本: mysql:8.0.32
功能:cube-studio的基础元数据存储
依赖关系:cube-studio自研pod依赖数据库,依赖pod为infra/kubeflow-dashboard-的pod,企业自己准备mysql/postgresql数据库,并不作为企业版交付,可自行配置mysql/postgresql地址。
配置位置:infra/kubeflow-dashboard-
pod的环境变量,可以修改mysql的地址,默认为infra/mysql的service
注意:开发者需自主自主完成mysql的高可用和按日备份

redis

版本:redis:6.2.12
功能:cube-studio的缓存数据存储,cube-studio异步任务的中间队列和异步任务的结果存储
依赖关系:cube-studio自研pod依赖redis数据库,依赖pod为infra/kubeflow-dashboard-的pod,企业可自己准备redis
配置位置:infra/kubeflow-dashboard-
pod的环境变量,可以修改redis的地址,默认为infra/redis的service
注意:redis太低版本可能无法对应依赖的功能,建议按照依赖的版本准备redis

kubernetes-dashboard/metrics-scraper

版本:kubernetes-dashboard:v2.6.1,metrics-scraper:v1.0.8
功能:cube-studio查看pod 日志,搜索pod,查看 service和node基础信息等。metrics-scraper组件作用是在k8s dashboard中能看到pod的资源使用情况
依赖关系:cube-studio自研pod依赖k8s dashboard, 依赖pod为infra/kubeflow-dashboard-*的pod
配置位置:infra/kubeflow-dashboard-config 的 configmap, 也就是cube-studio的config.py的配置文件。
注意:包含user1版本和cluster版本的k8s dashboard,可自行控制不同的用户权限,避免可能产生的问题

nvidia-device-plugin/dcgm-exporter

版本:nvidia-device-plugin v0.11.0, dcgm-exporter 3.1.7-3.1.4
功能:device-plugin 为 k8s中调度gpu机器的gpu设备。在cpu机器上不使用。 dcgm-exporter为gpu的监控
依赖关系:gpu机器初始化的必备条件。不通gpu厂商使用的插件和监控组件是不一样的,需要gpu厂商提供。
配置位置:infra/kubeflow-dashboard-config 的 configmap, 也就是cube-studio的配置文件。
注意:对于不同厂商的AI加速卡,需要不同的gpu插件,虚拟化插件,和监控插件

gpu-manager-daemonset

版本:1.15
功能:k8s中虚拟化方式调度gpu机器的gpu设备,目前支持英伟达gpu,在cpu机器上不使用。
依赖关系:虚拟化调用gpu的一种方式,也可以在驱动层面做虚拟化。不通gpu厂商使用的插件是不一样的,需要gpu厂商提供虚拟化方法。
配置位置:infra/kubeflow-dashboard-config 的 configmap, 也就是cube-studio的配置文件。
注意:该组件是cuda层面做虚拟化的一种方式,最好每次只新建一个pod。

labelstudio

版本:1.7.3
功能:标注平台
依赖关系:cube-studio中仅做跳转链接
配置位置:myapp/home.py中的菜单配置
注意:label studio标注平台,可以配置账号密码,以及账号密码的注册登录方式,可自行设置

postgresql

版本:11.5
功能:标注平台的元数据存储
依赖关系:labelstudio依赖postgresql,cube-studio未直接依赖
配置位置:kubeflow/label-studio 的pod的环境变量有指定postgresql的地址
注意:

spark-operator

版本:1.3.8-3.1.1
功能:在k8s中快速部署一个由k8s作为调度器的spark集群
依赖关系:spark serverless 任务模板依赖这个operator来进行创建spark集群。如果不需要临时创建spark集群,可以不需要
配置位置:job-template/job/spark
注意:当前版本的spark-operator,没法传递挂载配置到spark分布式worker中,所以无法为spark worker挂载个人子目录

train-operator

版本:v1-8a066f9
功能:tf/pytorch/xgb/mxnet/mpi等分布式训练
依赖关系:tf/pytorch/xgb/mxnet/mpi相关的分布式任务模板都依赖这个组件。cube-studio并没有直接依赖这个组件
配置位置:job-template/job/下tf、pytorch、mxnet、mpi等相关任务模板
注意:

volcano

版本:1.7.0
功能:volcano相关任务,nni超参搜索、deepspeed等分布式训练所依赖的底层分布式框架
依赖关系:volcano分布式任务,媒体分布式数据处理任务模板依赖这个组件,nni超参搜索也依赖这个组件进行分布式集群的部署。
配置位置:cube-studio代码里面使用vsjob的yaml来直接对接k8s集群。再由volcano来解析和运行
注意:多个地方使用,代码,模板任务等

workflow-controller、minio

版本:workflow 3.4.3 minio 2023-04-20T17-56-55Z
功能:pipeline的云原生调度
依赖关系:cube-studio使用workflow运行pipeline,workflow使用minio作为中间日志和数据的存储。cube-studio也有定时任务清理过期worker和清理过期minio中的文件
配置位置:cube-studio代码中直接创建workflow的yaml,并提交到控制的k8s集群,然后监听workflow的状态信息
注意:

istio-ingressgateway/istiod

版本:1.15.0
功能:ingressgateway服务流量代理, istiod为istio的控制面
依赖关系:所有的notebook都使用istio进行前缀代理,所有的nni超参搜索都使用istio做前缀代理,grafana/k8s-dashboard/cube-studio前后端/都使用istio-ingressgateway都使用istio做前缀处理,所有的推理服务和内部服务,都使用istio做前缀处理。推理服务的统计在primetheus,也是由istio ingressgateway来提供
配置位置:install/kubernetes/virtual.yaml配置了基础组件的代理,其他的在代码中直接对接virtual service的yaml
注意:全局的流量入口均在istio ingressgateway

prometheus/node-exporter/grafana

版本:prometheus:2.27.1,node-exporter:v1.5.0,grafana:9.1.5
功能:监控的生态组件,在pipeline拖拉拽界面可以快速查看任务的资源使用情况,在推理服务界面,可以查看服务的负载界面和gpu的监控界面,在整体资源可以查看机器的监控和pod的监控,以及集群整体的使用情况
依赖:cube-studio只依赖grafana进行监控数据的显示,需要包含指定的几个页面。
配置位置:infra/kubeflow-dashboard-config 的 configmap, 也就是cube-studio的配置文件。
注意:如果是多k8s集群,注意每个集群的prometheus的存储数据不要用同一个目录