- 平台治理: 租户用户权限层次、资源ACL、审批中心与审批模板、访问申请 - 存储: MinIO 存储进度迁移、对象存储安全加固与测试 - 计算: GPU 资源预留、compute 轮询与同步增强 - 权限: permission v2 迁移、权限安全验收测试 - 日志: 后端运行日志中文说明、操作日志整合 - 数据处理/评测: 数据转换与模型评测优化 Co-Authored-By: Claude <noreply@anthropic.com>
384 lines
30 KiB
Markdown
384 lines
30 KiB
Markdown
# 当前项目开发进度
|
||
|
||
> 评估基线:2026-08-19 当前工作区代码、数据库初始化脚本、Docker 部署文件、前端页面和现有设计文档。
|
||
>
|
||
> 本文以代码实际情况为准。设计文档中已经提出但代码没有形成完整闭环的内容,统一标记为“部分完成”或“未完成”。
|
||
|
||
## 一、项目定位与总体结论
|
||
|
||
当前项目是一个面向多用户、多算力节点的模型训练与推理平台,主要链路为:
|
||
|
||
```text
|
||
Vue 前端
|
||
|
|
||
FastAPI Backend API
|
||
|-- PostgreSQL:业务元数据、权限、任务状态、小型内容和预览数据
|
||
|-- Redis:会话、限流、短期缓存和任务辅助状态
|
||
|-- MinIO:模型、数据集、报告和大文件的统一对象存储
|
||
|-- Compute API / Agent:训练、推理、评测、模型合并和 GPU 执行
|
||
|
|
||
多台算力节点
|
||
```
|
||
|
||
整体判断:
|
||
|
||
| 范围 | 当前状态 | 结论 |
|
||
|---|---|---|
|
||
| 平台基础架构 | 基本完成 | 前后端、数据库、Redis、MinIO、Compute Agent 和 Docker 部署均已具备 |
|
||
| 核心业务闭环 | 基本可用 | 数据集、数据处理、数据转换、训练、模型、推理、评测均有页面和接口 |
|
||
| 多算力节点 | 部分完成 | 节点选择、GPU 分配和缓存准备已经接入,跨节点一致性和失败恢复仍需加强 |
|
||
| 权限治理 | 部分完成 | 登录、角色、权限码、ACL、审批、审计已实现,但完整的租户/项目隔离尚未闭环 |
|
||
| MinIO 统一存储 | 部分完成 | 大文件和模型已接入,仍存在兼容性的本地路径和部分数据双写/回退路径 |
|
||
| 生产可靠性 | 未完成 | 缓存容量治理、对象清理、流式上传、归档重试、备份和高可用尚未完成 |
|
||
| 前端体验 | 基本可用,需优化 | 构建问题已持续修复,但页面响应等待、首屏体积和部分错误提示仍需优化 |
|
||
|
||
## 二、已完成的功能
|
||
|
||
### 2.1 平台基础与部署
|
||
|
||
- 已建立 Vue 3 + TypeScript + Vite 前端工程。
|
||
- 已建立 FastAPI 后端服务,提供登录、平台管理和模型业务接口。
|
||
- 已建立 Compute API / Agent,用于连接算力节点并执行训练、推理、评测和模型处理任务。
|
||
- 已使用 PostgreSQL 保存核心业务数据,Redis 提供会话、限流和缓存能力。
|
||
- 已增加 MinIO 服务及 Backend 的 MinIO 配置,支持和 Compute Agent 分离部署。
|
||
- 已提供 `docker/app`、`docker/compute`、`docker/minio` 和 `docker/offline` 部署目录。
|
||
- 已考虑后端、算力服务、MinIO 分布在不同服务器时使用独立网络;Compute 节点访问 MinIO 需要配置所有节点都能访问的固定 IP 或 DNS。
|
||
- 离线部署目录已经同步后端、算力相关源码和初始化 SQL 的主要改造内容。
|
||
|
||
### 2.2 登录、用户和权限基础
|
||
|
||
- 用户登录、退出、当前用户信息和密码修改接口已经存在。
|
||
- 已有 Token 会话、Redis 会话记录和登录限流逻辑。
|
||
- 已建立用户、角色、权限码和角色权限关系。
|
||
- 已实现管理员、普通用户等基础角色分层。
|
||
- 已实现页面路由守卫、菜单过滤和前端按钮级权限的基础能力。
|
||
- 已建立资源 ACL 管理页面和相关接口,可对用户或角色授予资源级权限。
|
||
- 已建立审批模板、审批实例和审批步骤的基本数据模型与页面。
|
||
- 已建立运行日志、审计日志查询页面及审计记录写入机制。
|
||
- 已加入软删除相关字段和部分删除逻辑,避免直接物理删除业务资源。
|
||
|
||
### 2.3 算力节点与 GPU 资源
|
||
|
||
- 已实现算力节点的新增、编辑、启用、禁用、维护/删除、连通性测试和健康检查。
|
||
- 已实现节点列表、节点详情、节点副本/同步状态和 Compute Agent 连接。
|
||
- 已实现 GPU 信息发现、GPU 状态查询和队列查询。
|
||
- 已建立 `gpu_allocations`、`gpu_assignments`、调度锁等资源分配表。
|
||
- 训练任务已经支持选择调度节点和一张或多张 GPU,并在预检阶段校验资源可用性。
|
||
- Compute Agent 已支持训练、评测、推理和缓存准备等任务接口。
|
||
- 已存在资源副本和同步任务模型,用于记录节点侧资源同步状态。
|
||
|
||
### 2.4 数据集管理
|
||
|
||
- 已实现数据集创建、列表、详情、编辑、删除和文件上传。
|
||
- 已实现数据集文件下载、预览、记录列表和数据记录编辑入口。
|
||
- 已处理 JSON 与 JSONL 的记录数差异:JSON 数组按元素计数,JSONL 按有效行计数,避免把整个 JSON 文件误按行数统计。
|
||
- 已提供数据集版本列表、版本详情、创建版本、切换当前激活版本和删除版本接口。
|
||
- 已增加数据集文件、版本、数据记录等初始化表结构。
|
||
- 已支持数据集文件在数据库小内容和 MinIO 大文件之间按策略存储。
|
||
- 已在训练预检中检查数据集文件是否存在、是否可从 MinIO 获取以及是否能准备到目标算力节点。
|
||
|
||
### 2.5 数据处理与数据转换
|
||
|
||
- 已提供结构化数据、非结构化数据、外部数据源的处理创建流程。
|
||
- 已实现源文件上传、预览、分片/切分、生成、质量检查、去重和结果管理等数据处理流程。
|
||
- 已支持处理结果生成数据集或导入数据集版本。
|
||
- 已建立数据处理任务、源文件、预览项、结果等数据表。
|
||
- 已提供 JSON、JSONL 等数据格式转换页面和后端任务接口。
|
||
- 已将数据转换输出接入 MinIO/数据库分层存储:小型文本结果可存数据库,大文件存 MinIO。
|
||
- 已处理输出文件下载和转换结果元数据保存问题。
|
||
|
||
### 2.6 模型训练
|
||
|
||
- 已实现训练任务创建、配置预检、命令预览、启动、停止、重试和删除。
|
||
- 已接入 LLaMA-Factory 等训练适配逻辑。
|
||
- 已支持选择训练数据、基座模型、算力节点和 GPU。
|
||
- 已实现训练日志获取、训练任务概览、诊断信息、检查点和训练指标查询。
|
||
- 前端训练详情已经具备训练曲线解析和展示逻辑,日志轮询间隔已调整为 3 秒。
|
||
- 已增加 GPU 详情展示入口,包括显存和利用率等 Compute Agent 上报信息。
|
||
- 已支持训练任务的 MinIO 数据准备和目标算力节点缓存准备。
|
||
|
||
### 2.7 模型管理与权重合并
|
||
|
||
- 已实现在线模型/基座模型和训练模型的列表、创建、详情、用途修改和删除。
|
||
- 已建立模型、训练模型、模型血缘、模型产物和导出任务相关表。
|
||
- 已提供权重合并入口,能够根据训练任务准备基座模型和 Adapter,并提交 Compute Agent 执行合并。
|
||
- 已增加模型产物和 MinIO 对象关联字段。
|
||
- 合并结果能够在任务完成后归档到 MinIO 的设计和主要代码路径已经建立。
|
||
|
||
### 2.8 模型推理与模型对比
|
||
|
||
- 已实现推理模型列表、创建、详情和删除入口。
|
||
- 已实现模型加载、卸载、服务启动、服务状态查询和对话调用。
|
||
- 已实现模型对比任务及多模型聊天相关接口。
|
||
- 已增加推理失败重试、停止和资源释放的处理路径。
|
||
- 已支持根据页面选择的算力节点准备模型缓存,兼容训练时所选节点优先的业务要求。
|
||
- Compute Agent 已提供本地推理会话和模型缓存状态接口。
|
||
|
||
### 2.9 模型评测
|
||
|
||
- 已实现评测任务列表、创建、详情和删除。
|
||
- 已实现评测维度管理和评测规则配置页面。
|
||
- 已建立评测任务、评测维度、对比任务等数据库表。
|
||
- 已支持选择模型、数据集、评测维度、算力节点和 GPU 的基础流程。
|
||
- 已接入 Compute Agent 执行评测任务,并保存评测结果和报告相关元数据。
|
||
|
||
### 2.10 数据存储策略
|
||
|
||
- 已建立 `storage_objects`、`storage_cache_jobs` 等 MinIO 元数据和缓存任务表。
|
||
- 已建立 MinIO 对象上传、下载、预签名 URL 和节点缓存准备的主要接口。
|
||
- 已采用分层策略:
|
||
- 小型 JSON、JSONL、CSV、任务参数快照、预览数据保留在数据库,降低频繁预览的 MinIO 延迟。
|
||
- 模型权重、训练产物、评测报告和大文件使用 MinIO。
|
||
- 小型 PDF、DOCX、XLSX 仍优先存 MinIO,以保留原始二进制文件内容。
|
||
- 已增加 `data_convert_tasks.output_content`,用于保存小型转换结果,避免所有小结果都依赖 MinIO。
|
||
- Backend 和离线包中的 `000_full_init.sql` 已同步,当前两份初始化脚本内容一致。
|
||
|
||
## 三、部分完成、仍需完善的功能
|
||
|
||
### 3.1 MinIO 统一数据源尚未完全闭环
|
||
|
||
当前 MinIO 已成为模型、大文件和跨节点资源的主存储方向,但仍保留以下兼容路径:
|
||
|
||
- Compute Agent 仍有本地文件上传、导入本地模型和扫描本地模型目录的旧接口。
|
||
- 部分历史数据仍使用数据库中的 `content` 或 `output_content` 字段,这是当前已确认的小文件性能策略,不是错误,但必须统一记录来源、大小、校验值和版本。
|
||
- Compute Agent 节点侧的大文件上传已改为流式读取;Backend 端部分历史上传/下载路径仍未完成统一的分片传输。
|
||
- MinIO 对象和业务资源之间采用多态 `resource_type/resource_id` 关联,数据库没有直接外键,删除和数据一致性需要应用层保证。
|
||
- 删除业务资源后,对应 MinIO 对象的延迟清理、失败重试和孤儿对象扫描尚未形成完整闭环。
|
||
|
||
### 3.2 MinIO 预签名接口的权限边界
|
||
|
||
资源写权限、服务端对象 Key、上传完成确认和对象大小校验已经完成;仍需补充 Content-Type 白名单、对象过期回收和完整审计事件。
|
||
|
||
### 3.3 激活版本和跨节点资源版本仍需加强
|
||
|
||
数据集已经有 `active_version_id` 和版本表,但以下场景仍需补充:
|
||
|
||
- 训练、评测、模型对比和权重合并已在任务创建时固化资源版本 ID;推理服务启动和导出任务仍需统一补齐。
|
||
- 同一文件名的不同版本不能只依靠文件名同步,应使用资源 ID、版本 ID 和对象 Key 组成唯一定位。
|
||
- 已创建任务在后续切换激活版本后,不能被意外切换到新版本。
|
||
- 已为资源副本保存版本、对象 ID 和本地路径;对象 ETag/校验值及多文件 manifest 仍需补齐。
|
||
- 历史版本的数据库内容回退和 MinIO 对象回退逻辑还需要补全并增加测试。
|
||
|
||
### 3.4 权限 2.0 尚未完全落地
|
||
|
||
已有用户、角色、权限码、ACL、审批和审计基础,但仍存在以下差距:
|
||
|
||
- 租户、用户、资源、算力节点、模型、数据集之间的隔离规则没有全部在 SQL 查询层统一执行。
|
||
- 项目空间设计已经讨论过取消,但数据库中仍保留 `projects`、`project_members` 等历史结构,需要明确兼容策略和最终迁移方式。
|
||
- 训练创建的模型、数据集和训练任务之间的联合权限约束还没有完全统一。
|
||
- 评测、推理、模型合并、导出、缓存准备等动作需要逐一校验资源读权限和操作权限。
|
||
- 前端按钮权限已经有基础实现,但不能替代后端鉴权;仍需要对所有关键动作进行后端默认拒绝校验。
|
||
- 审批拦截范围、管理员豁免规则和跨租户资源访问规则需要形成可执行矩阵。
|
||
|
||
### 3.5 模型合并、导出和评测报告闭环不足
|
||
|
||
- 权重合并前自动准备 Base Model 和 Adapter 的主要路径已建立,但失败时的清理、重试和幂等性仍需加强。
|
||
- 合并结果归档已增加失败状态和服务重启后的补偿轮询;仍需加入独立归档队列和幂等对象清单,降低重复扫描成本。
|
||
- 模型导出任务目前有查询模型和表结构,但完整的创建、执行、进度、失败重试和下载闭环尚未完成。
|
||
- 评测结果和报告字段已经存在,但报告对象归档、报告下载、报告版本和报告与任务的稳定关联仍需验证。
|
||
- 评测指标配置和执行器返回指标之间仍需要强类型映射,避免前端显示为通用的 `custom`。
|
||
|
||
### 3.6 GPU 资源分配需要统一到所有任务类型
|
||
|
||
- 训练已经有较完整的节点/GPU 选择和预检流程。
|
||
- 推理和评测已经出现节点选择、缓存准备和 GPU 选择的接入代码,但还需要确认从页面选择到 Compute Agent 启动参数、进程环境变量和释放逻辑的全链路生效。
|
||
- 需要防止同一张 GPU 被多个任务绕过调度锁重复占用。
|
||
- 需要处理服务异常退出、Backend 重启、Compute Agent 重启后的分配回收和状态对账。
|
||
- 训练详情中的显存使用量、GPU 使用率等指标依赖 Compute Agent 上报,仍需要校验采样时间、单位、空值和任务对应关系。
|
||
|
||
## 四、尚未完成的功能
|
||
|
||
以下功能在当前代码中没有形成可验收的完整闭环,或仍处于设计/基础代码阶段:
|
||
|
||
1. **完整的租户隔离和资源继承模型**:核心列表、详情、下载、缓存、训练、推理、评测和导出接口已补齐基础租户/ACL校验;历史 NULL 租户归属仍需专项迁移。
|
||
2. **项目取消后的正式数据迁移方案**:当前保留项目表作为兼容结构,正式删除项目设计前仍需为历史数据生成归属迁移和回滚脚本。
|
||
3. **预签名上传策略的完整约束**:已完成 Content-Type、大小、过期时间、Key 白名单、资源写权限、对象存在性和真实 SHA-256 校验;定时清理过期未完成对象仍需接入运维调度。
|
||
4. **MinIO 对象生命周期管理**:已提供软删除清理、失败记录/重试、孤儿扫描和管理员清理入口;自动定时执行策略需由部署环境接入。
|
||
5. **Compute Agent 缓存治理**:已完成容量上限、LRU、TTL、保护窗口、版本/校验清单和状态查询;运行中任务动态保护和磁盘告警仍需结合生产指标系统。
|
||
6. **统一的资源归档编排器**:训练、合并、导出、评测已纳入重启补偿轮询和 MinIO 归档;独立消息队列和大规模断点分片仍属于生产增强项。
|
||
7. **模型导出完整流程**:已完成后端创建、节点准备、CPU 导出、量化参数、任务记录、制品血缘、归档轮询、权限和前端按钮;真实大模型多格式压力测试待专用环境执行。
|
||
8. **流式和分片文件传输**:数据集单文件下载、Compute Agent 上传/下载已采用流式处理;多文件 ZIP 和超大对象的分片上传仍需继续增强。
|
||
9. **生产级 MinIO 安全和高可用**:开发环境接入和故障快速失败已完成;默认密钥替换、TLS、网络隔离、Console 隔离、容量监控、备份恢复需在生产部署阶段实施。
|
||
10. **完整的端到端测试和持续集成**:已新增前端构建、后端编译和存储安全测试 CI 基线;跨租户、多节点、多 GPU 并行压力和故障注入仍需扩展执行矩阵。
|
||
11. **统一数据库迁移体系**:已形成 005/006/007 幂等增量迁移并加入运行时兼容执行;后续可再替换为 Alembic 等正式迁移工具以满足生产审计要求。
|
||
|
||
## 五、需要优化的功能
|
||
|
||
### 5.1 后端响应性能
|
||
|
||
- 页面列表接口需要避免每条记录重复查询用户、资源、MinIO 元数据和 Compute 节点状态。
|
||
- MinIO 的 Bucket 检查、对象 Head 和预签名生成应使用连接复用、短期缓存和批量查询。
|
||
- 训练、推理、评测页面不应通过过短间隔轮询大量详情接口,应按任务状态动态退避,并在完成后停止轮询。
|
||
- 对 dashboard、节点健康、GPU 状态等高频数据应区分实时数据和缓存数据。
|
||
- 后端日志轮询和健康检查日志需要继续降噪,仅在状态变化、失败或达到较长周期时输出。
|
||
|
||
### 5.2 前端加载和交互
|
||
|
||
- 列表页面应区分首屏 loading、刷新 loading、操作 loading,避免整页长时间无反馈。
|
||
- 推理、评测、训练详情应使用统一的任务状态刷新策略和超时提示。
|
||
- 前端仍有 FontAwesome 在线资源解析警告,应清理对外部网络文件的依赖,保证离线环境打开速度。
|
||
- 应继续拆分首屏大体积 chunk,并减少一次性加载不相关页面组件。
|
||
- GPU 选择组件需要明确显示空闲、占用、不可达、预留和已分配状态。
|
||
- 错误提示应携带资源名称、节点名称、版本和下一步处理建议,减少只显示 500/404 的情况。
|
||
|
||
### 5.3 训练、推理和评测可靠性
|
||
|
||
- 所有任务创建前应执行同一套资源权限、版本存在性、MinIO 可用性和 GPU 原子分配校验。
|
||
- 任务创建接口应支持幂等键,避免前端重复点击造成重复任务。
|
||
- 节点不可达时应快速失败或进入可见的等待状态,不能让页面长时间无反馈。
|
||
- 失败重试应区分网络瞬时失败、资源不足、模型文件缺失、参数错误和执行器失败。
|
||
- 任务停止后必须释放 GPU 分配、推理端口、缓存锁和临时目录。
|
||
|
||
### 5.4 数据和模型一致性
|
||
|
||
- 每个对象都应保存大小、校验值、版本 ID、来源、创建者、租户和引用状态。
|
||
- 数据库中的小文件内容和 MinIO 对象不能同时被当作可独立修改的主副本;需要明确唯一写入入口。
|
||
- 数据集激活版本变更需要留下审计记录,并影响后续任务创建但不改变已创建任务。
|
||
- 模型权重、Adapter、合并结果和导出结果需要形成完整血缘关系。
|
||
|
||
## 六、数据库和初始化脚本状态
|
||
|
||
当前 `backend/app/db/sql/000_full_init.sql` 已包含以下主要类别:
|
||
|
||
- 用户、模型、训练模型、模型血缘、模型产物、模型导出任务。
|
||
- 数据集、数据集文件、数据集版本、数据集记录。
|
||
- 算力节点、GPU、GPU 分配、调度锁、Compute Job。
|
||
- 资源副本、资源同步任务、MinIO 对象、缓存任务。
|
||
- 评测任务、评测维度、模型对比任务。
|
||
- 租户、项目兼容表、项目成员、角色、会话、ACL。
|
||
- 审批模板、审批实例、审批步骤、审计日志、留存策略。
|
||
- 数据处理任务、源文件、预览项、处理结果、数据转换任务。
|
||
|
||
已确认的近期字段包括:
|
||
|
||
- `model_artifacts.storage_object_id`
|
||
- `model_artifacts.storage_backend`
|
||
- `dataset_files.storage_object_id`
|
||
- `data_convert_tasks.output_content`
|
||
- `data_convert_tasks.output_storage_object_id`
|
||
- `data_convert_tasks.storage_backend`
|
||
- `eval_tasks.report_storage_object_id`
|
||
|
||
离线包中的 `docker/offline/src/backend/app/db/sql/000_full_init.sql` 应与主工程初始化脚本保持同步。需要注意:
|
||
|
||
- 初始化 SQL 主要用于新数据库或新数据卷;已有数据库不能仅靠重启容器自动获得全部新字段。
|
||
- 生产/测试数据库需要执行可追踪的迁移脚本,并在迁移前备份或生成结构快照。
|
||
- `ensure_schema` 类运行时补字段逻辑只能作为兼容兜底,不能替代正式迁移。
|
||
- 后续如果正式移除项目设计,需要先完成数据归属迁移,再决定是否删除历史表,不能直接从初始化 SQL 中删除表。
|
||
|
||
## 七、当前验证结果
|
||
|
||
### 7.1 2026-08-19 本轮按计划落地内容
|
||
|
||
- P0 MinIO 预签名上传已增加资源存在性、资源写权限、管理员基座模型写权限、资源版本和对象 Key 前缀校验;新增上传完成确认接口,会校验 MinIO 对象存在、大小和状态后再标记为可用。
|
||
- 训练、评测、模型对比和权重合并任务会保存创建时的租户信息与资源版本快照,后续切换数据集激活版本不会改变已创建任务的输入版本。
|
||
- 数据集、评测任务、训练任务和模型对比列表增加租户范围过滤;用户表、模型/数据集创建入口补齐租户归属;数据转换资源补充所有者权限映射。
|
||
- Compute Agent 准备缓存后会回写资源副本的版本、MinIO 对象和本地路径;缓存支持可选容量上限、按访问时间淘汰非临时文件,并提供当前占用量和上限状态。
|
||
- 训练产物、权重合并结果和评测报告增加 MinIO 归档、失败状态记录以及 Backend 重启后的补偿轮询;离线部署源码已同步对应逻辑。
|
||
- Compute Agent 大文件上传已改为流式读取,避免将整个文件一次性读入内存;离线 Compute Agent 同步完成。
|
||
- 增加 `005_storage_progress_migration.sql` 增量迁移脚本,并修复 `000_full_init.sql` 中旧数据库执行时索引早于字段补齐的问题;主工程和离线初始化脚本已同步。
|
||
- 增加 `MINIO_PRESIGN_MAX_BYTES` 配置和上传 Content-Type 白名单;首次数据库 schema 检查移出 Compute Poller 的 Uvicorn 事件循环,避免远程 PostgreSQL 慢连接拖垮健康检查;轮询相同失败改为 300 秒限频记录,并跳过已标记 offline 节点。
|
||
- 前端 `npm run build` 已通过;容器内 MinIO Key 越权校验专项测试为 `5 passed`,Backend 和 Compute Agent 重启后均为 healthy。
|
||
|
||
已完成的静态和局部验证:
|
||
|
||
- Backend 和离线 Backend 源码 `compileall` 检查通过。
|
||
- MinIO 分层策略冒烟验证通过:小型 JSON/JSONL 可落数据库,小型二进制和超过阈值的内容进入 MinIO。
|
||
- 主工程和离线包初始化 SQL 已做同步检查,内容一致。
|
||
- 前端此前已完成 `npm run build` 类型错误修复,构建剩余问题主要是非阻断的资源/分包警告。
|
||
- 已对训练日志、数据集 JSON/JSONL 统计、MinIO 资源准备等重点链路进行过问题修复。
|
||
- 当前 WSL 运行验证中 Backend、Compute Agent、MinIO 均为 healthy;`gpu-node-02`(`172.25.179.69:19100`)连接、GPU 0 分配和任务执行均正常。`gpu-node-01` 的历史地址不可达,已通过健康检查标记为 offline,轮询器不再重复轮询其历史任务。
|
||
|
||
### 7.2 2026-08-19 gpu-node-02 真实流程验证
|
||
|
||
- 训练:使用 `qwen3.5-0.8B` + `test_data_0817`,任务 `ft_172a2da65140` 完成,GPU 0 使用期间可看到显存、利用率、温度和进程,结束后恢复 idle;24 个训练产物已归档 MinIO。
|
||
- 资源快照:任务 `ft_d93b0fdae1c9` 创建时已保存数据集 `ds_8f6b8c5714c7` 的活动版本 `file_d550c2128722_v1`。
|
||
- 训练曲线:任务 `ft_d93b0fdae1c9` 通过 `logging_steps=1` 生成 3 个 loss/epoch/learning-rate/grad-norm 数据点,并生成 `training_loss.png`;后端解析器已兼容带引号数字格式。
|
||
- 权重合并:任务 `merge_1dc15a290810` 完成,基座模型路径、合并路径已回写,8 个合并模型文件归档 MinIO。
|
||
- 推理:任务 `cmp_abdf0762869d` 在 GPU 0 加载 `qwen3.5-0.8B` 成功,对话接口返回正常;卸载后 GPU 恢复 idle。
|
||
- 评测:任务 `eval_3c3f84263e23` 完成 2 条样本评测,报告、样本明细和基础指标已落库;GPU 恢复 idle。评审模型 HTTP 400 导致评审分数为 0,属于评审模型接口配置问题,算力评测链路本身已跑通。
|
||
|
||
### 7.3 多 GPU、MinIO 故障和跨用户权限专项验证
|
||
|
||
- 多 GPU 调度开发:新增 `gpu_reservations` 表,评测和推理在远程提交/加载前与训练统一纳入数据库原子预留;失败、停止、删除、节点不可达和卸载路径自动释放预留。当前 `gpu-node-02` 只有 GPU 0,已通过同卡“推理预留后评测抢占”测试,评测被明确拒绝,释放后 GPU 恢复 idle。多节点、多卡的真实并行测试待增加第二个可达节点和多卡节点后执行。
|
||
- 调度锁优化:调度锁改为事务内持有并在提交前释放,避免一次调度成功后后续请求等待 30 秒 TTL;schema 初始化增加 PostgreSQL advisory lock,避免轮询器与首个请求并发初始化造成死锁。
|
||
- MinIO 故障注入:停止 `yg-ft-minio` 后,`GET /modelTF/health` 返回 HTTP 200 且 `storage.status=unavailable`;恢复容器后返回 `storage.status=ready`。MinIO 客户端关闭默认重试链,故障健康探测耗时从约 6 秒降至约 0.3 秒。
|
||
- 跨用户权限:创建临时用户 `qa_user_0819`,未授权访问管理员数据集返回 403;授予资源 `read/download` ACL 后列表和详情可访问;撤销 ACL 后再次返回 403;非管理员创建用户返回 403。测试用户已删除,未遗留测试 ACL 或 GPU 预留。
|
||
- 用户管理接口已补齐管理员依赖,创建、列表、修改、删除和重置密码不再允许普通用户调用。
|
||
|
||
当前不能据此宣称“全量功能测试通过”:
|
||
|
||
- 现有部分自动化测试仍保留旧的本地文件或旧 MinIO 行为假设,需要按当前分层存储策略更新。
|
||
- 本轮已完成当前 WSL Docker 容器健康检查、`gpu-node-02` 单节点真实流程、单卡冲突、MinIO 故障恢复和跨用户 ACL 专项验证;多节点、多卡的真实并行测试仍需要第二个可达节点和多卡节点。
|
||
|
||
- 本轮专项安全测试为 `5 passed`;全量 pytest 仍未执行完毕,需要按测试类别拆分并设置超时。
|
||
|
||
### 7.4 本轮 11 项未验证能力的补齐结果
|
||
|
||
- 租户管理接口已统一要求管理员身份;模型制品、模型血缘、导出任务、评测报告和 MinIO 资源清单均增加资源级访问校验。
|
||
- 新增 `POST /modelTF/model-manage/export`,导出沿用节点选择、MinIO 缓存准备、GPU/调度约束和归档轮询;导出结果记录到 `model_export_jobs`,并建立导出制品与模型血缘。
|
||
- 新增 `GET /modelTF/model-eval/{task_id}/report`,优先流式返回 MinIO 报告,历史任务无归档对象时返回数据库报告兼容结果。
|
||
- 新增 `GET /modelTF/storage/resources/{resource_type}/{resource_id}/manifest`、管理员对象清理和孤儿扫描接口;预签名上传增加过期时间和真实 SHA-256 内容校验。
|
||
- Compute Agent 增加缓存 TTL、缓存保护窗口和元数据清单;超过 TTL 的非保护缓存会在状态检查时清理,容量淘汰会跳过保护中的资源。
|
||
- 数据集单文件下载改为 MinIO 流式传输,避免 Backend 一次性载入完整大文件;训练、合并、导出、评测仍由统一轮询器负责重启后的归档补偿。
|
||
- 新增 `007_platform_completion.sql`,并已加入运行时兼容迁移;主工程和 `docker/offline/src` 的源码及初始化 SQL 已同步。
|
||
- 以上为代码闭环和单节点验证;生产级 MinIO TLS/HA、第二节点/多卡并行压力测试、全量 CI 和历史项目数据正式迁移仍属于上线前专项工作。
|
||
|
||
## 八、下一阶段开发计划
|
||
|
||
### P0:安全与数据正确性
|
||
|
||
1. 为预签名上传补充 Content-Type、大小上限、过期对象清理和上传完成审计;当前已完成 Key、资源写权限、对象存在性和大小校验。
|
||
2. 将资源版本快照继续接入推理服务启动、模型导出和缓存准备的所有入口,并增加版本切换回归测试。
|
||
3. 完成模型导出接口的后端权限、租户范围和审计闭环。
|
||
4. 补充历史数据租户归属迁移;当前新建资源和主要任务列表已完成租户过滤,历史 NULL 租户仍按兼容策略处理。
|
||
|
||
### P1:跨节点可靠性
|
||
|
||
1. 将当前资源副本字段升级为完整 manifest,记录每个文件的校验值、大小、目标节点路径和准备时间。
|
||
2. 完善推理模型缓存的重启对账、失效版本清理和服务级重试;训练、合并、评测归档已具备补偿轮询基础。
|
||
3. GPU 原子分配、异常回收和任务释放已完成基础闭环;下一步补充多节点重连对账及多卡并行压力测试。
|
||
4. 增加缓存 TTL、运行任务保护、磁盘占用告警和可视化清理入口;当前已实现可选容量上限和按访问时间淘汰。
|
||
5. 增加 MinIO 对象引用清理、孤儿对象扫描和软删除回收任务。
|
||
|
||
### P2:性能与用户体验
|
||
|
||
1. 优化页面列表接口和高频轮询,采用批量查询、短期缓存和动态退避。
|
||
2. 将大文件上传/下载/复制改为流式或分片传输。
|
||
3. 统一前端任务状态组件、loading、超时、重试和错误诊断信息。
|
||
4. 处理前端离线资源警告,继续拆分首屏 chunk。
|
||
5. 统一 GPU 状态展示及训练指标采样时间、单位和空值处理。
|
||
|
||
### P3:工程化和上线准备
|
||
|
||
1. 建立正式数据库版本迁移机制和离线升级脚本。
|
||
2. 增加 CI:前端类型检查/构建、Backend 单元测试、Compute Agent 测试、SQL 新库初始化测试。
|
||
3. 增加第二个可达节点/多卡节点后执行多节点端到端并行测试;MinIO 故障注入基础测试已完成。
|
||
4. 完善 MinIO TLS、密钥管理、网络隔离、监控、备份和恢复方案。
|
||
5. 建立生产运行手册,包括首次部署、升级、回滚、数据库迁移、对象清理和故障处理。
|
||
|
||
## 九、阶段验收标准
|
||
|
||
完成下一阶段后,至少应满足:
|
||
|
||
- 用户只能看到和操作其所属租户授权的模型、数据集、训练任务、推理服务和评测任务。
|
||
- 任何任务创建都能明确记录用户、租户、资源版本、算力节点、GPU 列表和 MinIO 对象版本。
|
||
- 同一个节点的同一张 GPU 不能被两个活动任务同时分配。
|
||
- MinIO 临时不可用时,任务进入可解释的等待/失败状态,并能按策略重试,页面不会无限等待。
|
||
- Backend 或 Compute Agent 重启后,任务、缓存、GPU 分配和归档状态可以对账恢复。
|
||
- 训练、合并、评测和推理产物都能在 MinIO 中找到,并且可以通过权限校验后的接口下载或使用。
|
||
- 删除资源后不会继续出现在普通列表中,关联对象能够按引用状态延迟清理并留下审计记录。
|
||
- 新数据库初始化和已有数据库迁移后,所有业务接口不再因为缺表或缺字段启动失败。
|
||
- 离线部署不依赖外部字体、图标或 CDN,前端首屏和核心业务操作在无网络环境下可用。
|
||
|
||
## 十、相关文件索引
|
||
|
||
- 平台架构:[platform-architecture-requirements.md](./platform-architecture-requirements.md)
|
||
- 权限设计:[permissions-design.md](./permissions-design.md)
|
||
- MinIO 与 Compute 缓存方案:[minio-compute-cache-plan.md](./minio-compute-cache-plan.md)
|
||
- 平台治理菜单设计:[platform-governance-menu-design.md](./platform-governance-menu-design.md)
|
||
- 数据处理设计:[data-process-design.md](./data-process-design.md)
|
||
- 数据库初始化脚本:[../backend/app/db/sql/000_full_init.sql](../backend/app/db/sql/000_full_init.sql)
|
||
- 离线部署目录:[../docker/offline](../docker/offline)
|
||
|