# 模型训练平台架构与功能需求设计

> 本文基于当前前端页面、已有接口/数据库设计，以及用户补充的 6 条约束进行补全。目标是把平台从“单前端原型 + 后端接口草案”扩展为企业可落地的模型训练平台方案。

## 1. 补充需求结论

### 1.1 已确认约束

1. 部署形态：单机多 GPU。
2. 文件存储：本地磁盘。
3. 训练框架：当前固定 LLaMA-Factory，但要预留其他训练平台接入标准。
4. 权限粒度：需要到项目、模型、数据集级隔离。
5. 企业治理：需要多租户、审批流、审计留存周期。
6. 部署边界：算力平台与应用平台分开部署。

### 1.2 对整体设计的影响

- 不能只做页面级 RBAC，需要引入“租户 -> 项目 -> 资源 -> 成员/角色/ACL”的资源权限模型。
- 单机多 GPU 不等于简单指定 GPU ID，需要有 GPU 资源池、锁定、排队、抢占策略和异常释放机制。
- 本地磁盘存储与应用/算力分离存在天然冲突：文件不能只存应用服务器本地，也不能让应用直接读算力服务器目录。建议将训练文件、模型文件、日志文件统一落在算力节点本地磁盘，由算力平台提供文件网关 API；应用平台只保存元数据和访问路径。
- LLaMA-Factory 应作为第一个训练引擎插件，而不是写死到业务流程里。后续接入其他平台时只需实现同一套训练引擎协议。
- 审批流、审计和保留策略必须从第一版进入数据模型和接口，否则后期补会牵动大量资源表。

## 2. 总体架构设计

### 2.1 逻辑分层

```mermaid
flowchart LR
  U["用户浏览器"] --> APP["应用平台 Web / FastAPI"]
  APP --> DB["PostgreSQL"]
  APP --> REDIS["Redis / 任务队列"]
  APP --> CPAPI["算力平台 API"]
  CPAPI --> AGENT["算力节点 Agent"]
  AGENT --> GPU["单机多 GPU"]
  AGENT --> DISK["本地磁盘工作区"]
  AGENT --> LF["LLaMA-Factory 引擎"]
```

### 2.2 应用平台职责

应用平台负责业务编排和企业治理，不直接执行训练命令：

- 用户、租户、项目、权限、审批、审计。
- 模型、数据集、任务、评测、推理任务元数据。
- 前端 API、OpenAPI、统一认证、统一响应。
- 训练/评测/数据处理任务创建、状态查询、审批校验。
- 与算力平台通信，下发任务、查询进度、拉取日志、下载产物。

建议部署组件：

- Nginx：静态前端与反向代理。
- FastAPI：业务 API。
- PostgreSQL：业务元数据。
- Redis：缓存、任务队列、SSE 状态缓存、分布式锁。
- Worker：审批通知、审计归档、周期清理、异步导出。

### 2.3 算力平台职责

算力平台负责“实际占用 GPU 和磁盘”的事情：

- GPU 发现、资源上报、锁定、释放。
- 本地磁盘工作区管理。
- 数据集文件接收、校验、解压、版本目录管理。
- LLaMA-Factory 命令生成、执行、停止、日志采集。
- 训练产物、LoRA adapter、merged model、checkpoint 管理。
- 推理服务进程管理、端口分配、健康检查。
- 系统/GPU 监控指标采集。

建议部署组件：

- Compute API：只暴露给应用平台访问。
- Compute Agent：本机服务，具备启动/停止进程权限。
- 本地文件网关：上传、下载、预览、断点续传、文件校验。
- Engine Adapter：LLaMA-Factory 适配器，后续扩展其他训练引擎。

### 2.4 应用与算力平台通信

建议统一使用内部 HTTP/gRPC API，并配置服务间认证：

- 应用平台调用算力平台必须携带 `X-Service-Token` 或 mTLS 证书。
- 算力平台不信任前端用户身份，只信任应用平台下发的租户、项目、任务和资源上下文。
- 第一阶段不默认启用算力侧回调，应用平台通过定时轮询 Compute API 同步任务状态；如未来启用回调，必须带签名，避免伪造状态。

核心通信接口：

