- 将 Dockerfile 和 docker-compose.yml 迁移至 docker/ 目录下统一管理 - 新增 compute 计算模块(API 入口、依赖配置) - 新增 docker/app 和 docker/compute 部署配置 - 新增 demo-development-plan.md 演示开发计划文档 - 更新后端 API 设计、部署计划、架构需求等文档 - 更新 postgres 数据库 schema Co-Authored-By: Claude <noreply@anthropic.com>
14 KiB
Demo 开发计划
本文档用于指导后续开发一个可演示的模型微调平台 Demo。Demo 不是纯前端展示,而是包含前端、FastAPI 后端、PostgreSQL、算力服务、GPU 状态、LLaMA-Factory 适配器和训练任务主链路的工程化演示版本。
1. Demo 目标
Demo 目标是在没有完整生产环境的条件下,跑通一条可信的模型微调平台主链路:
登录
-> 数据集管理
-> 模型管理
-> 创建微调任务
-> 自动/手动选择算力节点
-> 检查模型/数据集资源副本
-> 缺失资源则同步到目标节点
-> 启动训练任务
-> 查看 GPU 占用、训练日志、loss 曲线、checkpoint
-> 训练完成后登记训练产物
-> 可进入评测/推理演示
Demo 支持两种算力运行模式:
| 模式 | 说明 | 适用场景 |
|---|---|---|
simulator |
模拟 GPU、训练进程、训练日志、loss、checkpoint | 无 GPU、无 LLaMA-Factory 环境 |
real |
调用 nvidia-smi 和 LLaMA-Factory 启动真实训练 |
有 GPU 和训练环境 |
第一版优先实现 simulator,同时保留 real 模式接口和适配器边界。
2. 技术范围
2.1 前端
基于现有 frontend/ 页面开发,逐步从 Mock 切换到 Demo 后端接口。
优先联调页面:
/login/dashboard/dataset/dataset/create/dataset/:id/preview/model-manage/model-manage/create/fine-tune/fine-tune/create/training-log/:id/compute/compute/gpus/compute/queue/compute/nodes
2.2 后端
基于 backend/ FastAPI 工程实现 Demo API:
- 用户登录和当前用户。
- 数据集、模型、训练任务。
- 算力节点、GPU、队列。
- 资源副本和同步任务。
- 训练日志、指标、checkpoint。
- 审计日志最小记录。
2.3 数据库
开发阶段使用项目自带 PostgreSQL。Demo 使用 docs/postgres-schema.sql 的核心子集,并通过 seed 数据初始化演示数据。
2.4 算力服务
基于 compute/ 开发内部 Compute API:
simulator模式:模拟 GPU 与训练生命周期。real模式:预留真实 GPU 和 LLaMA-Factory 调用。
每个算力节点仍按“单机多 GPU 节点”设计。多节点 Demo 可以通过多条 compute_nodes 记录模拟,也可以在多台机器上分别部署 docker/compute。
3. 模块开发清单
3.1 后端基础模块
目录建议:
backend/app/modules/
auth/
dataset/
model/
fine_tune/
compute_gateway/
audit/
接口:
| 方法 | 路径 | 说明 |
|---|---|---|
| POST | /api/login |
登录,Demo 可使用固定账号 |
| GET | /api/me |
当前用户 |
| GET | /api/dashboard/overview |
Demo 看板 |
| GET | /api/health |
应用健康检查 |
验收:
- 能通过前端登录。
- 能返回菜单权限。
- 前端退出后可重新登录。
3.2 数据集 Demo
接口:
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /api/dataset-manage |
数据集列表 |
| POST | /api/dataset-manage |
创建数据集 |
| GET | /api/dataset-manage/{id} |
数据集详情 |
| POST | /api/dataset-manage/upload/{dataset_id} |
上传或模拟上传文件 |
| GET | /api/dataset-manage/preview/{file_id} |
文件预览 |
| GET | /api/dataset-manage/versions/{file_id} |
文件版本 |
Demo 行为:
- 创建数据集后写入 PostgreSQL。
- 文件内容可以存本地 demo 目录或数据库小样本字段。
- 预览支持 JSONL 和文本。
- 数据集创建后生成一条
storage_objects记录。
3.3 模型 Demo
接口:
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /api/model-manage |
模型列表 |
| POST | /api/model-manage |
新增模型 |
| GET | /api/model-manage/{id} |
模型详情 |
| GET | /api/model-manage/local-models |
本地模型路径列表 |
| GET | /api/model-manage/trained-models |
训练产物列表 |
| POST | /api/model-manage/merge |
模拟权重合并任务 |
Demo 行为:
- 新增本地模型时登记路径,不要求真实权重存在。
- 训练完成后自动生成
trained_models记录。 - 权重合并可创建一个
compute_jobs模拟任务。
3.4 算力节点与 GPU Demo
接口:
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /api/compute/nodes |
算力节点列表 |
| POST | /api/compute/nodes |
新增节点 |
| PUT | /api/compute/nodes/{id} |
编辑节点 |
| POST | /api/compute/nodes/{id}/test-connection |
测试连接 |
| POST | /api/compute/nodes/{id}/enable |
启用 |
| POST | /api/compute/nodes/{id}/disable |
禁用 |
| POST | /api/compute/nodes/{id}/drain |
维护模式 |
| GET | /api/compute/gpus |
GPU 状态 |
| GET | /api/compute/queue |
队列 |
Demo 行为:
- 默认 seed 两个算力节点:
gpu-node-01,4 张模拟 GPU。gpu-node-02,4 张模拟 GPU。
- 支持节点标签:
A800、4090、80GB、llama_factory。 - 支持节点状态:
online、offline、draining、maintenance。 - GPU 状态随训练任务变化:
idle -> reserved -> running -> idle。
3.5 资源副本与同步 Demo
接口:
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /api/compute/nodes/{id}/replicas |
节点资源副本 |
| POST | /api/internal/compute-sync/resources |
创建资源同步任务 |
| GET | /api/internal/compute-sync/resources/{id} |
同步任务详情 |
Demo 行为:
- 训练任务启动前检查目标节点是否已有模型和数据集副本。
- 如果缺失,创建
resource_sync_jobs。 - 同步任务状态模拟:
pending -> running -> completed。 - 同步完成后写入
resource_replicas。 - Demo 不需要真实复制大文件,可以创建本地占位文件或只写元数据。
3.6 微调任务 Demo
接口:
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /api/fine-tune |
训练任务列表 |
| POST | /api/fine-tune |
创建训练任务 |
| POST | /api/fine-tune/start |
启动训练任务 |
| GET | /api/fine-tune/{id} |
任务详情 |
| GET | /api/fine-tune/{id}/overview |
训练概览 |
| GET | /api/fine-tune/{id}/events |
训练事件 |
| POST | /api/fine-tune/{id}/stop |
停止任务 |
| POST | /api/fine-tune/{id}/retry |
重试任务 |
| GET | /api/fine-tune/{id}/checkpoints |
checkpoint 列表 |
创建任务参数需要支持:
{
"name": "demo-sft-task",
"project_id": "uuid",
"base_model_id": "uuid",
"train_dataset_id": "uuid",
"engine": "llama_factory",
"scheduler": {
"mode": "auto",
"requested_node_id": null,
"required_tags": ["llama_factory"],
"min_gpu_memory_mb": 24000
},
"training_args": {
"stage": "sft",
"finetuning_type": "lora",
"epochs": 3,
"learning_rate": 0.0002
}
}
Demo 行为:
- 自动调度:选择
enabled + online节点,优先资源副本命中,按空闲 GPU、队列长度、权重排序。 - 手动调度:使用用户指定的
requested_node_id。 - 任务状态模拟:
pending -> syncing -> queued -> running -> completed。 - 训练期间每 2-5 秒追加日志和指标。
- 完成后生成 checkpoint 和 trained model。
3.7 Compute API Demo
算力服务内部接口:
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /health |
节点健康 |
| GET | /api/v1/compute/health |
节点详细健康 |
| GET | /compute/resources/gpus |
GPU 状态 |
| POST | /compute/jobs |
创建任务 |
| GET | /compute/jobs/{id} |
查询任务 |
| POST | /compute/jobs/{id}/stop |
停止任务 |
| GET | /compute/jobs/{id}/logs |
拉取日志 |
| POST | /compute/files/upload |
文件网关上传 |
| GET | /compute/files/{id}/download |
文件网关下载 |
simulator 模式行为:
- 在内存或 SQLite/PostgreSQL 中维护任务状态。
- 使用后台线程/async task 模拟训练进度。
- 生成结构化日志、loss 曲线和 checkpoint。
real 模式预留:
nvidia-smi采集 GPU。subprocess.Popen启动 LLaMA-Factory。- 解析真实训练日志。
- 扫描真实 checkpoint 和 adapter。
3.8 LLaMA-Factory Adapter Demo
目录建议:
compute/engines/llama_factory/
adapter.py
schemas.py
command_builder.py
log_parser.py
simulator.py
能力:
validate_config(config):校验训练参数。prepare_workspace(job):准备工作目录。build_command(job):生成 LLaMA-Factory 命令。start(job):启动真实或模拟训练。stop(job_id):停止任务。status(job_id):查询状态。parse_log(line):解析 loss、epoch、step、learning rate。collect_artifacts(job_id):收集 checkpoint、adapter、merged model。
Demo 阶段必须完成:
dry_run命令生成。simulator训练。- 日志解析器单元测试。
真实训练阶段再完成:
real进程启动。- 真实停止。
- 真实产物扫描。
4. 数据库 Demo 子集
第一版 Demo 最小使用表:
userstenantsprojectsmodelstrained_modelsdatasetsdataset_filesstorage_objectsfine_tune_tasksfine_tune_metricsfine_tune_checkpointscompute_nodescompute_node_enginesgpu_devicescompute_jobsgpu_allocationsresource_replicasresource_sync_jobsaudit_logs
Seed 数据:
- 管理员用户:
admin / admin123。 - 租户:
demo-tenant。 - 项目:
demo-project。 - 模型:
Qwen2.5-7B-InstructLlama-3.1-8B-Instruct
- 数据集:
finance-sft-democustomer-service-demo
- 算力节点:
gpu-node-01gpu-node-02
- GPU:每个节点 4 张模拟 GPU。
- 训练任务:至少 3 条,分别处于
pending、running、completed。
5. 目录和配置建议
5.1 应用后端配置
APP_ENV=demo
DATABASE_URL=postgresql+asyncpg://yg_ft:change_me@postgres:5432/yg_ft
REDIS_URL=redis://redis:6379/0
COMPUTE_STATUS_SYNC_MODE=polling
COMPUTE_POLL_INTERVAL_SECONDS=3
DEMO_MODE=true
5.2 算力服务配置
COMPUTE_MODE=simulator
COMPUTE_HOST_ID=gpu-node-01
LLAMA_FACTORY_HOME=/opt/LLaMA-Factory
YG_FT_DATA_ROOT=/data/yg-ft
ENABLE_APP_CALLBACK=false
5.3 本地文件目录
runtime/
app/
data/
logs/backend/
compute/
logs/
training-logs/
data/
tenants/
6. 开发阶段计划
阶段 1:后端和 DB 最小闭环
目标:
- FastAPI 能启动。
- PostgreSQL 能初始化。
- Seed 数据可导入。
- 前端能登录并读取真实接口。
任务:
- 实现 DB session。
- 建立 Alembic 或 SQL 初始化流程。
- 实现
auth、dashboard、dataset、model基础接口。 - 完成 Docker app 启动说明。
验收:
GET /api/health正常。POST /api/login成功。- 前端模型/数据集列表来自后端 DB。
阶段 2:Compute Simulator
目标:
- 算力节点、GPU、队列可演示。
- 训练任务可以模拟运行。
任务:
- 实现
compute/api/main.py内部接口。 - 实现模拟 GPU 状态。
- 实现模拟任务生命周期。
- 实现训练日志和 loss 生成。
- 实现应用后端轮询同步。
验收:
- 前端
/compute/gpus可看到 GPU 动态状态。 - 创建训练任务后 GPU 状态变化。
/training-log/:id能看到日志和曲线。
阶段 3:微调主链路
目标:
- 训练任务从创建到完成可完整演示。
任务:
- 实现调度器。
- 实现资源副本检查。
- 实现资源同步任务模拟。
- 实现 checkpoint 和 trained model 登记。
- 前端微调创建页接入真实后端。
验收:
- 自动调度能选择节点。
- 手动指定节点能生效。
- 缺资源时先同步再训练。
- 训练完成后模型产物出现在模型管理页。
阶段 4:LLaMA-Factory Adapter Dry Run
目标:
- 即使没有真实 GPU,也能展示平台如何生成 LLaMA-Factory 命令和配置。
任务:
- 实现参数校验。
- 实现 YAML/命令生成。
- 实现日志解析器。
- 在训练详情页展示命令预览。
验收:
- 创建训练任务后能查看 LLaMA-Factory 命令。
- 参数错误能返回可读错误。
- 日志解析器能从样例日志提取 loss。
阶段 5:真实 GPU/LLaMA-Factory 可选接入
目标:
- 在有 GPU 环境时可切换为真实训练。
任务:
- 接入
nvidia-smi。 - 检查 CUDA/Driver/PyTorch。
- 启动 LLaMA-Factory 训练进程。
- 停止训练进程。
- 扫描真实 checkpoint。
验收:
COMPUTE_MODE=real时能读取真实 GPU。- 能启动一个最小 LLaMA-Factory 样例任务。
- 真实日志能显示在训练日志页。
7. 前后端联调顺序
- 登录。
- 看板。
- 模型列表。
- 数据集列表。
- 算力节点和 GPU。
- 微调创建。
- 训练任务列表。
- 训练日志详情。
- 模型产物列表。
- 推理对话 Mock/后端接口。
8. Demo 验收标准
必须满足:
- 不依赖真实 GPU 时,Demo 仍可完整跑通。
- 前端核心页面不再只依赖静态 Mock。
- 数据写入 PostgreSQL,刷新页面后仍存在。
- 训练任务状态会自动流转。
- GPU 状态会随任务变化。
- 训练日志会持续追加。
- loss 曲线会随训练推进变化。
- 训练完成后生成 checkpoint 和训练产物。
- 多算力节点页面能展示节点权重、标签、启用状态和维护状态。
- 资源副本页面能展示模型/数据集在哪些节点已有缓存。
可选满足:
- 接入真实
nvidia-smi。 - 接入真实 LLaMA-Factory。
- 支持真实文件上传到算力节点本地磁盘。
9. 风险和约束
| 风险 | 影响 | Demo 处理 |
|---|---|---|
| 无 GPU 环境 | 不能真实训练 | 使用 COMPUTE_MODE=simulator |
| 无 LLaMA-Factory | 不能启动训练框架 | 使用 adapter dry_run 和 simulator |
| 文件太大 | 本地 Demo 慢或失败 | Demo 只使用小样本和占位文件 |
| 前端页面仍有 Mock 依赖 | 联调不完整 | 逐页替换 API,不一次性重写 |
| 多节点真实网络不可用 | 无法多机演示 | 用多条 compute_nodes 模拟多节点 |
10. 建议第一批开发任务
第一批建议只做 8 个任务:
- 后端 DB session 和配置。
- Seed 数据脚本。
- 登录、模型、数据集基础接口。
- Compute simulator 基础接口。
- GPU 动态状态模拟。
- 微调任务创建和状态机。
- 训练日志/指标模拟。
- 前端微调主链路接入后端。
完成这 8 个任务后,就可以形成第一版可演示 Demo。