卡帕西 8000 行代码手搓 ChatGPT,成本仅100美元,训练 12 小时 CORE 表现超越GPT-2
程序员的那些事·2025-10-15 00:44

项目概述 - Andrej Karpathy发布名为nanochat的极简全栈训练/推理pipeline项目,旨在从零开始构建简易版ChatGPT [1][2] - 项目包含约8000行代码,采用全新Rust语言实现,依赖少量单一代码库 [4][5] - 核心目标是将完整技术栈整合为统一、极简、易读、可修改、易分发的代码库,作为LLM101n课程的压轴项目 [11][12] 成本与效率 - 在8×H100 GPU服务器上训练4小时,总成本约100美元即可复刻基础对话版ChatGPT模型 [3][4] - 总训练时间约3小时51分钟,总成本为92.4美元,若包含强化学习阶段总时间接近5小时 [7][57] - 训练深度为30的模型24小时后(算力消耗仅为GPT-3的千分之一),在MMLU数据集可达40多分,ARC-Easy达70多分,GSM8K达20多分 [10] 技术架构与流程 - 实现完整训练pipeline:预训练分词器、在FineWeb数据集预训练Transformer、中期训练、指令微调、可选强化学习 [5] - 推理引擎支持KV缓存、预填充/解码流程、工具使用(Python解释器),可通过CLI或类ChatGPT的WebUI交互 [5][49] - 训练20层Transformer模型,参数量约560M,需11.2B tokens训练,计算量达4e19 FLOPs [33][34][35] 性能表现 - 基础模型CORE指标达0.2219,超越GPT-2 large(0.21),略低于GPT-2 xl(0.26) [7][41] - 监督微调后模型在ARC-Easy达0.3876,GSM8K达0.0455,HumanEval达0.0854,MMLU达0.3151 [7][56] - 强化学习阶段针对GSM8K数学题优化,性能从0.0455提升至0.0758 [7][56] 分词器优化 - 自定义分词器词汇表大小65,536 tokens,训练集包含2B字符,训练时间仅1分钟,压缩比达4.8 [25][26] - 相比GPT-2分词器(50257 tokens),在新闻文本(+7.2%)、代码(+14.6%)、科学内容(+12.3%)压缩效率更优 [27] - 在FineWeb数据集上压缩效率以微弱优势超越GPT-4分词器(100,277 tokens) [27] 社区影响与扩展性 - 项目发布后GitHub Star数迅速飙升至4.8k,被评价为"可被理解的智慧" [14] - 支持通过调整深度参数探索模型系列,深度26时CORE指标可达0.25,接近GPT-2性能 [61] - 项目具备成为研究工具框架或基准测试工具的潜力,所有模块可在社区进一步优化 [13][59]