| 方向 | 接口 | 说明 |
| --- | --- | --- |
| 应用 -> 算力 | `POST /modelTF/compute/jobs` | 创建训练/评测/数据处理/推理任务 |
| 应用 -> 算力 | `POST /modelTF/compute/jobs/{id}/stop` | 停止任务 |
| 应用 -> 算力 | `GET /modelTF/compute/jobs/{id}` | 查询任务状态 |
| 应用 -> 算力 | `GET /modelTF/compute/jobs/{id}/logs` | 拉取日志 |
| 应用 -> 算力 | `GET /modelTF/compute/resources/gpus` | 查询 GPU 状态 |
| 应用 -> 算力 | `POST /modelTF/compute/files/upload` | 上传文件到算力本地磁盘 |
| 应用 -> 算力 | `GET /modelTF/compute/files/{object_id}/download` | 下载文件 |
| 应用 -> 算力 | `GET /modelTF/compute/jobs?status=running` | 定时轮询任务状态、指标、产物索引 |

## 3. 本地磁盘存储设计

### 3.1 存储根目录

由于算力和应用分离，建议文件主存储放在算力节点本地磁盘：

```text
/data/ft-platform/
  tenants/{tenant_id}/
    projects/{project_id}/
      datasets/{dataset_id}/
      models/base/{model_id}/
      models/trained/{trained_model_id}/
      jobs/{job_id}/
        input/
        output/
        logs/
        checkpoints/
        tmp/
```

应用平台数据库保存：

- `storage_type=local`。
- `storage_node_id`。
- `relative_path`。
- `checksum_sha256`。
- `byte_size`。
- `tenant_id/project_id/resource_id`。

### 3.2 文件访问原则

- 前端不直接访问磁盘路径。
- 应用平台生成短时下载凭证，转发或重定向到算力文件网关。
- 预览内容只读取前 N 行或指定区间，避免大文件撑爆 API。
- 大文件上传必须支持分片上传、校验、断点续传。
- 删除操作采用软删除 + 延迟清理，等待审计留存和审批结果。

### 3.3 磁盘配额

配额应分三层：

- 租户配额：总容量、模型容量、数据容量、日志容量。
- 项目配额：可用容量、最大文件大小、最大任务产物保留数。
- 用户配额：可上传文件总量、并发任务产物占用。

超过配额时：

- 禁止新建任务或上传文件。
- 允许下载和清理。
- 提示可清理的 checkpoint、过期日志、失败任务临时目录。

## 4. 单机多 GPU 资源调度

第一版可以先以单个算力节点跑通主链路，但数据模型、接口和页面需要按多算力节点预留。多节点阶段仍然采用“每台 GPU 服务器 = 一个单机多 GPU 节点”的模式，不引入 Kubernetes。

### 4.1 GPU 资源模型

每张 GPU 需要记录：

- `gpu_index`、`uuid`、型号、显存、驱动版本。
- 当前利用率、显存占用、温度、功耗。
- 当前锁定任务、进程 PID、端口。
- 状态：`idle`、`reserved`、`running`、`draining`、`offline`、`error`。

### 4.2 调度策略

第一版建议支持三种模式：

- 手动指定 GPU：兼容当前前端选择 GPU 的模式。
- 自动选择 GPU：按空闲显存、温度、任务队列选择。
- 项目配额调度：项目最多可占用 N 张 GPU，避免单项目占满机器。

训练任务启动流程：

1. 应用平台校验权限、配额、审批状态。
2. 生成任务，状态为 `pending`。
3. 算力平台尝试锁定 GPU。
4. 锁定成功后创建工作区并启动 LLaMA-Factory。
5. Agent 持续上报进度、日志、指标。
6. 任务完成后释放 GPU，登记模型产物。

### 4.3 并发与排队

- 同一 GPU 同时只允许一个训练任务。
- 推理服务可与训练互斥，默认不允许混跑；如后续允许，需要显存保留策略。
- 数据处理如果只调用 API 模型，可以不占 GPU；如果调用本地模型生成，需要占用 GPU。
- 支持任务队列优先级：`low`、`normal`、`high`、`urgent`。
- 高优任务是否可抢占低优任务，需要审批或管理员权限。

### 4.4 多算力节点升级策略

多算力节点阶段的推荐决策：

- 每个可执行训练任务的 GPU 节点都部署 `Compute API`、`Compute Agent`、`File Gateway`、LLaMA-Factory、CUDA/PyTorch 训练环境和本地数据盘。
- 应用服务器可以主动访问所有算力节点的 `Compute API/File Gateway`。
- 算力节点之间默认不互相访问，不做节点间点对点同步；所有调度、状态同步和资源分发由应用平台统一编排。
- 长期坚持每台算力服务器本地磁盘，因此需要 `resource_replicas` 记录数据集、基座模型、checkpoint、adapter、导出模型在哪些节点已有本地副本。
- 调度前必须检查目标节点是否已有模型和数据集副本；缺失时由应用平台通过目标节点 File Gateway 创建同步任务，完成后再启动训练。
- 调度支持自动和手动两种模式：普通用户默认自动调度，管理员/高级用户可手动指定节点、GPU、标签或节点组。

多节点自动调度建议：

1. 过滤 `enabled = true` 且 `scheduler_status = online` 的节点。
2. 按训练引擎、GPU 型号、显存、节点标签、租户/项目配额过滤。
3. 优先选择已存在所需模型/数据集副本的节点，减少跨节点复制。
4. 同等条件下按空闲 GPU、队列长度、节点权重和最近健康检查排序。
5. `draining` 节点不接收新任务，但允许已有任务完成。

## 5. 训练引擎接入标准

### 5.1 引擎抽象

LLaMA-Factory 是第一实现，但业务系统只依赖统一训练引擎接口：

```text
TrainingEngine
  validate_config(config)
  prepare_workspace(job_context)
  build_command(job_context)
  start(job_context)
  stop(job_id)
  parse_progress(log_line)
  collect_artifacts(job_id)
  export_model(job_id, export_config)
```

### 5.2 引擎注册信息

每个训练引擎需要声明：

- 引擎编码：`llama_factory`。
- 支持任务：`SFT`、`DPO`、`CPT`。
- 支持方法：`lora`、`qlora`、`full`。
- 支持模型模板：`qwen`、`llama3` 等。
- 支持数据格式：Alpaca、ShareGPT、DPO pair、pretrain text。
- 支持量化和导出格式。
- 参数 schema。
- 命令模板或启动方式。

### 5.3 LLaMA-Factory 适配要求

LLaMA-Factory 适配器负责：

- 将平台训练参数转换为 YAML/CLI 参数。
- 根据项目工作区生成数据集配置。
- 自动设置 `CUDA_VISIBLE_DEVICES`。
- 解析训练日志中的 loss、epoch、learning_rate、ETA。
- 收集 checkpoint、adapter、merged model、training_args、trainer_state。
- 支持训练停止和失败恢复。

### 5.4 后续接入其他平台的标准

其他训练平台只要实现以下契约即可接入：

- 输入：模型引用、数据集引用、训练配置、资源需求、输出目录。
- 输出：任务状态、进度、日志、指标、产物清单、失败原因。
- 生命周期：`prepare`、`start`、`running`、`stop`、`complete`、`cleanup`。
- 安全：不能越权访问其他租户/项目目录。
- 可观测：必须输出结构化事件和日志。

## 6. 多租户与项目级隔离

### 6.1 租户模型

需要新增租户管理：

- 租户名称、编码、状态。
- 租户管理员。
- 租户资源配额：GPU 并发数、磁盘容量、最大项目数。
- 租户审计策略、保留周期、审批策略。

### 6.2 项目空间

所有业务资源必须归属项目：

- 数据集。
- 模型。
- 训练任务。
- 评测任务。
- 推理任务。
- 数据处理任务。
- 自定义工具。

项目字段：

- 项目名称、描述、所属租户。
- 项目管理员、成员。
- 默认资源权限。
- GPU/磁盘/任务并发配额。
- 项目状态：启用、归档、禁用。

### 6.3 资源级权限

建议采用 RBAC + ACL 混合：

- RBAC 决定用户是否能访问模块，例如能否进入模型管理。
- 项目角色决定用户是否能管理项目内资源。
- 资源 ACL 处理特殊授权，例如某个数据集只给指定成员可读。

项目角色建议：

| 角色 | 权限 |
| --- | --- |
| Project Owner | 项目设置、成员、资源、审批策略全权限 |
| Project Maintainer | 创建/编辑模型、数据集、任务，可发起发布和删除 |
| Developer | 创建训练、评测、推理、数据处理任务 |
| Reviewer | 审批、复核、查看评测结果 |
| Viewer | 只读查看 |

