🚀 Revolutionary AI Training Platform

训练 GPT 从未如此 简单

基于 karpathy/nanoGPT 的可视化训练平台,让 GPT 模型训练变得简单直观。无论你是深度学习初学者、研究人员还是开发者,都能通过简单的图形界面完成模型训练。
✨ Visual training platform based on karpathy/nanoGPT

🚀 app.py
# ✨ 只需三行代码,启动完整的 GPT 训练平台
# 🎉 就这么简单!打开浏览器即可开始训练
💫 核心功能一览 / Core Features Preview
# 数据处理 data_processor.process_text()
# 模型训练 trainer.start_training()
# 文本生成 model.generate_text()

✨ 简化您的AI开发

🎯 Simplify your AI development workflow

2000
💻 行代码
lines of code saved
3
⚡ 分钟
setup time required
4
🎯 步骤
to start training

🚀 项目 概述

💡 项目简介

Mini-nanoGPT是一个轻量级GPT模型训练平台,集成了从数据处理、模型训练到文本生成的全流程功能。核心亮点在于其精心设计的数据库应用系统,为模型管理提供了稳定可靠的底层支持。

项目采用SQLite作为底层数据库,提供模型注册、配置存储、训练日志和推理历史的完整管理,同时通过直观的界面支持用户友好的操作体验。

主要功能

  • 模型注册与生命周期管理
  • 文本数据处理与分词
  • GPT模型训练与可视化
  • 文本生成与推理
  • 多语言支持(中文/英文)
Training Loss Curve

技术特点

  • SQLite关系型数据库集成
  • 文件系统与数据库同步管理
  • 高效序列化与反序列化
  • 模块化设计与接口抽象

实时训练监控

动态损失曲线展示了模型训练过程中的收敛情况。通过实时监控损失值变化,可以及时调整训练参数。

自适应学习率
根据损失变化自动调整
早停机制
防止过拟合优化
3

核心组件模块:数据处理、模型训练、数据库管理

数据库 设计

数据库架构

项目核心使用SQLite数据库,通过精心设计的表结构实现对模型及其相关资源的高效管理。

DBManager类作为数据库访问层,提供了丰富的API,确保数据库操作的一致性和可靠性。

核心数据表

models

存储模型的基本信息,作为其他表的外键关联基础

training_configs

存储训练配置,JSON格式保存所有训练参数

training_logs

记录训练日志路径,便于日志查询与可视化

inference_configs

存储推理配置,包括推理参数和设置

inference_history

记录模型推理历史,保存生成文本

SQL
-- 数据集管理表
CREATE TABLE datasets(
    id INTEGER PRIMARY KEY,
    name TEXT NOT NULL,
    file_path TEXT NOT NULL,
    tokenizer_type TEXT NOT NULL,
    total_tokens INTEGER,
    created_at TEXT NOT NULL,
    status TEXT DEFAULT 'processed'
);

-- 模型数据集关联表
CREATE TABLE model_dataset_relations(
    model_id INTEGER,
    dataset_id INTEGER,
    created_at TEXT NOT NULL,
    PRIMARY KEY(model_id, dataset_id),
    FOREIGN KEY(model_id) REFERENCES models(id),
    FOREIGN KEY(dataset_id) REFERENCES datasets(id)
);

-- 训练检查点表
CREATE TABLE training_checkpoints(
    id INTEGER PRIMARY KEY,
    model_id INTEGER NOT NULL,
    checkpoint_path TEXT NOT NULL,
    epoch INTEGER NOT NULL,
    step INTEGER NOT NULL,
    loss REAL,
    created_at TEXT NOT NULL,
    FOREIGN KEY(model_id) REFERENCES models(id)
);
                        

关系模型

采用星型模式设计,以models表为中心,通过外键关联其他表,实现高效的数据检索和级联操作。

数据完整性

通过外键约束和ON DELETE CASCADE机制确保数据完整性,防止孤立数据产生。

文件同步

