Files
YG_FT/README.md
wuyongtao 2c1e08a271 feat: 重构 Docker 配置结构,添加 compute 模块及新增文档
- 将 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>
2026-07-20 14:59:31 +08:00

140 lines
6.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# YG_FT 模型微调平台
YG_FT 是一个面向企业治理场景的完整模型微调平台,覆盖用户中心、多租户、项目隔离、数据集管理、模型管理、训练任务、评测、推理、审批流、审计留存、算力调度和训练引擎适配。当前前端已存在基础页面,后端与算力平台已按多人协作开发方式建立工程骨架。
## 总体架构
```text
YG_FT/
frontend/ # 前端应用,承载训练平台控制台页面
backend/ # FastAPI 应用平台后端
app/
api/v1/ # 对前端暴露的 REST API
core/ # 配置、日志、中间件、权限等基础能力
db/ # 数据库连接、迁移、事务工具
modules/ # 业务模块目录
schemas/ # Pydantic 入参/出参模型
services/ # 跨模块应用服务
workers/ # 后台任务入口
requirements.txt # 后端 Python 第三方依赖
compute/ # 算力平台与训练框架适配层
api/ # 内部 Compute API
agent/ # 单机多 GPU 调度与进程管理
engines/llama_factory/ # LLaMA-Factory 适配器
file_gateway/ # 本地文件上传、下载、导入、产物管理
docs/ # 需求、接口、数据库、开发计划和部署文档
docker/ # Nginx 等容器化配置
```
## 平台分层
| 层级 | 职责 | 主要目录 |
| --- | --- | --- |
| 前端控制台 | 用户操作入口、任务看板、项目/模型/数据集/训练/审批/审计页面 | `frontend/` |
| 应用平台后端 | 用户中心、多租户、RBAC/ABAC、项目隔离、元数据、审批流、审计、API 编排 | `backend/` |
| 算力平台 | GPU 发现、资源锁定、训练进程管理、日志采集、产物归档、任务状态回传 | `compute/` |
| 训练引擎 | 当前固定接入 LLaMA-Factory预留其他训练平台适配标准 | `compute/engines/` |
| 数据层 | PostgreSQL、Redis、本地文件存储、日志归档 | `docs/postgres-schema.sql` |
## 关键能力
- 多租户:租户级数据隔离、租户配置、租户成员和角色。
- 权限控制:支持项目、模型、数据集级隔离,后续可扩展到字段级和操作级策略。
- 审批流:覆盖数据集发布、模型发布、训练资源申请、推理服务上线等企业流程。
- 审计留存:操作审计、安全审计、审批审计、任务审计,支持留存周期策略。
- 训练任务:训练参数管理、单机多 GPU 调度、任务状态同步、训练日志、产物管理。
- 引擎适配:默认 LLaMA-Factory预留统一 Engine Adapter 接口接入其他微调框架。
- 文件存储:当前使用本地磁盘,按租户/项目/数据集/任务分区。
- 日志采集:后端 JSON Lines 日志,主日志和错误日志拆分,便于 ELK/日志平台采集。
## 后端启动
```bash
cd backend
python -m venv .venv
.venv\Scripts\activate
pip install -r requirements.txt
uvicorn app.main:app --reload
```
默认健康检查:
```text
GET /api/v1/health
```
## 日志
后端日志模块位于 `backend/app/core/logging.py`,说明文档见:
- `docs/backend-logging.md`
默认输出:
```text
logs/backend-YYYY-MM-DD.log
logs/error-YYYY-MM-DD.log
```
日志格式为 JSON Lines单个文件不超过 20MB只保留最近 10 天。
## 主要文档
- `docs/platform-architecture-requirements.md`:平台需求、功能模块、页面补全建议。
- `docs/backend-api-design.md`FastAPI 接口分组、参数定义、权限说明。
- `docs/postgres-schema.sql`PostgreSQL 数据库脚本,包含权限、用户中心、多租户、审批、审计等模型。
- `docs/system-development-plan.md`多人协作开发计划按前端、后端、DB、部署拆分。
- `docs/backend-logging.md`:后端日志模块使用说明。
- `docs/deployment-plan.md`:后期部署方案,覆盖单机算力服务器部署与应用/算力分离部署。
- `docs/demo-development-plan.md`:可演示 Demo 开发计划覆盖前端、后端、DB、Compute Simulator、GPU 和 LLaMA-Factory 适配。
- `docker/README.md`Docker 部署入口,包含应用服务器和算力服务器两套 Compose 使用方式。
## 部署模式
平台支持两种主要部署模式:
1. 所有服务部署在算力服务器:适合 PoC、内网试点、小团队单机多 GPU 使用。
2. 应用服务和算力/训练服务独立部署:适合企业生产环境,应用平台部署在业务服务区,算力平台和 LLaMA-Factory 部署在 GPU 服务器。
生产环境建议采用第二种模式。算力平台与训练框架应部署在 GPU 算力服务器上,应用平台不直接控制 GPU 进程,而是通过内部 Compute API 调度训练任务。
详细方案见 `docs/deployment-plan.md`
## Docker 部署入口
应用服务器:
```bash
cd docker/app
cp .env.example .env
docker compose --profile build run --rm frontend-builder
docker compose up -d --build
```
算力服务器:
```bash
cd docker/compute
cp .env.example .env
docker compose up -d --build
```
两套 Compose 均采用代码外挂方式运行,镜像只包含运行时环境和第三方依赖。详细说明见 `docker/README.md`
项目根目录不再保留 `Dockerfile``docker-compose.yml`,部署时统一进入 `docker/app``docker/compute` 目录执行。
当前 Docker 约定:
- PostgreSQL/Redis 开发阶段使用项目自带 Compose 服务,生产阶段保留切换企业统一基础设施的配置入口。
- 算力服务器上的 LLaMA-Factory 使用宿主机目录挂载,默认 `/opt/LLaMA-Factory`
- 应用平台通过定时轮询 Compute API 同步训练状态,默认不要求算力服务器回调应用服务器。
- 多算力节点阶段,每台单机多 GPU 服务器都独立部署 `docker/compute`、Compute API、Agent、File Gateway 和 LLaMA-Factory节点之间默认不互访由应用平台通过 `compute_nodes``resource_replicas``resource_sync_jobs` 统一调度与同步。
## 后续开发原则
- 接口实现优先遵循 `docs/backend-api-design.md`
- 数据库实现优先遵循 `docs/postgres-schema.sql`,后续通过 Alembic 迁移管理变更。
- 前端页面与后端接口、数据库表之间的映射以文档中的“对应页面/功能模块”为准。
- 训练引擎适配必须通过 `compute/engines/` 下的标准接口,不在应用平台后端直接拼接训练命令。
- 敏感信息不得写入日志,生产环境密钥通过环境变量或密钥管理系统注入。