资源权限建议：

- `read`：查看资源。
- `write`：编辑元数据和内容。
- `execute`：用于训练/评测/推理。
- `download`：下载文件和模型。
- `delete`：删除或申请删除。
- `manage_acl`：管理资源授权。

### 6.4 数据隔离要求

- API 查询必须默认带 `tenant_id` 和用户可访问项目范围。
- 数据库所有核心资源表增加 `tenant_id`、`project_id`。
- 本地磁盘路径包含租户和项目 ID，防止路径混用。
- 算力任务上下文必须携带租户/项目，Agent 只允许访问对应工作区。
- 日志、审计、下载链接也必须按租户隔离。

## 7. 企业治理设计

### 7.1 审批流

建议第一版支持可配置审批模板：

| 场景 | 是否建议审批 | 原因 |
| --- | --- | --- |
| 删除数据集 | 是 | 数据不可逆风险高 |
| 删除模型 | 是 | 影响训练/推理依赖 |
| 模型发布为可推理服务 | 是 | 影响生产资源 |
| 停止他人训练任务 | 是或管理员直通 | 影响计算成本和他人工作 |
| 导出模型 | 可配置 | 涉及资产外流 |
| 下载敏感数据集 | 可配置 | 涉及数据安全 |
| 提高 GPU 配额 | 是 | 涉及资源竞争 |

审批流能力：

- 发起审批。
- 指定审批人/审批组。
- 多级审批。
- 通过、驳回、撤回、转交。
- 审批超时提醒。
- 审批结果回写原业务动作。

### 7.2 审计留存周期

建议支持租户级配置：

- 操作审计：默认 180 天，可配置 90/180/365/永久。
- 登录审计：默认 180 天。
- 训练日志：默认 90 天。
- 系统监控：原始采样默认 30 天，聚合指标保留 1 年。
- 模型产物：默认长期保留，删除需审批。
- 临时文件：默认 7 天清理。
- 失败任务工作区：默认 14 天清理。

审计不可被普通管理员物理删除，只能由系统归档任务按策略处理。

### 7.3 安全策略

需要补充：

- API Key 加密存储和脱敏展示。
- 外部数据源密码加密存储或不落库。
- 下载链接短时有效。
- 敏感操作二次确认。
- 审批通过后动作有效期，例如 24 小时内执行。
- IP 白名单和服务间 token。
- 操作审计记录 before/after 数据。

## 8. 需要补全的页面和功能

### 8.1 租户与项目页面

当前前端缺失，建议新增：

1. 租户管理页
   - 租户列表、创建、禁用、配额设置、审计策略。
   - 仅平台管理员可见。

2. 项目空间页
   - 项目列表、创建项目、归档项目。
   - 展示项目资源概览：模型数、数据集数、任务数、磁盘占用、GPU 使用。

3. 项目成员页
   - 添加/移除成员。
   - 设置项目角色。
   - 查看成员最近操作。

4. 项目资源权限页
   - 模型/数据集/任务级授权。
   - 支持按用户、用户组、项目角色授权。

### 8.2 用户中心补全

前端路由已有但页面文件缺失或未完成：

- `PermissionDeniedView.vue`
- `UserSettingsView.vue`
- `UserCreateView.vue`
- `UserPermissionView.vue`

建议功能：

- 用户列表、创建、禁用、重置密码。
- 角色管理。
- 页面权限管理。
- 用户所属租户/项目。
- 用户可用 GPU/磁盘配额查看。
- 登录记录和操作审计入口。

### 8.3 审批中心

新增页面：

- 我的申请。
- 待我审批。
- 已办审批。
- 审批详情。
- 审批模板配置。

审批详情需要展示：

- 申请人、申请时间、动作类型、目标资源。
- 变更前后信息。
- 风险提示。
- 审批记录。
- 通过/驳回意见。

### 8.4 算力资源中心

当前只有硬件监控页，建议扩展为算力资源中心：

- GPU 拓扑和状态。
- GPU 当前任务占用。
- GPU 锁定/释放记录。
- 队列中的任务。
- 资源配额：租户/项目/用户维度。
- 算力节点 Agent 状态。
- 算力节点新增/编辑、连接测试、启用/禁用、维护模式。
- 节点权重、标签、训练引擎版本、LLaMA-Factory 健康状态。
- 节点本地资源副本：数据集、模型、checkpoint、adapter 和导出模型缓存。
- 训练引擎健康状态。

### 8.5 文件与存储管理

新增页面：

- 存储总览。
- 租户/项目磁盘占用。
- 大文件列表。
- 临时文件清理。
- Checkpoint 管理。
- 日志保留策略。
- 文件下载审计。

### 8.6 训练引擎管理

新增页面：

- 引擎列表。
- LLaMA-Factory 版本和路径。
- 引擎能力声明。
- 参数 schema 管理。
- 引擎健康检查。
- 引擎接入文档。

### 8.7 任务队列与运行控制

新增页面：

- 全局任务队列。
- 项目任务队列。
- 任务优先级调整。
- 任务重试。
- 任务停止审批。
- 失败任务诊断。

### 8.8 模型发布与服务治理

当前推理/对比页面已有基础能力，但缺少企业化发布能力：

- 模型发布申请。
- 推理服务实例配置。
- 端口、GPU、并发、超时、最大上下文限制。
- 服务启停记录。
- 调用统计。
- 服务下线审批。

## 9. 后端模块补全

### 9.1 新增核心模块

| 模块 | 职责 |
| --- | --- |
| tenant | 租户管理、租户配额、租户策略 |
| project | 项目空间、成员、项目角色 |
| resource_acl | 模型/数据集/任务级资源授权 |
| approval | 审批模板、审批实例、审批动作 |
| quota | GPU、磁盘、任务并发配额 |
| compute_gateway | 应用平台与算力平台通信 |
| file_gateway | 本地磁盘文件上传、下载、预览 |
| engine_registry | 训练引擎注册与能力发现 |
| retention | 审计、日志、临时文件保留策略 |

### 9.2 数据模型补充

在前一版 SQL 基础上，应新增或调整：

- `tenants`
- `tenant_users`
- `projects`
- `project_members`
- `resource_acl`
- `approval_templates`
- `approval_instances`
- `approval_steps`
- `quotas`
- `quota_usage`
- `compute_nodes`
- `gpu_devices`
- `gpu_allocations`
- `compute_jobs`
- `training_engines`
- `retention_policies`

核心资源表需要补充字段：

- `tenant_id`
- `project_id`
- `visibility`
- `owner_id`
- `approval_status`
- `storage_node_id`

需要调整的已有表：

- `models`
- `trained_models`
- `datasets`
- `dataset_files`
- `data_process_tasks`
- `fine_tune_tasks`
- `eval_tasks`
- `inference_tasks`
- `custom_tools`
- `audit_logs`
- `storage_objects`

### 9.3 接口补充

租户：

- `GET /modelTF/tenants`
- `POST /modelTF/tenants`
- `GET /modelTF/tenants/{id}`
- `PUT /modelTF/tenants/{id}`
- `PUT /modelTF/tenants/{id}/quota`
- `PUT /modelTF/tenants/{id}/retention-policy`

项目：

- `GET /modelTF/projects`
- `POST /modelTF/projects`
- `GET /modelTF/projects/{id}`
- `PUT /modelTF/projects/{id}`
- `POST /modelTF/projects/{id}/archive`
- `GET /modelTF/projects/{id}/members`
- `POST /modelTF/projects/{id}/members`
- `PUT /modelTF/projects/{id}/members/{user_id}`
- `DELETE /modelTF/projects/{id}/members/{user_id}`

资源授权：

- `GET /modelTF/resources/{resource_type}/{resource_id}/acl`
- `PUT /modelTF/resources/{resource_type}/{resource_id}/acl`
- `POST /modelTF/resources/{resource_type}/{resource_id}/share`

审批：

- `GET /modelTF/approvals`
- `POST /modelTF/approvals`
- `GET /modelTF/approvals/{id}`
- `POST /modelTF/approvals/{id}/approve`
- `POST /modelTF/approvals/{id}/reject`
- `POST /modelTF/approvals/{id}/cancel`

算力：

- `GET /modelTF/compute/nodes`
- `GET /modelTF/compute/gpus`
- `GET /modelTF/compute/queue`
- `POST /modelTF/compute/jobs/{id}/retry`
- `POST /modelTF/compute/jobs/{id}/priority`

训练引擎：

- `GET /modelTF/training-engines`
- `GET /modelTF/training-engines/{id}`
- `POST /modelTF/training-engines/{id}/health-check`
- `GET /modelTF/training-engines/{id}/schema`

## 10. 端到端业务流程

### 10.1 数据集上传

1. 用户进入项目空间。
2. 用户创建数据集。
3. 应用平台校验项目写权限和磁盘配额。
4. 前端上传文件到应用平台。
5. 应用平台转发到算力文件网关，保存到项目目录。
6. 算力平台返回文件元数据和 checksum。
7. 应用平台登记数据集文件版本。
8. 审计记录上传行为。

### 10.2 微调训练

1. 用户选择项目、模型、数据集、训练参数和 GPU。
2. 应用平台检查模型/数据集 `execute` 权限。
3. 检查项目 GPU 并发配额。
4. 如果策略要求审批，先创建审批单。
5. 审批通过后创建 compute job。
6. 算力平台锁定 GPU，生成 LLaMA-Factory 配置，启动训练。
7. 训练日志和指标实时回传。
8. 完成后登记 trained model。
9. 如启用自动合并，进入合并任务。
10. 审计记录任务全生命周期。

### 10.3 模型发布

1. 用户选择训练产物。
2. 提交发布申请。
3. 审批通过后算力平台启动推理服务。
4. 分配端口和 GPU。
5. 应用平台登记服务实例。
6. 前端推理页面调用服务。
7. 监控调用量、延迟、错误率、GPU 占用。

## 11. 当前功能完整性评估

补充 6 条需求后，平台设计已经覆盖完整模型训练平台的主链路：

- 数据准备。
- 数据处理。
- 模型登记。
- 微调训练。
- 训练日志和指标。
- 模型合并和导出。
- 模型评测。
- 推理服务。
- 模型对比。
- 用户、权限、租户、项目隔离。
- 审批、审计、保留策略。
- 算力资源调度。

但如果目标是企业级生产平台，还建议继续确认以下缺口。

## 12. 仍需确认的问题

1. 本地磁盘是否在算力服务器上，应用服务器是否完全不保存训练文件？如果应用服务器也要保存上传临时文件，需要确认临时文件保留周期和容量。
2. 单机多 GPU 是否需要支持 MIG、GPU 分片或多进程共享，还是一张 GPU 同一时间只给一个任务？
3. 是否允许训练任务抢占？高优先级任务是否能停止低优先级任务？
4. 是否需要离线导入已有模型和已有数据集目录，还是所有文件都必须从平台上传？
5. 模型发布是否区分“测试服务”和“生产服务”？生产发布是否必须审批？
6. 是否需要数据集脱敏、敏感字段识别和数据质量评分作为内置流程？
7. 是否需要人工评测/人工复核结果沉淀为新数据集？
8. 是否需要训练任务失败后的断点续训？
9. 是否需要 checkpoint 自动清理策略，例如只保留最近 N 个或最好 N 个？
10. 是否需要对外提供标准 API 给其他系统调用训练、评测、推理能力？
11. 是否需要接入企业统一身份认证，例如 LDAP、OIDC、企业微信、钉钉？
12. 是否需要成本核算：按租户/项目统计 GPU 小时、磁盘占用、模型调用量？
13. 多算力节点是否需要节点组、租户绑定节点或项目绑定节点策略？
14. 跨节点资源同步是否需要限速、同步窗口和管理员审批？

## 13. 推荐决策补充

`system-development-plan.md` 已对上述问题给出第一版建议，需求设计以以下决策为准。

