当前位置: 首页 > news >正文

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

1. cube-studio介绍

云原生机器学习平台cube-studio介绍:https://juejin.cn/column/7084516480871563272

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:https://github.com/tencentmusic/cube-studio

开源试用环境:http://114.96.98.168:20080/frontend/ 账号admin 密码 admin

2. 开源代码框架与结构

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

2.1 数据库相关代码

2.1.1 数据库结构

myapp/models 中存储数据库结构,如图所示
在这里插入图片描述

2.1.2 数据库初始化

在这里插入图片描述

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

2.1.3 数据库的更新迭代

迭代版本文件在myapp/migrations/versions
1、先使用myapp db upgrade命令,将数据库依据versions目录下的接口更新到最新,

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

3、然后再调用myapp db upgrade命令更新到最新版数据库
在这里插入图片描述

2.2 后端接口介绍

2.2.1 后端代码介绍

在这里插入图片描述
在这里插入图片描述

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

	#所有api操作headerheaders = {'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
    在这里插入图片描述

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

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

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

  • 任务配置:config.py中CeleryConfig 在这里插入图片描述

2.2.4 监听crd变化

在这里插入图片描述

代码开发:myapp/tools/watch_xx.py
在这里插入图片描述

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

2.2.5 调用k8s相关组件

在这里插入图片描述

3. 项目运行

3.1 本地运行

本地运行起来主要需要两个配置文件mysql-compose.yml,docker-compose.yml
在这里插入图片描述
1 启动本地的docker,windows可启用docker-desktop

2 运行起来mysql数据库

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

3.build前后端镜像,

  • 前端镜像dockerfile:install/docker/dockerFrontend/Dockerfile在这里插入图片描述

  • 后端镜像dockerfile:install/docker/Dockerfile.dashboard在这里插入图片描述

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命名空间

在这里插入图片描述
如上图所示:
kubeflow-dashboard:后端容器
kubeflow-dashboard-frontend:前端容器
kubeflow-dashboard-schedule:异步、定时等任务调度容器
kubeflow-dashboard-worker:异步、定时等任务工作容器
kubeflow-watch: crd等监视容器
mysql:数据库
redis:缓存数据库,记录异步、定时等任务队列

3.2.2 kubeflow命名空间

在这里插入图片描述

相关文章:

  • Python 网络编程之搭建简易服务器和客户端
  • 智慧监控平台/AI智能视频EasyCVR接口调用编辑通道详细步骤
  • andriod安卓水果商城系统课设
  • 程序员如何高效学习技术?
  • 算法设计与分析 | 矩阵连乘
  • 清除conda和pip缓存的方法
  • STM32 基础知识(探索者开发板)--103讲 通用定时器
  • MACBOOK 通过iterm2连接堡垒机跳转服务器
  • 【用unity实现100个游戏之19】制作一个3D传送门游戏,实现类似鬼打墙,迷宫,镜子,任意门效果
  • json转换(json与对象互转、json与list互转、JSONObject与Map互转)
  • SketchUp各版本安装指南
  • HackTheBox - Medium - Linux - Jupiter
  • Plantuml之对象图语法介绍(十九)
  • LeetCode 268. 丢失的数字
  • 二分查找——OJ题(一)
  • “大数据应用场景”之隔壁老王(连载四)
  • AHK 中 = 和 == 等比较运算符的用法
  • Angular 响应式表单 基础例子
  • gulp 教程
  • IP路由与转发
  • nginx 负载服务器优化
  • PHP 7 修改了什么呢 -- 2
  • PHP那些事儿
  • Promise面试题2实现异步串行执行
  • React系列之 Redux 架构模式
  • 多线程事务回滚
  • 翻译:Hystrix - How To Use
  • 基于web的全景—— Pannellum小试
  • 解决jsp引用其他项目时出现的 cannot be resolved to a type错误
  • 警报:线上事故之CountDownLatch的威力
  • 聊聊flink的BlobWriter
  • 每天10道Java面试题,跟我走,offer有!
  • 前端学习笔记之观察者模式
  • 我的zsh配置, 2019最新方案
  • 一、python与pycharm的安装
  • ​LeetCode解法汇总2696. 删除子串后的字符串最小长度
  • #pragma data_seg 共享数据区(转)
  • (Java实习生)每日10道面试题打卡——JavaWeb篇
  • (SpringBoot)第二章:Spring创建和使用
  • (待修改)PyG安装步骤
  • (强烈推荐)移动端音视频从零到上手(上)
  • (一)python发送HTTP 请求的两种方式(get和post )
  • (转)Android中使用ormlite实现持久化(一)--HelloOrmLite
  • (自适应手机端)响应式新闻博客知识类pbootcms网站模板 自媒体运营博客网站源码下载
  • .NET Core中的去虚
  • .Net Web窗口页属性
  • .net反混淆脱壳工具de4dot的使用
  • .NET框架设计—常被忽视的C#设计技巧
  • .so文件(linux系统)
  • @column注解_MyBatis注解开发 -MyBatis(15)
  • @Documented注解的作用
  • @JoinTable会自动删除关联表的数据
  • [2019/05/17]解决springboot测试List接口时JSON传参异常
  • [30期] 我的学习方法
  • [51nod1610]路径计数