DBManager类实现了文件系统与数据库的双向同步,确保数据库记录与磁盘文件保持一致。

5

关联数据表,构建完整的模型生命周期管理

项目 详情

项目目标

通过可视化界面和中文友好的操作流程,帮助深度学习初学者、研究人员和开发者轻松体验和掌握GPT模型的训练过程, 降低大模型学习门槛,让更多人能够快速入门并实践人工智能技术。

团队分工

Sixteen

设计程序的核心架构,完成功能模块的代码实现

Qw1koqwq

设计数据库结构,确保数据存储的规范与高效

功能需求

FR-01: 数据预处理

  • • 系统支持文本导入
  • • 字符/子词分词
  • • 可选验证集划分
  • • 一键生成训练格式数据

FR-02: 模型配置

  • • 可视化设置模型结构
  • • 训练超参数配置
  • • 支持默认与自定义参数
  • • 无需修改代码

FR-03: 训练监控

  • • 实时显示损失曲线
  • • 支持暂停/终止操作
  • • 错误配置自动提示
  • • 训练过程可视化

FR-04: 验证续训

  • • 验证集损失计算
  • • 对比曲线展示
  • • 检查点机制
  • • 断点恢复训练

FR-05: 文本生成

  • • 提供推理界面
  • • 输入提示词
  • • 可控制生成参数
  • • 输出模型生成文本

FR-06: 模型对比

  • • 选择两个模型对比
  • • 参数与生成效果对比
  • • 不同推理设置测试
  • • 表现差异分析

FR-07: 模型管理

  • • 记录所有训练模型
  • • 支持查询、重命名
  • • 模型删除与复用
  • • 参数配置管理

FR-08: 用户界面

  • • 图形界面中英文支持
  • • 操作流程清晰
  • • 面向无编程经验用户
  • • 提升易用性

业务需求

BR1

降低AI训练门槛

通过图形化流程和默认配置,降低深度学习模型构建与训练的技术壁垒

BR2

多语言模型适配

支持中文、英文语料及不同分词方式,适配GPT类等多种Transformer模型

BR3

提升训练可控性

提供实时反馈、断点恢复、错误提示与资源合理调度,保障训练过程可控可靠

BR4

模型资产管理

模型、配置、日志统一登记存储,支持后续复用与版本管理,提升研究复现性

BR5

评估对比能力

内置对比分析模块,为模型调优、科研实验与教学展示提供直观依据

BR6

非技术用户友好

界面设计"所见即所得",支持中英文切换,使教育者和普通用户也可轻松使用

核心 功能

数据处理

  • 文本数据导入与预处理
  • 支持GPT-2/Qwen分词器
  • 字符级别编码选项
  • 自动训练/验证集分割
  • 多进程并行处理优化

数据库操作:

register_model()
get_model_basic_info()

模型训练

  • 可配置GPT模型架构
  • 多种学习率调度器
  • 实时训练损失可视化
  • 支持梯度累积与分布式训练
  • 自动保存最佳检查点

数据库操作:

save_training_config()
save_training_log()

文本生成

  • 基于提示词的文本生成
  • 可调节温度与top-k采样
  • 批量生成多个样本
  • 实时生成文本流输出
  • 推理历史自动保存

数据库操作:

save_inference_config()
save_inference_history()

数据库核心操作流程

模型注册

注册模型到数据库并创建相关目录

register_model()

保存配置

序列化训练/推理配置到数据库

save_*_config()

训练/推理

执行模型训练或文本生成

train/generate

保存日志

记录过程数据,便于后续分析

save_*_log()
7

关键数据库操作API,支撑模型全生命周期管理

程序 界面 展示

通过直观的图形化界面,用户可以轻松完成从数据处理到模型训练再到文本生成的全流程操作

数据处理界面

文本数据导入、预处理与分词配置

数据处理界面截图

模型训练界面

模型架构配置、训练参数设置与实时监控

模型训练界面截图

文本生成界面

基于训练模型的智能文本生成与推理

文本生成界面截图

模型对比界面

并排对比不同模型的生成效果与性能表现

模型对比界面截图

数据处理

支持多种文本格式,智能分词配置

模型训练

实时监控训练过程,参数灵活配置

文本生成

智能文本生成,参数精确控制

模型对比

多模型并排对比,性能全面评估

4

核心功能界面,支撑完整的模型训练与应用流程

技术 架构

系统架构

Mini-nanoGPT采用模块化设计,将数据处理、模型训练、数据库管理和用户界面解耦,实现高内聚低耦合的架构特点。

数据库管理层

DBManager类作为中心枢纽,负责模型注册、配置管理、路径解析和文件同步,为上层应用提供统一的数据访问接口。

模型与训练层

包含GPT模型定义、训练循环和优化器配置,集成了现代深度学习技术,如自动混合精度、梯度累积和分布式训练。

用户界面层

基于Gradio的交互式界面,支持中英双语,为用户提供直观的操作体验,包括数据处理、训练配置和文本生成功能。

技术栈

SQLite
Python
PyTorch
Tiktoken
NumPy
Gradio
CUDA
DDP

核心功能亮点

  • 统一时间戳策略确保目录名与数据库ID一致
  • 级联删除保证数据库与文件系统同步
  • JSON序列化配置支持复杂对象存储
  • 路径转换确保跨平台兼容性
  • 事务处理确保数据库操作原子性

数据库性能优化

-- 提升查询性能的关键SQL语句
SELECT * FROM models ORDER BY created_at DESC
INSERT OR REPLACE INTO training_configs VALUES(?, ?)
ON CONFLICT(model_id) DO UPDATE SET config_json=?
                                
1

统一数据库管理类,连接所有模块与组件

扩展数据表 设计

核心数据表扩展

datasets 表

管理训练数据集信息,记录数据预处理状态,支持数据集版本控制

model_dataset_relations 表

实现模型与数据集的多对多关联,记录具体数据集版本,支持数据来源可追溯性

training_checkpoints 表

存储训练检查点信息,支持断点续训和模型版本管理

数据库关系图

数据库关系图

扩展表结构 SQL

-- 数据库表结构定义

CREATE TABLE models(
    id INTEGER PRIMARY KEY,
    name TEXT NOT NULL,
    dir_path TEXT NOT NULL UNIQUE,
    created_at TEXT NOT NULL
);

CREATE TABLE training_configs(
    model_id INTEGER PRIMARY KEY,
    config_json TEXT NOT NULL,
    FOREIGN KEY(model_id) REFERENCES models(id) 
    ON DELETE CASCADE
);

CREATE TABLE training_logs(
    model_id INTEGER PRIMARY KEY,
    log_path TEXT NOT NULL,
    FOREIGN KEY(model_id) REFERENCES models(id) 
    ON DELETE CASCADE
);

CREATE TABLE inference_configs(
    model_id INTEGER PRIMARY KEY,
    config_json TEXT NOT NULL,
    FOREIGN KEY(model_id) REFERENCES models(id) 
    ON DELETE CASCADE
);

CREATE TABLE inference_history(
    model_id INTEGER PRIMARY KEY,
    content TEXT,
    FOREIGN KEY(model_id) REFERENCES models(id) 
    ON DELETE CASCADE
);
                            

索引设计策略

主键索引

所有表的主键字段自动建立聚集索引,保证数据唯一性和快速定位

外键索引

对model_id字段建立索引,优化关联查询性能,支持快速查找特定模型的相关记录

时间索引

对created_at、updated_at字段建立索引,支持按时间范围查询和排序

状态索引

对模型状态、训练状态等枚举字段建立索引,优化状态筛选查询

复合索引

(model_id, created_at) 优化按模型分组的时间序列查询

性能索引

(model_id, training_step) 优化训练进度查询和性能监控

存储优化设计

数据分区与压缩

数据分区策略

按时间对训练日志表进行分区存储,提高大量历史数据的查询效率

