张梦飞:【保姆级】30分钟手把手教你从0训练一个ChatGPT模型
张梦飞:【保姆级】30分钟手把手教你从0训练一个ChatGPT模型
张梦飞:【保姆级】30分钟手把手教你从0训练一个ChatGPT模型 张梦飞:【保姆级】30分钟手把手教你从0训练一个ChatGPT模型 Modified October 17, 2025 每一行其实都很长,大概有个五六千字。我把第一行复制出来翻译了一下,大家可以看下: 是一篇关于运输与物流的文本。 6、等上一步执行完成后,我们继续训练tokenizer。 Code block JSON 训练tokenizer(这也需要一些时间) python m scripts.tok train max chars=2000000000 7、评估tokenizer Code block JSON python m scripts.tok eval 8、下载更多训练数据和评估数据 Code block Bash 后台下载更多训练数据(约24GB,这会需要较长时间) python m nanochat.dataset n 240 & DATASET DOWNLOAD PID=$! 出现这个就是下载完成了。 9、下载评估数据(约162MB) Code block Bash curl L o eval bundle.zip https://karpathy public.s3.us west 2.amazonaws.com/eval bundle.zip unzip q eval bundle.zip mv eval bundle /.cache/nanochat/ rm eval bundle.zip 10、至此环境和数据均已准备完成,我们开始训练“小模型”。 Code block JSON 训练一个超小模型(大约10 15分钟完成) python m scripts.base train depth=4 device batch size=32 num iterations=500 然后就是等待,此时你会看到命令行中不断输出 上图中的部分显示了程序正在覆盖某些默认配置参数。 • depth = 4: 模型的层数(深度)被设置为4。 • device batch size = 32: 每个设备(比如一张GPU卡)一次处理的数据批次大小为32。 • num iterations = 500: 总共要训练500个步数。 然后你会看到模型的训练步骤返回的日志: 反正也是在等待,我们拿这一行举例解释一下都是什么意思: Code block YAML step 00010/00500 (2.00%) | loss: 7.754142 | lrm: 1.00 | dt: 2201.36ms | tok/sec: 29,770 | mfu: 3.48 | total time: 0.36m 字段 含义 解读 step 00010/00500 当前步数 / 总步数 表示正在进行第10步,共500步。 (2.00%) 训练进度 已完成总训练量的2%。 loss: 7.754142 损失值 最重要的指标。衡量模型预测与真实标签的差距。 这个值在持续下降 (从11.09降到7.75),说明模型正在学习,训练是有效的。 lrm: 1.00 学习率乘数 学习率的调节因子。1.00表示当前使用的是基础学习率。 dt: 2201.36ms 单步耗时 完成这一步花了2201毫秒(约2.2秒)。 tok/sec: 29,770 吞吐量 每秒处理约29,770个词元。这是衡量训练速度的关键指标。 mfu: 3.48 模型浮点运算利用率 衡量GPU算力被有效利用的百分比。3.48%是一个比较低的值,说明GPU的潜力没有被完全发挥,这在小型模型或非极致优化的训练中很常见。 total time: 0.36m 总训练时长 从训练开始到现在,已经过去了0.36分钟。 看到这个就是训练完成了,我们用了18分钟进行训练。 每一行其实都很长,大概有个五六千字。我把第一行复制出来翻译了一下,大家可以看下: 是一篇关于运输与物流的文本。 6、等上一步执行完成后,我们继续训练tokenizer。 7、评估tokenizer 8、下载更多训练数据和评估数据 出现这个就是下载完成了。 9、下载评估数据(约162MB) 10、至此环境和数据均已准备完成,我们开始训练“小模型”。 然后就是等待,此时你会看到命令行中不断输出 上图中的部分显示了程序正在覆盖某些默认配置参数。 • depth = 4: 模型的层数(深度)被设置为4。 • device batch size = 32: 每个设备(比如一张GPU卡)一次处理的数据批次大小为32。 • num iterations = 500: 总共要训练500个步数。 然后你会看到模型的训练步骤返回的日志: 反正也是在等待,我们拿这一行举例解释一下都是什么意思: 字段 含义 解读 step 00010/00500 当前步数 / 总步数 表示正在进行第10步,共500步。 (2.00%) 训练进度 已完成总训练量的2%。 loss: 7.754142 损失值 最重要的指标。衡量模型预测与真实标签的差距。 这个值在持续下降 (从11.09降到7.75),说明模型正在学习,训练是有效的。 lrm: 1.00 学习率乘数 学习率的调节因子。1.00表示当前使用的是基础学习率。 dt: 2201.36ms 单步耗时 完成这一步花了2201毫秒(约2.2秒)。 tok/sec: 29,770 吞吐量 每秒处理约29,770个词元。这是衡量训练速度的关键指标。 mfu: 3.48 模型浮点运算利用率 衡量GPU算力被有效利用的百分比。3.48%是一个比较低的值,说明GPU的潜力没有被完全发挥,这在小型模型或非极致优化的训练中很常见。 total time: 0.36m 总训练时长 从训练开始到现在,已经过去了0.36分钟。 字段 字段 含义 含义 解读 解读 step 00010/00500 step 00010/00500 当前步数 / 总步数 当前步数 / 总步数 表示正在进行第10步,共500步。 表示正在进行第10步,共500步。 (2.00%) (2.00%) 训练进度 训练进度 已完成总训练量的2%。 已完成总训练量的2%。 loss: 7.754142 loss: 7.754142 损失值 损失值 最重要的指标。衡量模型预测与真实标签的差距。 这个值在持续下降 (从11.09降到7.75),说明模型正在学习,训练是有效的。 最重要的指标。衡量模型预测与真实标签的差距。 这个值在持续下降 (从11.09降到7.75),说明模型正在学习,训练是有效的。 lrm: 1.00 lrm: 1.00 学习率乘数 学习率乘数 学习率的调节因子。1.00表示当前使用的是基础学习率。 学习率的调节因子。1.00表示当前使用的是基础学习率。 dt: 2201.36ms dt: 2201.36ms 单步耗时 单步耗时 完成这一步花了2201毫秒(约2.2秒)。 完成这一步花了2201毫秒(约2.2秒)。 tok/sec: 29,770 tok/sec: 29,770 吞吐量 吞吐量 每秒处理约29,770个词元。这是衡量训练速度的关键指标。 每秒处理约29,770个词元。这是衡量训练速度的关键指标。 mfu: 3.48 mfu: 3.48 模型浮点运算利用率 模型浮点运算利用率 衡量GPU算力被有效利用的百分比。3.48%是一个比较低的值,说明GPU的潜力没有被完全发挥,这在小型模型或非极致优化的训练中很常见。 衡量GPU算力被有效利用的百分比。3.48%是一个比较低的值,说明GPU的潜力没有被完全发挥,这在小型模型或非极致优化的训练中很常见。 total time: 0.36m total time: 0.36m 总训练时长 总训练时长 从训练开始到现在,已经过去了0.36分钟。 从训练开始到现在,已经过去了0.36分钟。 看到这个就是训练完成了,我们用了18分钟进行训练。 如果你不在乎时间,你也可以使用原参数训练,命令是:python m scripts.chat sft 看到输出以下即表示训练完成! 我们从评估结果可以看到: • MMLU准确率:25.88% • ARC Easy准确率:23.05% • GSM8K和HumanEval:0%(这个小模型在数学和编程上还不行,正常现象) 虽然这是个很小的模型,效果有限,但已经具备基本的对话能力了。 我们先开放一下8000端口,防止不能使用 然后继续在命令行输入: 你会看到以下输出: 现在,只需要吧中间的0.0.0.0 改成你的服务器IP地址即可。 假如我的是:12.45.748.105 那么拼接地址就是:http://12.45.748.105:8000/ 把这个地址粘贴到你浏览器中,你就会打开这个页面: 恭喜你,你已经从零完成了一个大模型的训练。 你现在可以与他对话,来唤醒这个刚刚问世的大模型了。 五、结束 至此,恭喜你!你已经成功完了从零开始“炼”成一个大语言模型的完整旅程。 从分词器的构建,到预训练、中间训练,再到最后的监督微调(SFT),你亲手操作了每一个环节,这短短两小时的实践,将原本遥不可及的AI魔法,拆解成了一步步清晰可见的代码和日志。你看到的不再是一个黑箱,而是一个由数据、算力和算法共同驱动的、可以亲手塑造的智能体。 此时,你应该对“大模型究竟是如何炼成的”这句话,有了远超书本的、具象化的深刻理解。期待你能够更加深入的探索,与我们分享你更多的发现和收获。 如果这篇教程对你有帮助,别忘了点赞、收藏和转发。 我是梦飞,我们下期再见! 原文链接:https://mp.weixin.qq.com/s/CToTaDDIEBTWZ XrkNmukg 🔗 原文链接: https://mp.weixin.qq.com/s/CToTaDDI... https://mp.weixin.qq.com/s/CToTaDDI... 原创 张梦飞i 梦飞 AI2025年10月14日 19:28 河南 大家好,我是梦飞。 昨天,OpenAI的联合创始人Andrej Karpathy (安德烈·卡帕西) 发布了一个名为 "nanochat" 的新开源项目,一夜之间斩获了7.6k star。 这个项目是从零开始,完成一个ChatGPT这样的大语言模型。提供了从最初的分词器、预训练、中间训练、监督微调 (SFT)到强化学习 (RL) 的完整流程。 可以说,这个项目是你了解大模型究竟是如何“炼”成的史无前例的绝佳项目。 它有一定门槛,但是并非不可企及。 本篇文章手把手带你完成全流程,跟着这篇教程,相信你一定能完成由你训练的第一个“GPT”模型,并且深入理解“大模型究竟是如何炼成的”。 以下步骤是我尝试两遍的步骤,训练步骤不会出错。即使你是完全小白,只需要跟着以下步骤,也能够完成。如果你看不懂,你甚至可以把这篇文章直接发给豆包或者GLM,让他们去引导你。 代码多次尝试,如果你出现问题,应该是系统环境导致,99%的问题AI都可以帮你解决。 代码多次尝试,如果你出现问题,应该是系统环境导致,99%的问题AI都可以帮你解决。 在开始前,你无需任何压力,我不会过多讲解原理,只会有简单的步骤提醒。你可以先跟随步骤完成,如果你想要进一步了解,可以把你感兴趣步骤的输出内容丢给AI,让AI解释这是在做什么,相信,如果整个流程下来,你一定会对大模型有更深入的理解。 这应该是全网首发教程 求个三连,我们正式开始 以下教程大约为三部分,全程约需要2小时(含训练时间): 1、租一台带有显卡的服务器。 2、为这台服务器配置环境。 3、跟着代码操作进行训练。 一、租用云服务器 因为我并不是真的想要训练一个多么可用的模型,我只是想体验完整的训练流程,所以原项目完成整个训练需要8张A100显卡跑4个小时才可以完成,我把步数和深度在训练时做了调整,我们来训练一个小模型,只需要A100跑15 20分钟即可。 那么,也就是说 你体验整个训练流程的成本,不过是:50块钱左右。 如果你本身没有显卡,那么你可以去:火山云、阿里云、腾讯云、无问芯穹等平台租用一台挂载A100显卡的机器即可。 需要注意的是:系统盘最低也要50G,因为训练的时候需要下载24G的训练数据。其他的配置并没有太多要求,大家根据预算自行选择。 我有A100显卡和服务器可用,所以我就直接使用这台服务器进行操作和演示,这个服务器和在云厂商租用的没有任何区别。 具体如何购买的操作,大家可以参考各厂商的购买指引,我就不做演示了。 (后续如果有需要,再出一个专门的指引,本篇先专注于训练教程) 二、服务器配置 各个服务器厂商的操作位置都差不多,大家找找在哪登录就好,登录完成后就都一样了。以下使用的我之前的服务器为例。 1、 添加端口 在控制台,找到你购买的服务器,点击图中,箭头指示的空白区域。 选择“防火墙”菜单栏,点击【添加规则】按钮,添加【20219】和【8000】端口并确定。 2、安装操作面板 然后点击右上角的登录: 直接粘贴命令到命令行中,点击回车开始执行: 然后一路点击回车就可以了。 3、最后到这一步,记住你自己的登录地址和账号密码。复制出来保存好。 使用「外部地址」,输入面板用户和密码,来登录即可。 好,到这里你已经可以开始方便的使用服务器了。 三、训练环境配置 我们的命令都在终端执行,直接在管理面板,打开左侧的终端,来粘贴命令: ✨ 注意: • 下边将出现代码,复制的时候,注意复制全。 • 代码我已经分好步骤,每次只需要粘贴一行代码,然后点击一次回车。 中文字符的是解释不需要复制粘贴,每次只复制和粘贴“代码”部分即可。 • 回车后,只有最左边显示[ ]中括号时,才是上一个命令执行完毕了。 没有出现[ ]中括号对话前缀时,不要操作。 注意: • 下边将出现代码,复制的时候,注意复制全。 • 代码我已经分好步骤,每次只需要粘贴一行代码,然后点击一次回车。 中文字符的是解释不需要复制粘贴,每次只复制和粘贴“代码”部分即可。 • 回车后,只有最左边显示[ ]中括号时,才是上一个命令执行完毕了。 没有出现[ ]中括号对话前缀时,不要操作。 • 如果你发现 ctrl+v 粘贴不进去,试试 shift+ctrl+v 粘贴。 1、我们来检查一下你租用的服务器配置: 2、为了防止有的小伙伴的服务器使用的CUDA版本不行,我们都更新一遍 3、上一步会重启,等待1 2分钟,刷新页面,继续操作即可。 输出这个就是可以了: 4、安装PyTorch对应的CUDA 5、测试CUDA是否可用 如果最后的测试输出如下,那么就是可以了: 6、安装环境管理工具 然后我们安装一个环境管理工具,下方两行粘贴进入,然后点击回车,等待下载完成。 (如果这里有了卡点,进行不下去,可能是因为服务器网络问题,去拉取的时候下载不全,可以复制网址,手动去下载到电脑上。然后 进入文件夹,找到root文件夹,把下载的文件上传进去就好了。) 7、再粘贴下方代码,出现下图,就代表在执行中了。 8、然后把下边这行粘贴进去,点击回车。 rm f Anaconda3 2021.05 Linux x86 64.sh 9、然后创建一个训练环境 至此,环境配置和检查完成。 四、进入训练 1、 继续粘贴,首先创建项目目录: 2、 下载AK大神的项目: 3、 继续安装 4、创建缓存目录 5、下载初始数据集并训练tokenizer 大家可能好奇这个数据集里都有什么,我打开来给大家看一下。 原始内容其实就是一些Json格式的纯文本数据。 11、中间训练 这一步是为了教会模型理解对话格式和特殊标记(大约15 20分钟)。这步我也更改了参数,原参数跑起来太慢了。我们只需要走一遍流程就好。同样的你也可以看到训练步骤。 如果你不在乎时间,你也可以使用原参数训练,命令是:python m scripts.mid train 看到下方这个就是完成: 12、中间训练完成,我们就进入到了最后一步的SFT(监督微调阶段),这一阶段会让模型更好的学会我们的语言习惯和方式 同样的,为了训练速度更快,我更改了训练参数,直接粘贴进去即可继续训练: