nanochat
nanochat 是一个极简、可修改的 LLM 训练实验框架,覆盖分词、预训练、微调、评估和推理,可在单张 GPU 节点上端到端运行,并被称为“100 美元能买到的最好的 ChatGPT”。
访问 karpathy/nanochat项目简介
nanochat 是一个用于训练 LLM 的实验框架,设计为在单张 GPU 节点上运行,代码保持极简且便于修改,覆盖分词、预训练、微调、评估和推理。它通过单一的深度设置控制模型规模,并自动推导其他超参数,使训练保持计算最优。
核心功能
- 覆盖分词、预训练、微调、评估和推理的端到端 LLM 流程;通过单一复杂度调节项 --depth 设置 Transformer 深度,并自动计算宽度、注意力头数、学习率调整、训练范围和权重衰减;参考 speedrun 在 8XH100 GPU 节点上约 1.5 小时、约 48 美元训练出 GPT-2 能力模型,在 spot 实例上成本可接近 15 美元;time-to-GPT-2 排行榜按 DCLM CORE 分数跟踪墙钟训练时间,runs/speedrun.sh 是参考训练路径;提供 CLI 聊天界面与训练后的模型对话;精度通过全局
适用场景
- 在单张 8XH100 GPU 节点上训练 GPT-2 能力模型,并通过 CLI 与其对话;用 12 层 GPT-1 规模的模型运行短时间预训练实验,以快速测试代码改动;研究缩放规律,并通过改变深度训练计算最优的 miniseries 模型;运行面向 CPU 或 Apple Silicon/MPS 的小型示例,此时模型被大幅缩减且结果较弱。
快速开始
- 使用 uv 安装依赖:CUDA 环境运行 uv sync --extra gpu,仅 CPU/MPS 环境运行 uv sync --extra cpu,然后执行 source .venv/bin/activate 激活虚拟环境;在 8XH100 GPU 节点上运行 bash runs/speedrun.sh 启动参考训练流程,运行约 1.5 小时;训练完成后使用 python -m scripts.chat_cli 通过 CLI 与模型对话;开发依赖可用 uv sync --extra gpu --group dev 安装。
部署与要求
- 目标环境是单张 GPU 节点,参考 speedrun 面向 8XH100 GPU 节点;代码也可在 8XA100 GPU 节点上运行但稍慢,省略 torchrun 后可在单张 GPU 上运行,但耗时约增加八倍;显存低于 80GB 的 GPU 需要调整超参数,例如降低 --device-batch-size,以避免 OOM 或显存耗尽;CPU 和 Apple Silicon/MPS 通过小型示例脚本运行,但不会产生强结果;依赖由 uv 管理,可选择 gpu 或 cpu extra。
采用前须知
- 许可证:MIT。在使用、修改或分发项目前,请确认其具体条款。