1. 本地磁盘主存储放在算力服务器，应用服务器只保留上传临时文件。临时文件默认保留 24 小时，成功转发到算力文件网关后可立即进入清理队列。
2. 第一版不支持 MIG、GPU 分片和多任务共享同一张 GPU。一张 GPU 同一时间只分配给一个训练任务或一个推理服务。GPU 数据模型预留 `partition_type`、`parent_gpu_uuid`、`memory_total_mb`，便于后续扩展 MIG。
3. 第一版不做自动抢占。支持任务优先级和排队；停止他人任务需要审批或平台管理员权限。
4. 多算力节点仍按“单机多 GPU 节点”管理，每个节点独立部署算力服务和 LLaMA-Factory；节点之间不互相访问，由应用平台统一调度和资源同步。
5. 多节点调度默认自动选择节点，同时支持管理员/高级用户手动指定节点；调度优先考虑节点健康、标签、权重、空闲 GPU、队列长度和资源副本是否已存在。
6. 第一版必须支持离线导入已有模型和数据集目录。导入由算力 Agent 扫描、校验、登记，并归属指定租户和项目。
7. 模型发布区分测试服务和生产服务。测试服务项目内可启动并默认限流；生产服务必须审批。
8. 数据脱敏和数据质量评分作为数据处理模块的一等能力进入第一期，先实现规则版脱敏、格式校验、重复率、完整性、长度分布等指标。
9. 人工评测/复核作为第二期功能，但第一期需在数据库和页面入口预留人工复核状态与修订字段。
10. 第一版支持从 checkpoint 手动恢复训练，不做自动失败续训。失败任务可选择 checkpoint 重试。
11. 第一版必须支持 checkpoint 自动清理策略：默认保留最近 3 个、最优 2 个；已发布模型关联 checkpoint 不自动删除；失败任务 checkpoint 默认保留 14 天。
12. 第一版提供内部 API，第二期再开放面向其他系统的标准 API、API Key、限流和 Webhook。
13. 第一版使用本地账号，预留 OIDC/LDAP 字段和认证 provider 抽象；第二期接入企业统一身份认证。
14. 第一版做 GPU 小时、磁盘占用、任务时长、推理调用量等用量统计；第二期再做成本单价和账单核算。

以上决策需要同步反映在接口文档、数据库 SQL、前端页面和部署方案中。第一版实现不再阻塞于这些问题的反复确认，除非实际部署环境与假设明显冲突。

## 14. 页面功能模块映射

本节用于帮助前端、后端、DB 和测试人员理解需求对应到哪些页面与功能模块。页面路径以当前 Vue 路由和新增规划路由为准。

### 14.1 平台入口与全局能力

| 页面模块 | 路由/入口 | 对应需求 | 主要功能 |
| --- | --- | --- | --- |
| 登录页 | `/login` | 用户认证、本地账号、后续预留 OIDC/LDAP | 登录、会话创建、权限加载 |
| 主布局 | `/` | 全局项目上下文、权限控制 | 菜单、顶部状态、项目切换器、用户信息 |
| 无权限页 | `/permission-denied` | 页面权限和资源权限兜底 | 展示无权限原因、返回可访问页面 |
| 服务看板 | `/dashboard` | 平台运行总览 | 服务健康、任务概览、训练统计、用户操作分布 |

### 14.2 租户、项目与权限治理

| 页面模块 | 建议路由 | 对应需求 | 主要功能 |
| --- | --- | --- | --- |
| 租户管理 | `/tenants`、`/tenants/:id` | 多租户、租户配额、留存策略 | 租户列表、创建/禁用租户、配额、审计留存策略 |
| 项目空间 | `/projects`、`/projects/:id` | 项目级隔离、项目资源聚合 | 项目列表、项目概览、资源统计、项目归档 |
| 项目成员 | `/projects/:id/members` | 项目角色 | 添加成员、移除成员、设置 owner/maintainer/developer/reviewer/viewer |
| 资源授权 | `/projects/:id/permissions` 或资源详情弹窗 | 模型/数据集/任务级 ACL | 按用户、项目角色授权 read/write/execute/download/delete/manage_acl |
| 用户中心 | `/user-settings`、`/user-settings/create`、`/user-settings/:id/permission` | 用户、角色、页面权限 | 用户列表、创建用户、禁用、重置密码、分配页面权限和项目 |

### 14.3 数据链路

| 页面模块 | 路由/入口 | 对应需求 | 主要功能 |
| --- | --- | --- | --- |
| 数据集列表 | `/dataset` | 数据集管理、项目隔离 | 列表、搜索、下载、删除审批入口 |
| 数据集创建/编辑 | `/dataset/create`、`/dataset/:id/edit` | 上传、本地磁盘、文件网关 | 创建数据集、上传文件、离线导入、元数据编辑 |
| 数据集预览 | `/dataset/:id/preview` | 文件版本、在线编辑、乐观锁 | 文件预览、版本切换、保存新版本、下载 |
| 数据处理列表 | `/data-process` | 数据处理任务管理 | 任务列表、状态、输出数据集跳转、删除审批 |
| 数据处理创建向导 | `/data-process/create` | 清洗、切片、生成、质量评分、脱敏 | 任务配置、模型选择、源文件/外部源、预览切片、生成、结果编辑、发布数据集 |
| 数据处理详情 | `/data-process/:id` | 处理统计和结果追踪 | 运行信息、处理统计、失败原因、结果明细 |
| 数据转换 | `/data-convert` | JSON/JSONL 转换 | 上传 JSON、转换任务、下载结果 |

