目录

云原生机器学习平台cube-studio开源项目及代码简要介绍

云原生机器学习平台cube-studio开源项目及代码简要介绍

1. cube-studio介绍

云原生机器学习平台cube-studio介绍:

cube-studio是开源的云原生机器学习平台,目前包含特征平台,支持在/离线特征;数据源管理,支持结构数据和媒体标注数据管理;在线开发,在线的vscode/jupyter代码开发;在线镜像调试,支持免dockerfile,增量构建;任务流编排,在线拖拉拽;开放的模板框架,支持tf/pytorch/spark/ray/horovod/kaldi等分布式训练任务;task的单节点debug,分布式任务的批量优先级调度,聚合日志;任务运行资源监控,报警;定时调度,支持补录,忽略,重试,依赖,并发限制,定时任务算力的智能修正;nni,katib,ray的超参搜索;多集群多资源组,算力统筹,联邦调度;tf/pytorch/onnx模型的推理服务,serverless流量管控,tensorrt gpu推理加速,依据gpu利用率/qps等指标的 hpa能力,虚拟化gpu,虚拟显存等服务化能力。

目前cube-studio由腾讯音乐开源到github:

开源试用环境: 可自定义用户名与密码,若未注册过会自动注册

2. 开源代码框架与结构

平台控制端为fab-python框架,基于Flask框架,可先了解Flask框架相关

2.1 数据库相关代码

2.1.1 数据库结构

myapp/models 中存储数据库结构,如图所示

https://i-blog.csdnimg.cn/blog_migrate/901d0604febd3e839318c41c0dcc5004.png

2.1.2 数据库初始化

https://i-blog.csdnimg.cn/blog_migrate/2dd1ec4fef34b7e84745a3029030d0ba.png

如图所示,在cli.py中初始化写入数据库,对数据的操作通过db.session来进行

2.1.3 数据库的更新迭代

迭代版本文件在myapp/migrations/versions

1、先使用myapp db upgrade命令,将数据库依据versions目录下的接口更新到最新,

2、然后 myapp db migrate 将代码中的最新接口更新到versions目录下,

3、然后再调用myapp db upgrade命令更新到最新版数据库

https://i-blog.csdnimg.cn/blog_migrate/7df5a9108bdc466ec93ba98e74c4ea7f.png

2.2 后端接口介绍

2.2.1 后端代码介绍

https://i-blog.csdnimg.cn/blog_migrate/f2bed65ec68e5c661f61596906542dc4.png

https://i-blog.csdnimg.cn/blog_migrate/629e75052732e0706b1dc005fb1bd5cb.png

如图所示,通过定义一个类,设置route_base基本路由,之后通过@expose定义具体的api接口及restful方法,之后通过appbuilder.add_api将类添加,即可定义一个后端接口。

	#所有api操作header
    headers = {
      'Content-Type': 'application/json',
      'Authorization': '$rtx|$token'
    }
 - api:(GET):http://x.x.x.x/$view/api/
	#获取当前view 增删改查搜索接口中需要发送的参数,以及参数的描述
 - api: (GET):http://xx.xx.xx.xx/$view/api/_info 
 #list接口,其中$value为json序列化后的字符串
 - api: (GET):http:/xxx/api/?form_data=$value
 
 - api:(POST):http://x.x.x.x/$view/api/

 - api:(PUT):http://x.x.x.x/$view/api/<id>

 - api:(GET):http://x.x.x.x/$view/api/<id>

 - api:(DELETE):http://x.x.x.x/$view/api/<id>

	#单数据操作
 - api:(GET):http://x.x.x.x/$view/api/action/$action_name/<id>
	#批数据操作
 - api:(POST):http://x.x.x.x/$view/api/multi_action/$action_name/
	json参数为{"ids":[xx,xx,xx]}

2.2.2 接口过滤函数

过滤函数:
Starts with:sw
Not Starts with:nsw
Ends with:ew
Not Ends with:new
Contains:ct
Not Contains:nct
Equal to:eq
Not Equal to:neq
Greater than:gt
Smaller than:lt
Relation:rel_o_m
No Relation:nrel_o_m
elation as Many:rel_m_m
Filter view with a function:eqf
Filter view where field is in a list returned by a function:inf

#filter示例:
#查询name列包含aa的记录
"filters":[
	{
	  "col": "name",
	  "opr": "ct",   
	  "value": "aa"
	}
]
#filter示例:
#a表通过外键b_id绑定b表,查询指定b_id为1的所有a
"filters":[
    {
        "col": "b",
        "opr": "rel_o_m",
        "value": 1
    }
]

# 分页
"page":0,
"page_size":10,

# 排序
order_column: $column1
order_direction: 'desc'

2.2.3 celery定时/异步任务的开发

  • 定时任务代码开发:myapp/tasks/schedules.py

    https://i-blog.csdnimg.cn/blog_migrate/95062c1e6e5c6070f161b67202f72854.png

    使用场景: 1、定时任务,比如定时删除旧的workflow,tfjob,pytorchjob,测试的任务,服务,notebook等。 定时提交定时任务的配置,监控gpu资源,以及在多项目组间进行资源调配

  • 异步任务代码开发:myapp/tasks/async_task.py

    使用场景: 1、异步任务,需要花费比较长时间完成的功能,比如灰度升级服务,构建镜像等

  • 任务配置:config.py中CeleryConfig https://i-blog.csdnimg.cn/blog_migrate/754788fe2bfbf86cbc536e38f988c206.png

2.2.4 监听crd变化

https://i-blog.csdnimg.cn/blog_migrate/d8d7868fc5f3b604cd86c5fbc453e036.png

代码开发:myapp/tools/watch_xx.py

https://i-blog.csdnimg.cn/blog_migrate/3ca5ce170d72a729e38f1976f94e49dc.png

使用场景:监听训练和推理workflow的状态变化,推送消息,并通过redis缓存记录任务队列

2.2.5 调用k8s相关组件

https://i-blog.csdnimg.cn/blog_migrate/b165806c3ee86af75baa22b4df873b25.png

3. 项目运行

3.1 本地运行

本地运行起来主要需要两个配置文件mysql-compose.yml,docker-compose.yml

https://i-blog.csdnimg.cn/blog_migrate/f2ee39d8534c82b9e819a44d60dcd453.png

1 启动本地的docker,windows可启用docker-desktop

2 运行起来mysql数据库

cd ./install/docker目录下执行 docker-compose -f .\mysql-compose.yml up

3.build前后端镜像,

  • 前端镜像dockerfile:install/docker/dockerFrontend/Dockerfile https://i-blog.csdnimg.cn/blog_migrate/61a98f7c37d4f6f5b647280757e48ff8.png
  • 后端镜像dockerfile:install/docker/Dockerfile.dashboard https://i-blog.csdnimg.cn/blog_migrate/6988bc46950c97e05285ff3b4b16a3a2.png

4.修改/install/docker/docker-compose.yml中的前后端镜像,并运行docker-compose, 就可以在浏览器中查看页面http://localhost:8888/frontend

docker-compose -f /install/docker/docker-compose.yml up

3.2 运行容器

3.2.1 infra命名空间

https://i-blog.csdnimg.cn/blog_migrate/a063e02f699f70f875e2a5bdc61a51b6.png

如上图所示:

kubeflow-dashboard:后端容器

kubeflow-dashboard-frontend:前端容器

kubeflow-dashboard-schedule:异步、定时等任务调度容器

kubeflow-dashboard-worker:异步、定时等任务工作容器

kubeflow-watch: crd等监视容器

mysql:数据库

redis:缓存数据库,记录异步、定时等任务队列

3.2.2 kubeflow命名空间

https://i-blog.csdnimg.cn/blog_migrate/b77aa2743460d7bfce6a74b53b07b3e5.png