代码结构与模块地图

第一次接触 CubeStudio 源码、想知道某个功能/某段代码在哪个目录、前端源码与编译产物分别在哪、各 view 对应哪个业务模块时读这篇

二次开发 / 总览导航
代码结构模块地图目录结构code structurerepo layoutaihubimagesjob-templatemyappviewsmodelsfrontendvisionvisionPlus静态资源static

代码结构与模块地图

本文是二次开发的总览/导览页,介绍仓库的四大代码块(aihubimagesjob-template、平台本体 myapp),以及平台本体内部 views/models/前端源码与编译产物的分布。

更细的"哪个 model 对应哪张表、哪个 view 对应哪个 API"清单见 07-参考速查/模块地图.md07-参考速查/核心数据模型速查.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.pyserver.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-newjupyter-notebookrstudio 等子目录;VSCode 形态以 theia 提供)。
  • 推理服务(如 ONNX、TF serving、Triton 等)的镜像构建(serving 子目录)。
  • nni 的超参搜索基础镜像(nni 子目录)。
  • NPU、matlab、window 等其它运行环境镜像。

Job template 相关代码

job-template 文件夹包含了已有的任务模板,模板实体位于 job-template/job/ 下。

涵盖各种数据处理、数据集导入(dataset/datax)、特征工程、GPT/LLM 系列(llama-factoryllm-benchmarkllm-distillationllm-prunellm-quantizationllm-safety-evalopencompass)、Hadoop 生态(hadoop)、Ray 超参数搜索(hyperparameter-search-ray)、NNI 超参搜索(hyperparameter-search-nni)、模型转换/下载/评估/离线推理/注册(model-convertmodel_downloadmodel_evaluationmodel_offline_predictmodel_register)、Spark、TF/PyTorch 分布式(tfpytorch)、Volcano、视频音频分布式处理(video-audiovoice-processvision-process)、目标检测(yolov8yolo26paddleocr-vl)等内容。

每个模板目录中通常包含:

  • 一个 Dockerfile(镜像定义)。
  • 一个 build.sh(执行镜像构建并推送的脚本)。
  • 一个 launcher.py(容器内的启动脚本,即任务入口)。
  • 一个 README.md(模板说明)。

核实并修正:原文把"构建镜像的 build 文件"与"执行构建和推送命令的文件"列为两个独立文件,实际不存在单独的 build 文件——job-template/job/ 下的模板(如 tfpytorchmodel_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 中包含登录的方式、推送消息的方式。

使用场景:

  1. 登录方式支持账户密码、OpenID 认证、LDAP 认证、AUTH_REMOTE_USER(在 MyCustomRemoteUserView.login 中自行编排,可对接内部 OA 系统)。myapp/project.py:60 定义 class MyCustomRemoteUserView(AuthRemoteUserView):64login
  2. 推送方式,自行对接企业微信、邮箱等报警方式,实现 push_adminpush_message 函数。

核实并修正:原文写"实现 push 和 push_admin 两个函数",源码中实际为 push_adminpush_message(另有 push_resource_applypush_resource_approve),myapp/project.py:28-47。无名为 push 的函数。

定时 / 异步任务的开发

  • 启动配置:myapp/config.pyCeleryConfig 类(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.pywatch_service.pywatch_workflow.py)。

使用场景:监听训练和推理 workflow 的状态变化,推送消息。

数据库的更新迭代

myapp/migrations/versions(另有 versions-mysqlversions-postgres 两份历史结构;MySQL 用默认 versions,PostgreSQL/人大金仓启动时用 versions-postgres 覆盖,达梦则清空并改用 db.create_all() 建表,见 install/docker/config.py:476-488)。

注意事项(三步法,详见 新增视图页面与数据库升级.md):

  1. 先使用 myapp db upgrade,将数据库依据 versions 目录下的记录更新到最新。
  2. 然后 myapp db migrate,将代码中的最新 model 结构对比生成升级文件到 versions 目录下。
  3. 再调用 myapp db upgrade 把增量结构更新到数据库。

数据库结构和视图

  • myapp/models:数据库结构(ORM model)。
  • myapp/views:API 请求接口和 Web 界面,对应的 model 均在代码中有引入。

注意事项(基础文件):

  • __init__.py:引入需要添加的视图。
  • view_log.py:所有视图的日志访问记录(LOG_ModelView_Apiroute_base='/log_modelview/api')。
  • base.py:FAB 基础框架功能(BaseMyappView 等)。
  • baseApi.py:FAB 基础框架功能(MyappModelRestApi,前后端分离接口基类)。
  • route.py:Flask 自带路由功能。
  • home.py:菜单管理和弹窗提醒(/menu/feature/check)。

核实并修正:原文以"log"指代日志视图文件,源码中文件名为 view_log.pymyapp/views/view_log.py)。另外 myapp/views/ 还有 baseFormApi.pybaseSQLA.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.pyview_blood.py(血缘)、view_sqllab.pyview_labelstudio.pyview_llm_ingress.pyview_k8s.pyview_pod.pyview_message.pyview_user_role.pyview_dashboard.pyview_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/visonmyapp/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 的"用户和权限"章节)。

最后更新 2026-07-04完整文档以官方仓库为准:GitHub Wiki