基于 karpathy/nanoGPT 的可视化训练平台,让 GPT 模型训练变得简单直观。无论你是深度学习初学者、研究人员还是开发者,都能通过简单的图形界面完成模型训练。
✨ Visual training platform based on karpathy/nanoGPT
🎯 Simplify your AI development workflow
Mini-nanoGPT是一个轻量级GPT模型训练平台,集成了从数据处理、模型训练到文本生成的全流程功能。核心亮点在于其精心设计的数据库应用系统,为模型管理提供了稳定可靠的底层支持。
项目采用SQLite作为底层数据库,提供模型注册、配置存储、训练日志和推理历史的完整管理,同时通过直观的界面支持用户友好的操作体验。
动态损失曲线展示了模型训练过程中的收敛情况。通过实时监控损失值变化,可以及时调整训练参数。
核心组件模块:数据处理、模型训练、数据库管理
项目核心使用SQLite数据库,通过精心设计的表结构实现对模型及其相关资源的高效管理。
DBManager类作为数据库访问层,提供了丰富的API,确保数据库操作的一致性和可靠性。
存储模型的基本信息,作为其他表的外键关联基础
存储训练配置,JSON格式保存所有训练参数
记录训练日志路径,便于日志查询与可视化
存储推理配置,包括推理参数和设置
记录模型推理历史,保存生成文本
-- 数据集管理表 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类实现了文件系统与数据库的双向同步,确保数据库记录与磁盘文件保持一致。
关联数据表,构建完整的模型生命周期管理
通过可视化界面和中文友好的操作流程,帮助深度学习初学者、研究人员和开发者轻松体验和掌握GPT模型的训练过程, 降低大模型学习门槛,让更多人能够快速入门并实践人工智能技术。
设计程序的核心架构,完成功能模块的代码实现
设计数据库结构,确保数据存储的规范与高效
通过图形化流程和默认配置,降低深度学习模型构建与训练的技术壁垒
支持中文、英文语料及不同分词方式,适配GPT类等多种Transformer模型
提供实时反馈、断点恢复、错误提示与资源合理调度,保障训练过程可控可靠
模型、配置、日志统一登记存储,支持后续复用与版本管理,提升研究复现性
内置对比分析模块,为模型调优、科研实验与教学展示提供直观依据
界面设计"所见即所得",支持中英文切换,使教育者和普通用户也可轻松使用
数据库操作:
register_model()
get_model_basic_info()
数据库操作:
save_training_config()
save_training_log()
数据库操作:
save_inference_config()
save_inference_history()
注册模型到数据库并创建相关目录
register_model()
序列化训练/推理配置到数据库
save_*_config()
执行模型训练或文本生成
train/generate
记录过程数据,便于后续分析
save_*_log()
关键数据库操作API,支撑模型全生命周期管理
通过直观的图形化界面,用户可以轻松完成从数据处理到模型训练再到文本生成的全流程操作
文本数据导入、预处理与分词配置
模型架构配置、训练参数设置与实时监控
基于训练模型的智能文本生成与推理
并排对比不同模型的生成效果与性能表现
支持多种文本格式,智能分词配置
实时监控训练过程,参数灵活配置
智能文本生成,参数精确控制
多模型并排对比,性能全面评估
核心功能界面,支撑完整的模型训练与应用流程
Mini-nanoGPT采用模块化设计,将数据处理、模型训练、数据库管理和用户界面解耦,实现高内聚低耦合的架构特点。
DBManager类作为中心枢纽,负责模型注册、配置管理、路径解析和文件同步,为上层应用提供统一的数据访问接口。
包含GPT模型定义、训练循环和优化器配置,集成了现代深度学习技术,如自动混合精度、梯度累积和分布式训练。
基于Gradio的交互式界面,支持中英双语,为用户提供直观的操作体验,包括数据处理、训练配置和文本生成功能。
-- 提升查询性能的关键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=?
统一数据库管理类,连接所有模块与组件
管理训练数据集信息,记录数据预处理状态,支持数据集版本控制
实现模型与数据集的多对多关联,记录具体数据集版本,支持数据来源可追溯性
存储训练检查点信息,支持断点续训和模型版本管理
-- 数据库表结构定义 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配置和历史记录进行压缩存储,节省存储空间
使用相对路径存储,提高项目可移植性,实现路径的自动转换和验证
对频繁访问的模型配置信息进行内存缓存,减少数据库访问压力
定期自动备份数据库,支持数据恢复和迁移操作
核心数据表,支撑完整的机器学习工作流
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数据库驱动设计,确保数据一致性与可靠性
数据库与文件系统双向同步,防止数据不一致
从数据处理、训练到推理的完整工作流支持
模块化设计便于扩展功能与集成新特性