1. NanoChat – The best ChatGPT that $100 can buy (github.com)
NanoChat 项目概述 NanoChat 是一个用于训练大型语言模型的极简实验性框架。它设计为在单个 GPU 节点上运行,代码精简且易于修改,并涵盖了 LLM 开发的主要阶段,包括分词、预训练、微调、评估、推理以及一个聊天用户界面。
核心优势与成本 该项目的核心亮点在于其极高的成本效益。用户可以以约48美元的成本(使用8卡H100节点约2小时)训练一个达到2019年GPT-2能力水平的模型,而在竞价实例上成本可降至约15美元。这种效率的提升归功于近年来技术栈的全面进步。
核心设计理念:单一旋钮控制
NanoChat 的配置围绕一个核心复杂度参数 --depth(GPT Transformer 模型的层数)展开。设置该参数后,所有其他超参数(如Transformer宽度、注意力头数量、学习率、训练时长、权重衰减等)都会自动以最优方式计算,无需用户手动调整。例如,GPT-2级别能力对应的深度约为24-26层。
“时间到 GPT-2” 排行榜 项目的当前开发重心是优化最耗计算资源的预训练阶段。为此,它设立了一个排行榜,记录将模型训练至超越原始GPT-2基准分数(DCLM CORE score 0.256525)所需的墙钟时间。从最初OpenAI的168小时训练时间,排行榜上的条目已通过社区协作将该时间缩短至不到2小时。
使用与运行
- 环境设置:推荐使用
uv进行依赖管理,支持CUDA、CPU或MPS后端。 - 训练与交互:提供
runs/speedrun.sh脚本,可在8卡H100节点上一键启动完整的GPT-2级别模型训练和聊天界面生成流程。训练完成后,可通过WebUI与模型交互。 - 硬件灵活性:代码兼容多种硬件。在单GPU或Ampere架构(如A100)的GPU节点上均可运行,但训练时间会相应增加。对于显存不足80GB的GPU,需调整设备批处理大小等参数。
- 精度控制:未使用
torch.amp.autocast,而是通过全局变量COMPUTE_DTYPE显式管理精度。默认根据硬件自动选择(如A100/H100使用bfloat16),并可通过环境变量覆盖。
研究与扩展 对于研究者,项目提供了进行缩放定律和系列模型训练的脚本。可以通过一个简单的12层模型(GPT-1级别)进行快速实验。项目的宗旨是提升微型模型的可达性,不仅关注成本,也致力于保持代码库的认知简洁性——避免复杂的配置对象和工厂模式,追求可读、可hack、易分发的强基线代码。
文件结构 项目结构清晰,主要目录包括:
nanochat/:核心模块,如模型定义、数据加载、评估、优化器、推理引擎和Web UI。scripts/:可执行脚本,涵盖训练、评估、聊天(CLI/Web)等流程。runs/:用于重现关键训练流程(如速通、缩放定律)的shell脚本。tasks/:用于模型评估的各种下游任务(如MMLU、GSM8K、代码生成等)。dev/:辅助开发工具,如合成数据生成。
贡献与许可 项目鼓励社区贡献以改进微型模型的训练效率,并采用MIT许可证开源。提交代码时要求披露是否有LLM生成的实质性贡献。