Skip to content

refactor: replace TensorBoard and Gradio tag editor with built-in services for single-port architecture #39

@wochenlong

Description

@wochenlong

背景

当前 TensorBoard(端口 6006)和标签编辑器(dataset-tag-editor,端口 28001)都是外挂式缝合的独立服务,通过 FastAPI 反向代理(proxy.py)转发。这带来了几个严重问题:

  1. 端口限制 — 云平台(AutoDL、Colab、RunPod)通常只开放 1-2 个端口,28001 和 6006 无法对外暴露,导致这些功能在云端完全不可用
  2. 反向代理脆弱 — 需要维护 HTTP + WebSocket 两套转发,Gradio 版本升级可能导致兼容性问题
  3. 依赖链冗长 — tensorboard 和 gradio 各自拖大量依赖,可能与主项目 PyTorch 生态冲突
  4. 用户体验割裂 — iframe 嵌套导致 UI 风格不统一,跨域问题和样式隔离都有坑

策略:渐进式替换

很多用户已经习惯了 TensorBoard 和 Gradio 版标签编辑器。不一刀切移除,而是:

  1. 先保留原有服务,同时推出我们自己的内嵌版本
  2. 两套方案并行,让用户自然迁移
  3. 当内嵌版功能完全覆盖并且用户体验更好后,再逐步移除旧服务

目标架构

最终实现双端口甚至单端口架构

主 WebUI (:28000)
├── /lora/*           训练配置页
├── /tensorboard      内嵌 Loss/LR 曲线(新,与旧 TensorBoard 并存)
├── /tageditor        内嵌标签编辑器(新,与旧 Gradio 版并存)
└── /api/*            所有后端 API

训练监控 (:6008)     (可选,未来可合并进主 WebUI)

实施阶段

Phase 1:内嵌训练曲线(与 TensorBoard 并存)

  • 后端:解析 tfevents 文件或直接从训练日志提取 loss/lr 数据
  • 后端:提供 /api/charts/data API 返回曲线数据
  • 前端:用轻量图表库渲染 loss/lr 曲线页面
  • 侧边栏新增「训练曲线」入口,保留原 TensorBoard 入口
  • 验证功能覆盖度,收集用户反馈

Phase 2:内嵌标签编辑器(与 Gradio 版并存)

  • 后端:/api/dataset/list — 列出数据集目录中的图片和标签文件
  • 后端:/api/dataset/image/{path} — 返回图片
  • 后端:/api/dataset/tag/{path} — 读取/保存标签
  • 后端:/api/dataset/tag/batch — 批量搜索替换标签
  • 前端:图片预览 + 标签编辑 UI 页面
  • 侧边栏新增「标签编辑(新)」入口,保留原标签编辑入口
  • 验证功能覆盖度,收集用户反馈

Phase 3:退役旧服务(条件成熟后)

  • 内嵌版功能完全覆盖旧版
  • 默认隐藏旧入口,保留 --legacy-tensorboard / --legacy-tageditor 开关
  • 移除 proxy.py 中旧代理代码
  • 移除 6006 / 28001 端口占用
  • 更新文档

相关文件

  • gui.py — 子进程启动逻辑
  • mikazuki/app/proxy.py — 反向代理
  • mikazuki/app/application.py — FastAPI 路由挂载
  • frontend/dist/assets/layout.96d49288.js — 前端 iframe 布局组件
  • mikazuki/dataset-tag-editor/ — 当前 Gradio 标签编辑器
  • train_monitor/ — 已有的训练监控模块(可复用架构)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions