代码结构与模块地图
本文是二次开发的总览/导览页,介绍仓库的四大代码块(aihub、images、job-template、平台本体 myapp),以及平台本体内部 views/models/前端源码与编译产物的分布。
更细的"哪个 model 对应哪张表、哪个 view 对应哪个 API"清单见 07-参考速查/模块地图.md 与 07-参考速查/核心数据模型速查.md;本页只做整体定位,避免重复展开。
aihub 相关代码
AIhub 的所有相关内容都独立于 CubeStudio 平台,因为它们的代码是解耦的,没有与平台部分耦合在一起。
aihub/src:Python 包的源码,包括 Docker 启动命令、环境镜像构建方法等。aihub/src/cubestudio:实际运行代码,以及涉及到 AIhub 前后端、模型服务的 Web 界面,数据集的 SDK、训练的 SDK、与 CubeStudio 后端对接的 request 等内容。aihub/src/cubestudio/aihub/model.py:定义模型的基础属性,以便表征模型的所有内容。aihub/src/cubestudio/aihub/web:实现将 model 中的所有内容转化为开发服务、训练微调、自动化标注等功能(其中gradio_server.py、server.py等为 Web 服务入口)。aihub/dataset:开源数据集(仓库内为init-dataset.csv等初始数据)。
上述路径已对照源码核实存在(
aihub/src/cubestudio/{aihub,dataset,request,train,utils}、aihub/src/cubestudio/aihub/{model.py,web})。
镜像封装相关
在 images 文件夹中(仓库根目录下的 images/):
- 所有的 GPU 镜像构建方法(如
ubuntu-gpu、多 CUDA 版本)。 - 商业版和开源版的 VSCode、jupyter、rstudio 等(对应
theia/theia-new、jupyter-notebook、rstudio等子目录;VSCode 形态以theia提供)。 - 推理服务(如 ONNX、TF serving、Triton 等)的镜像构建(
serving子目录)。 - nni 的超参搜索基础镜像(
nni子目录)。 - NPU、matlab、window 等其它运行环境镜像。
Job template 相关代码
job-template 文件夹包含了已有的任务模板,模板实体位于 job-template/job/ 下。
涵盖各种数据处理、数据集导入(dataset/datax)、特征工程、GPT/LLM 系列(llama-factory、llm-benchmark、llm-distillation、llm-prune、llm-quantization、llm-safety-eval、opencompass)、Hadoop 生态(hadoop)、Ray 超参数搜索(hyperparameter-search-ray)、NNI 超参搜索(hyperparameter-search-nni)、模型转换/下载/评估/离线推理/注册(model-convert、model_download、model_evaluation、model_offline_predict、model_register)、Spark、TF/PyTorch 分布式(tf、pytorch)、Volcano、视频音频分布式处理(video-audio、voice-process、vision-process)、目标检测(yolov8、yolo26、paddleocr-vl)等内容。
每个模板目录中通常包含:
- 一个
Dockerfile(镜像定义)。 - 一个
build.sh(执行镜像构建并推送的脚本)。 - 一个
launcher.py(容器内的启动脚本,即任务入口)。 - 一个
README.md(模板说明)。
核实并修正:原文把"构建镜像的 build 文件"与"执行构建和推送命令的文件"列为两个独立文件,实际不存在单独的 build 文件——
job-template/job/下的模板(如tf、pytorch、model_download)均只有一个build.sh(同时负责构建与推送,共约 34 个模板带build.sh,0 个带独立build),外加Dockerfile/launcher.py/README.md;部分模板还含pyarmor_runtime_*加密运行时目录。
CubeStudio 平台本身代码(myapp)
开发框架
平台控制端基于 FAB(Flask-AppBuilder)框架,详见 FAB后端开发框架.md。
菜单控制
myapp/views/home.py 中的 menu 函数(通过 @expose_api(url='/menu') 暴露为 /menu 接口)。
核实:源码中函数名为
menu,通过@expose_api(url='/menu')暴露为/menu接口,myapp/views/home.py:81-83。
使用场景:部分主菜单/子菜单绑定到自有平台,或者添加新的平台视图。
登录方式 / 消息推送
myapp/project.py 中包含登录的方式、推送消息的方式。
使用场景:
- 登录方式支持账户密码、OpenID 认证、LDAP 认证、
AUTH_REMOTE_USER(在MyCustomRemoteUserView.login中自行编排,可对接内部 OA 系统)。myapp/project.py:60定义class MyCustomRemoteUserView(AuthRemoteUserView),:64为login。 - 推送方式,自行对接企业微信、邮箱等报警方式,实现
push_admin与push_message函数。
核实并修正:原文写"实现 push 和 push_admin 两个函数",源码中实际为
push_admin、push_message(另有push_resource_apply、push_resource_approve),myapp/project.py:28-47。无名为push的函数。
定时 / 异步任务的开发
- 启动配置:
myapp/config.py中CeleryConfig类(myapp/config.py:540)。 - 定时任务代码开发:
myapp/tasks/schedules.py。使用场景:定时删除旧的 workflow、tfjob、pytorchjob、测试任务、服务、notebook 等;定时提交定时任务的配置;监控 GPU 资源;在多项目组间进行资源调配。 - 异步任务代码开发:
myapp/tasks/async_task.py。使用场景:需要花费较长时间完成的功能,比如灰度升级服务、构建镜像等。
监听 CRD 变化
代码开发:myapp/tools/watch_xx.py(实际为 watch_pod.py、watch_service.py、watch_workflow.py)。
使用场景:监听训练和推理 workflow 的状态变化,推送消息。
数据库的更新迭代
myapp/migrations/versions(另有 versions-mysql、versions-postgres 两份历史结构;MySQL 用默认 versions,PostgreSQL/人大金仓启动时用 versions-postgres 覆盖,达梦则清空并改用 db.create_all() 建表,见 install/docker/config.py:476-488)。
注意事项(三步法,详见 新增视图页面与数据库升级.md):
- 先使用
myapp db upgrade,将数据库依据 versions 目录下的记录更新到最新。 - 然后
myapp db migrate,将代码中的最新 model 结构对比生成升级文件到 versions 目录下。 - 再调用
myapp db upgrade把增量结构更新到数据库。
数据库结构和视图
myapp/models:数据库结构(ORM model)。myapp/views:API 请求接口和 Web 界面,对应的 model 均在代码中有引入。
注意事项(基础文件):
__init__.py:引入需要添加的视图。view_log.py:所有视图的日志访问记录(LOG_ModelView_Api,route_base='/log_modelview/api')。base.py:FAB 基础框架功能(BaseMyappView等)。baseApi.py:FAB 基础框架功能(MyappModelRestApi,前后端分离接口基类)。route.py:Flask 自带路由功能。home.py:菜单管理和弹窗提醒(/menu、/feature/check)。
核实并修正:原文以"log"指代日志视图文件,源码中文件名为
view_log.py(myapp/views/view_log.py)。另外myapp/views/还有baseFormApi.py、baseSQLA.py两个基础文件,原文未列。
业务视图(已对照 myapp/views/ 核实下列文件均存在):
| 文件 | 业务模块 |
|---|---|
view_team.py |
项目组管理 |
view_metadata.py |
离线库表管理 |
view_metadata_metric.py |
指标服务 |
view_dimension.py |
维表管理 |
view_dataset.py |
数据集管理 |
view_images.py |
镜像管理、仓库管理 |
view_docker.py |
在线构建镜像的功能 |
view_notebook.py |
在线开发 |
view_etl_pipeline.py |
数据 ETL pipeline |
view_job_template.py |
任务模板的功能 |
view_pipeline.py |
训练 pipeline 管理 |
view_task.py |
训练任务管理 |
view_runhistory.py |
定时调度管理 |
view_workflow.py |
任务流实例管理 |
view_nni.py |
超参搜索 nni 的功能 |
view_train_model.py |
模型管理的功能 |
view_serving.py |
内部服务 |
view_inferenceserving.py |
推理服务 |
view_total_resource.py |
整体资源 |
view_chat.py |
私有知识库 |
view_chat_dingtalk.py |
钉钉群机器人 |
view_chat_wechat.py |
微信公众号智能问询 |
view_chat_wework.py |
企业微信机器人 |
说明:
myapp/views/下的视图远不止上表,还包括view_aihub.py、view_blood.py(血缘)、view_sqllab.py、view_labelstudio.py、view_llm_ingress.py、view_k8s.py、view_pod.py、view_message.py、view_user_role.py、view_dashboard.py、view_etl_pipeline_etl.py等。完整对应关系见 07-参考速查/模块地图.md。
前端代码
源码位置:
- CubeStudio 总体前端:
myapp/frontend - CubeStudio 后端生成的 html 模板:
myapp/templates - 训练 pipeline 前端:
myapp/vision - 数据 ETL pipeline 前端:
myapp/visionPlus
编译后地址:
- CubeStudio 总体前端:
myapp/static/appbuilder/frontend - 训练 pipeline 前端:
myapp/static/appbuilder/vison - 数据 ETL pipeline 前端:
myapp/static/appbuilder/visonPlus
注意:编译产物目录确实是
myapp/static/appbuilder/vison与myapp/static/appbuilder/visonPlus(都少一个i),与源码目录myapp/vision/myapp/visionPlus(正确拼写)不一致,这是仓库现状(已核实),请勿"纠正"成vision*。
其他部分前端静态资源:myapp/static/appbuilder。
前端静态文件所属容器:
- 前端镜像 nginx 代理,代理
myapp/static/下的静态文件。 - 其他少量 html 模板,
myapp/templates/下,在后端镜像。
权限管理的基础逻辑
myapp/security.py(RBAC,自带 Admin/Gamma 角色,详见 FAB后端开发框架.md 的"用户和权限"章节)。