### 14.4 模型训练链路

| 页面模块 | 路由/入口 | 对应需求 | 主要功能 |
| --- | --- | --- | --- |
| 模型管理 | `/model-manage` | 模型登记、离线导入、资源 ACL | 基座模型/API 模型列表、用途变更、授权、删除审批 |
| 模型创建/编辑 | `/model-manage/create`、`/model-manage/:id/edit` | 本地模型/API 模型登记 | 选择本地路径、填写 API 模型信息、加密 API Key |
| 权重合并 | `/model-manage/merge` | LoRA 合并、产物管理 | 选择训练产物、合并权重、生成 merged model |
| 微调任务列表 | `/fine-tune` | 训练任务管理 | 任务列表、状态、进度、停止/删除审批 |
| 微调创建 | `/fine-tune/create` | LLaMA-Factory 训练配置、GPU 调度 | 选择模型/数据集/GPU、训练参数、量化导出、提交审批或启动 |
| 训练日志详情 | `/training-log/:id` | 日志、指标、checkpoint、恢复训练 | 日志 tail、loss 曲线、GPU 状态、checkpoint 列表、恢复/重试 |
| 训练引擎管理 | `/training-engines` | LLaMA-Factory 插件化和后续引擎接入 | 引擎列表、能力声明、schema、健康检查 |

### 14.5 评测、推理和发布

| 页面模块 | 路由/入口 | 对应需求 | 主要功能 |
| --- | --- | --- | --- |
| 评测列表 | `/model-eval` | 模型评测 | 评测任务列表、状态、分数、删除 |
| 评测创建 | `/model-eval/create` | 自动评测、LLM Judge、基础指标 | 选择模型/数据集/维度/GPU、配置指标、启动评测 |
| 评测详情 | `/model-eval/:id` | 样本级结果、人工复核预留 | 综合评价、维度汇总、样本评分、错误类型 |
| 评测维度 | `/model-eval/dimension/:id/edit` | 维度和评测 Prompt 管理 | 创建/编辑维度、评分范围、Prompt、启用状态 |
| 推理列表 | `/model-inference` | 测试推理服务 | 推理任务列表、加载/卸载、服务状态 |
| 推理创建 | `/model-inference/create` | 模型服务资源申请 | 选择模型、GPU、端口策略、并发参数 |
| 推理对话 | `/model-inference/chat/:id` | 模型对话 | 单模型流式对话、会话记录 |
| 模型对比 | `/model-compare/chat/:id`、`/model-compare/result` | 多模型对比 | 多模型加载、并行对话、对比结果 |
| 模型发布治理 | `/model-services`、`/model-services/:id` | 测试/生产服务、发布审批 | 测试服务启动、生产发布申请、调用统计、下线审批 |

### 14.6 算力、审批、审计和运维

| 页面模块 | 建议路由 | 对应需求 | 主要功能 |
| --- | --- | --- | --- |
| 算力资源中心 | `/compute`、`/compute/gpus` | 单机多 GPU、资源锁定、队列 | GPU 卡片、任务占用、节点状态、队列、优先级 |
| 存储管理 | `/storage` | 本地磁盘、配额、清理 | 租户/项目占用、大文件、临时文件、checkpoint 清理 |
| 审批中心 | `/approvals`、`/approvals/pending`、`/approvals/mine`、`/approvals/:id` | 审批流 | 我的申请、待我审批、审批详情、通过/驳回/撤回 |
| 审批模板 | `/approval-settings` | 审批策略配置 | 按动作配置审批人、超时、风险级别 |
| 审计中心 | `/audit-logs`、`/login-logs`、`/download-logs` | 操作审计和留存 | 操作审计、登录审计、下载审计、筛选导出 |
| 平台性能 | `/hardware` | 系统监控 | CPU、内存、磁盘、GPU、进程 |
| 系统日志 | `/logs` | 日志查看 | 系统日志、训练日志、tail/offset 查询 |