JSON字段优化

将配置信息使用JSON字段存储,平衡结构灵活性和查询性能

数据压缩

对大型JSON配置和历史记录进行压缩存储,节省存储空间

缓存与路径管理

文件路径管理

使用相对路径存储,提高项目可移植性,实现路径的自动转换和验证

缓存策略

对频繁访问的模型配置信息进行内存缓存,减少数据库访问压力

备份与恢复

定期自动备份数据库,支持数据恢复和迁移操作

7

核心数据表,支撑完整的机器学习工作流

核心 代码 展示

DBManager 核心方法:模型注册

def register_model(self, name: str, dir_path: Optional[str] = None) -> int:

    cur = self.conn.cursor()

    # ----- Case 1: Provided directory, check if already registered -----
    if dir_path:
        rel_path = self._rel(dir_path)
        cur.execute("SELECT id FROM models WHERE dir_path = ?", (rel_path,))
        row = cur.fetchone()
        if row:
            # Already registered: return existing ID
            return row["id"]

        # Not registered: ensure directory exists then proceed
        abs_path = self._abs(rel_path)
        if not os.path.exists(abs_path):
            os.makedirs(abs_path, exist_ok=True)

        # Unified timestamp: used for both directory suffix and ID
        ts_ms = int(time.time() * 1000)
        cur.execute(
            "INSERT INTO models(id, name, dir_path, created_at) "
            "VALUES(?,?,?,datetime('now'))",
            (ts_ms, name, rel_path)
        )
        self.conn.commit()
        return ts_ms

    # ----- Case 2: No directory provided, auto-generate -----
    ts_ms = int(time.time() * 1000)
    auto_folder = f"{name}_{ts_ms}"
    dir_path_rel = self._rel(os.path.join("out", auto_folder))
    os.makedirs(self._abs(dir_path_rel), exist_ok=True)

    cur.execute(
        "INSERT INTO models(id, name, dir_path, created_at) "
        "VALUES(?,?,?,datetime('now'))",
        (ts_ms, name, dir_path_rel)
    )
    self.conn.commit()
    return ts_ms
                    

数据库一致性保障

def delete_model(self, model_id: int):
    """
    Delete the model record and remove associated folders from disk.
    """
    info = self.get_model_basic_info(model_id)
    if info:
        folder = os.path.basename(info["dir_path"])
        for p in (os.path.join("data", folder), self._abs(info["dir_path"])):
            if os.path.exists(p):
                shutil.rmtree(p, ignore_errors=True)

    self.conn.execute("DELETE FROM models WHERE id = ?", (model_id,))
    self.conn.commit()
                        

配置保存与加载

def save_training_config(self, model_id: int, cfg: dict):
    cur = self.conn.cursor()
    cur.execute(
        "INSERT INTO training_configs(model_id, config_json) "
        "VALUES(?,?) "
        "ON CONFLICT(model_id) DO UPDATE SET config_json=excluded.config_json",
        (model_id, json.dumps(cfg, ensure_ascii=False, indent=2))
    )
    self.conn.commit()

def get_training_config(self, model_id: int):
    """
    Retrieve the training configuration JSON for the given model.
    """
    cur = self.conn.cursor()
    cur.execute("SELECT config_json FROM training_configs WHERE model_id = ?", (model_id,))
    row = cur.fetchone()
    return json.loads(row["config_json"]) if row else None
                        

项目 总结

Mini-nanoGPT项目通过精心设计的数据库应用系统,实现了模型全生命周期的高效管理,为轻量级GPT模型训练提供了易用、可靠的平台。

数据库驱动

SQLite数据库驱动设计,确保数据一致性与可靠性

文件同步

数据库与文件系统双向同步,防止数据不一致

全流程支持

从数据处理、训练到推理的完整工作流支持

可扩展性

模块化设计便于扩展功能与集成新特性

Star History

欢迎 Star

GitHub Star

实时数据
GitHub API
社区支持