<!-- Canonical: https://www.tokenmap.com.cn/research/nanochat-training-workflow -->

[返回全部研究](<https://www.tokenmap.com.cn/research>)

词元映射研究工程实践

# nanochat：从零训练语言模型

昨天，OpenAI的联合创始人Andrej Karpathy (安德烈·卡帕西) 发布了一个名为 "nanochat" 的新开源项目，一夜之间斩获了7.6k star。

这个项目是从零开始，完成一个ChatGPT这样的大语言模型。提供了从最初的分词器、预训练、中间训练、监督微调 (SFT)到强化学习 (RL) 的完整流程。

可以说，这个项目是你了解大模型究竟是如何“炼”成的史无前例的绝佳项目。

**它有一定门槛，但是并非不可企及。**

本篇文章手把手带你完成全流程，跟着这篇教程，相信你一定能完成由你训练的第一个“GPT”模型，并且深入理解“大模型究竟是如何炼成的”。

以下步骤是我尝试两遍的步骤，训练步骤不会出错。即使你是完全小白，只需要跟着以下步骤，也能够完成。如果你看不懂，你甚至可以把这篇文章直接发给豆包或者GLM，让他们去引导你。

代码多次尝试，如果你出现问题，应该是系统环境导致，99%的问题AI都可以帮你解决。

在开始前，你无需任何压力，我不会过多讲解原理，只会有简单的步骤提醒。你可以先跟随步骤完成，如果你想要进一步了解，可以把你感兴趣步骤的输出内容丢给AI，让AI解释这是在做什么，相信，如果整个流程下来，你一定会对大模型有更深入的理解。

这应该是全网首发教程

求个三连，我们正式开始

以下教程大约为三部分，全程约需要2小时（含训练时间）：

1、租一台带有显卡的服务器。

2、为这台服务器配置环境。

3、跟着代码操作进行训练。

## 一、租用云服务器

因为我并不是真的想要训练一个多么可用的模型，我只是想体验完整的训练流程，所以原项目完成整个训练需要8张A100显卡跑4个小时才可以完成，我把步数和深度在训练时做了调整，我们来训练一个小模型，只需要A100跑15-20分钟即可。

那么，也就是说 你体验整个训练流程的成本，不过是：50块钱左右。

![图片](<https://cdn.tokenmap.com.cn/paper/website/media/d9ca3c06aac059263c49f2864118036f0192357c71f4bb01406316922e68864d.png>)

如果你本身没有显卡，那么你可以去：火山云、阿里云、腾讯云、无问芯穹等平台租用一台挂载A100显卡的机器即可。

需要注意的是：系统盘最低也要50G，因为训练的时候需要下载24G的训练数据。其他的配置并没有太多要求，大家根据预算自行选择。

我有A100显卡和服务器可用，所以我就直接使用这台服务器进行操作和演示，这个服务器和在云厂商租用的没有任何区别。

具体如何购买的操作，大家可以参考各厂商的购买指引，我就不做演示了。

（后续如果有需要，再出一个专门的指引，本篇先专注于训练教程）

## 二、服务器配置

各个服务器厂商的操作位置都差不多，大家找找在哪登录就好，登录完成后就都一样了。以下使用的我之前的服务器为例。

**1、 添加端口**

在控制台，找到你购买的服务器，点击图中，箭头指示的空白区域。

![图片](<https://cdn.tokenmap.com.cn/paper/website/media/5bd35f5f27eef2c91b2d8a1834380ca62b13b766f582aa09f9853271dbf96b71.png>)

选择“防火墙”菜单栏，点击【添加规则】按钮，添加【20219】和【8000】端口并确定。

![图片](<https://cdn.tokenmap.com.cn/paper/website/media/06c10fea833a25872aabf495581de0f04afd34e0a2d20bebd7d3b10f90c3a27a.png>)

![图片](<https://cdn.tokenmap.com.cn/paper/website/media/e710cd7d442c24eda7b9f5c93c5821da2d753dab1fab71c4eeb87fd5dcd70a62.png>)

**2、安装操作面板**

然后点击右上角的登录：

![图片](<https://cdn.tokenmap.com.cn/paper/website/media/c84f85fe0fa36ce088240460905ac5a938fb478bb442cb98d5bbd1d40325b369.png>)

直接粘贴命令到命令行中，点击回车开始执行：

```
curl -sSL https://resource.fit2cloud.com/1panel/package/quick_start.sh -o quick_start.sh && sudo bash quick_start.sh
```

![图片](<https://cdn.tokenmap.com.cn/paper/website/media/9f7e06e70faa6c008980b64b35ac312beb9ab9d98a81a4e63751cafd2b6b894d.png>)

然后一路点击回车就可以了。

![图片](<https://cdn.tokenmap.com.cn/paper/website/media/d8103ca6a1930b596530c418f49c3e31054d064f172fe315e3d937dd38f36525.png>)

**3、最后到这一步，记住你自己的登录地址和账号密码。****复制出来保存好。**

![图片](<https://cdn.tokenmap.com.cn/paper/website/media/32346e91c855495cc712c977838b5d47622d68e7b0ae4c1c6b0d1ac9b5fe45b0.png>)

使用「外部地址」，输入面板用户和密码，来登录即可。

![图片](<https://cdn.tokenmap.com.cn/paper/website/media/ea1bdc4da165180c8339f3bb67aa542ee267ff54a8f733a4a35e1a9fb107defa.png>)

好，到这里你已经可以开始方便的使用服务器了。

## 三、训练环境配置

我们的命令都在终端执行，直接在管理面板，打开左侧的终端，来粘贴命令：

![图片](<https://cdn.tokenmap.com.cn/paper/website/media/fbdee947a9c2661b6da8730a9c72157e6b09b8619d787180079d65cd361570f5.png>)

✨

注意：

- 下边将出现代码，复制的时候，注意复制全。

- 代码我已经分好步骤，每次只需要粘贴一行代码，然后点击一次回车。 中文字符的是解释不需要复制粘贴，每次只复制和粘贴“代码”部分即可。

- 回车后，只有最左边显示[ ]中括号时，才是上一个命令执行完毕了。 没有出现[ ]中括号对话前缀时，不要操作。

- 如果你发现 ctrl+v 粘贴不进去，试试 shift+ctrl+v 粘贴。

**1、我们来检查一下你租用的服务器配置：**

```
# 检查NVIDIA驱动是否正确安装
nvidia-smi

# 查看CUDA版本
nvcc --version

# 检查GPU内存和使用情况
nvidia-smi --query-gpu=memory.total,memory.used --format=csv
```

**2、为了防止有的小伙伴的服务器使用的CUDA版本不行，我们都更新一遍**

```
# 更新软件包列表
sudo apt update

# 安装NVIDIA驱动和CUDA工具包
sudo apt install -y nvidia-driver-550 nvidia-cuda-toolkit

# 重启系统使驱动生效
sudo reboot
```

**3、上一步会重启，等待1-2分钟，刷新页面，继续操作即可。**

```
# 验证安装情况
nvcc --version

# 验证GPU可用
nvidia-smi
```

输出这个就是可以了：

![图片](<https://cdn.tokenmap.com.cn/paper/website/media/5a1e7da2ca84695dff0aee23702ced29c2c1ee386bd339b0ab8edade2bd3ad36.png>)

![图片](<https://cdn.tokenmap.com.cn/paper/website/media/bf6c04d3a7664a2dc79a5a700c2b3a40037a43618ab0260c3166d813449dd57b.png>)

**4、安装PyTorch对应的CUDA**

```
pip uninstall torch -y
pip install torch --index-url https://download.pytorch.org/whl/cu121
```

**5、测试CUDA是否可用**

```
python -c "import torch; print('CUDA available:', torch.cuda.is_available()); print('GPU count:', torch.cuda.device_count()); print('GPU name:', torch.cuda.get_device_name(0) if torch.cuda.is_available() else 'N/A')"
```

如果最后的测试输出如下，那么就是可以了：

![图片](<https://cdn.tokenmap.com.cn/paper/website/media/33dce8d017ec7de87e01b18ea7c3430e9d13a09eebd9b3aa509e2ccaead5eedd.png>)

**6、安装环境管理工具**

然后我们安装一个环境管理工具，下方两行粘贴进入，然后点击回车，等待下载完成。

```
echo "开始安装 Anaconda..."
wget https://repo.anaconda.com/archive/Anaconda3-2021.05-Linux-x86_64.sh
```

（如果这里有了卡点，进行不下去，可能是因为服务器网络问题，去拉取的时候下载不全，可以复制网址，手动去下载到电脑上。然后 进入文件夹，找到root文件夹，把下载的文件上传进去就好了。）

**7、再粘贴下方代码，出现下图，就代表在执行中了。**

```
bash Anaconda3-2021.05-Linux-x86_64.sh -b -p /root/anaconda
```

![图片](<https://cdn.tokenmap.com.cn/paper/website/media/adc59a0fb7b3435ee08fbf0302c90184083ae02eb83b1de1ece134a71f823f77.png>)

**8、然后把下边这行粘贴进去，点击回车。**

`rm -f Anaconda3-2021.05-Linux-x86_64.sh`

![图片](<https://cdn.tokenmap.com.cn/paper/website/media/29fea7bd0614eb390240f0177e95e8176f5ffd82d7001372d92077e0da49d495.png>)

**9、然后创建一个训练环境**

```
# 创建新的conda环境
conda create -n nanochat python=3.10 -y
conda activate nanochat
```

![图片](<https://cdn.tokenmap.com.cn/paper/website/media/ab5a1351fe2d80af369f9de96f0bee3938a7bf28da6de648da1b02139b8305d9.png>)

至此，环境配置和检查完成。

## **四、进入训练**

1、 继续粘贴，首先创建项目目录：

```
mkdir -p ~/projects
cd ~/projects
```

2、 下载AK大神的项目：

```
git clone https://github.com/karpathy/nanochat.git
cd nanochat
```

![图片](<https://cdn.tokenmap.com.cn/paper/website/media/78854d395511245f2cfa69985629c9684913c5d320c8b6b6a0dbf0754526e795.png>)

3、 继续安装

```
# 安装项目依赖
pip install -e .

# 安装maturin
pip install maturin
```

![图片](<https://cdn.tokenmap.com.cn/paper/website/media/23ddb67e44947b83e2637c8d6181e0e6dfcc5abf4e8e9a72df631a6209c0330a.png>)

```
# 确保Rust环境变量已加载
source "$HOME/.cargo/env"

# 构建tokenizer
maturin develop --release --manifest-path rustbpe/Cargo.toml
```

![图片](<https://cdn.tokenmap.com.cn/paper/website/media/68753d7a29a8fe1977ea87af0519a8cd826507ece946ae133663383d6206f1ae.png>)

4、创建缓存目录

```
mkdir -p ~/.cache/nanochat
```

5、下载初始数据集并训练tokenizer

```
# 下载初始数据集(约800MB，这可能需要几分钟)
python -m nanochat.dataset -n 8
```

![图片](<https://cdn.tokenmap.com.cn/paper/website/media/18b29684b5def6c8bfcccf949ab6ab90b5c04f9dd179fa0c8c7deac3872c6a04.png>)

大家可能好奇这个数据集里都有什么，我打开来给大家看一下。

原始内容其实就是一些Json格式的纯文本数据。

![图片](<https://cdn.tokenmap.com.cn/paper/website/media/64dc80227db8c5d201c014c9c222a5c99d696119bc6219087feae9c8f517c222.png>)

每一行其实都很长，大概有个五六千字。我把第一行复制出来翻译了一下，大家可以看下：

是一篇关于运输与物流的文本。

![图片](<https://cdn.tokenmap.com.cn/paper/website/media/c14a71b74885ff5bc5bc73c0a59f23a2259ccc46419ed2da9be682fbd7b71890.png>)

**6、等上一步执行完成后，我们继续训练tokenizer。**

```
# 训练tokenizer（这也需要一些时间）
python -m scripts.tok_train --max_chars=2000000000
```

![图片](<https://cdn.tokenmap.com.cn/paper/website/media/c86913d615bd15b752fd030c3901feb9fe5e064e450f4314eb1fdc350e2426ef.png>)

**7、评估tokenizer**

```
python -m scripts.tok_eval
```

![图片](<https://cdn.tokenmap.com.cn/paper/website/media/306c8cc8ce46758a361a1616818506b396d3e1497b0fabe9222fedb9986924af.png>)

**8、下载更多训练数据和评估数据**

```
# 后台下载更多训练数据(约24GB，这会需要较长时间)
python -m nanochat.dataset -n 240 &
DATASET_DOWNLOAD_PID=$!
```

![图片](<https://cdn.tokenmap.com.cn/paper/website/media/ef8bcede16627ecbb985199e8c45dee8c5a87e1ebf9ba21a0c3e06902387e869.png>)

出现这个就是下载完成了。

![图片](<https://cdn.tokenmap.com.cn/paper/website/media/a776da99ef4b8469c1ee2ea396fcd29882de4bde8385d5a318018249d4547527.png>)

**9、下载评估数据(约162MB)**

```
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
```

![图片](<https://cdn.tokenmap.com.cn/paper/website/media/0b51d271dcc7189f06192e6d7bf9b991bc476f292b67e88f50fd55e112c90978.png>)

**10、至此环境和数据均已准备完成，我们开始训练“小模型”。**

```
# 训练一个超小模型（大约10-15分钟完成）
python -m scripts.base_train --depth=4 --device_batch_size=32 --num_iterations=500
```

![图片](<https://cdn.tokenmap.com.cn/paper/website/media/77dd3a5a25d954e7faa9f2874141cbafc3110e9e6199be123b47598d63a75698.png>)

然后就是等待，此时你会看到命令行中不断输出

上图中的部分显示了程序正在覆盖某些默认配置参数。

- `depth = 4`: 模型的层数（深度）被设置为4。

- `device_batch_size = 32`: 每个设备（比如一张GPU卡）一次处理的数据批次大小为32。

- `num_iterations = 500`: 总共要训练500个步数。

然后你会看到模型的训练步骤返回的日志：

![图片](<https://cdn.tokenmap.com.cn/paper/website/media/e9f5c6afd1e1cc313689af448c3fa842f8f4afcca09cdad2c68695bfeadf61a7.png>)

反正也是在等待，我们拿这一行举例解释一下都是什么意思：

```
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分钟进行训练。

![图片](<https://cdn.tokenmap.com.cn/paper/website/media/c4cf2e75e55307d21ce375483b73baca261b427cbed4fabb3c357825f499ec90.png>)

**11、中间训练**

这一步是为了教会模型理解对话格式和特殊标记（大约15-20分钟）。这步我也更改了参数，原参数跑起来太慢了。我们只需要走一遍流程就好。同样的你也可以看到训练步骤。

```
python -m scripts.mid_train --device_batch_size=128
```

如果你不在乎时间，你也可以使用原参数训练，命令是：`python -m scripts.mid_train`

![图片](<https://cdn.tokenmap.com.cn/paper/website/media/b7d56c84dfcfe95df0d9ffff3b56c168a67cb64c118cb1c106990458bd25605e.png>)

看到下方这个就是完成：

![图片](<https://cdn.tokenmap.com.cn/paper/website/media/bccdd6a735fb4639ab2f3f6f233466968e5cd0f359cd8c8c4ea0aae77b9c0e7e.png>)

12、中间训练完成，我们就进入到了最后一步的SFT（监督微调阶段），这一阶段会让模型更好的学会我们的语言习惯和方式

同样的，为了训练速度更快，我更改了训练参数，直接粘贴进去即可继续训练：

```
python -m scripts.chat_sft --device_batch_size=16
```

如果你不在乎时间，你也可以使用原参数训练，命令是：`python -m scripts.chat_sft`

![图片](<https://cdn.tokenmap.com.cn/paper/website/media/a06b331540394114b7e15621581e3372e130b6a935882806eb5ed2491854d375.png>)

看到输出以下即表示训练完成！

![图片](<https://cdn.tokenmap.com.cn/paper/website/media/32447a70c0a07741b8531d286d07ec875c63d49542e9fd7d2bfbf90380f70807.png>)

我们从评估结果可以看到：

- MMLU准确率：25.88%

- ARC-Easy准确率：23.05%

- GSM8K和HumanEval：0%（这个小模型在数学和编程上还不行，正常现象）

虽然这是个很小的模型，效果有限，但已经具备基本的对话能力了。

我们先开放一下8000端口，防止不能使用

```
sudo ufw allow 8000
```

然后继续在命令行输入：

```
python -m scripts.chat_web
```

你会看到以下输出：

![图片](<https://cdn.tokenmap.com.cn/paper/website/media/eef00ab9d302ba9737ae52a8c4c62a21a7899ea1d91842a0fc59d96bfab65951.png>)

现在，只需要吧中间的0.0.0.0 改成你的服务器IP地址即可。

![图片](<https://cdn.tokenmap.com.cn/paper/website/media/9bbf77c990db0b236c66c9e02a49132a78edee1c3ca9f21140aa81fd301cda64.png>)

假如我的是：12.45.748.105

那么拼接地址就是：http://12.45.748.105:8000/

把这个地址粘贴到你浏览器中，你就会打开这个页面：

![图片](<https://cdn.tokenmap.com.cn/paper/website/media/4da4bf69844a4bb9342ba81550c2a5def1a9dd04f6bec199c47ab39bf2cfaad3.png>)

恭喜你，你已经从零完成了一个大模型的训练。

你现在可以与他对话，来唤醒这个刚刚问世的大模型了。

![图片](<https://cdn.tokenmap.com.cn/paper/website/media/fb20ab9623fa3e1156345398f9bd65a798186a9581f7c10b3c97abea3c190d8a.png>)

## 五、结束

至此，恭喜你！你已经成功完了从零开始“炼”成一个大语言模型的完整旅程。

从分词器的构建，到预训练、中间训练，再到最后的监督微调（SFT），你亲手操作了每一个环节，这短短两小时的实践，将原本遥不可及的AI魔法，拆解成了一步步清晰可见的代码和日志。你看到的不再是一个黑箱，而是一个由数据、算力和算法共同驱动的、可以亲手塑造的智能体。

此时，你应该对“大模型究竟是如何炼成的”这句话，有了远超书本的、具象化的深刻理解。期待你能够更加深入的探索，与我们分享你更多的发现和收获。

## 继续探索

[全部研究](<https://www.tokenmap.com.cn/research>)

[!\[图片\](<https://cdn.tokenmap.com.cn/paper/website/media/099524a655650974a30da3bf36f06912bb90f60b4979560d140e7bb700aabe91.png>)

模型实测

### 编程智能体的代码修复轨迹与 Harness 对照

DeepSeek V4 Pro、GLM-5.3 接连更新，豆包推出了 Seed-Evolving，DeepSeek 还发布了自己的 Harness。模型能力在涨，给模型提供工具和执行环境的 Harness 也在进化。](<https://www.tokenmap.com.cn/research/coding-agent-execution-trajectories>)

[!\[图片\](<https://cdn.tokenmap.com.cn/paper/website/media/ade857cef09291a717028457f79933984766492797dac06e4a5ca5f9dc01792f.png>)

模型实测

### DeepSeek、GLM 与 Kimi 的真实任务对比

说实话，现在的大模型已经多到让人有点选择困难了。](<https://www.tokenmap.com.cn/research/deepseek-glm-kimi-task-comparison>)

[!\[图片\](<https://cdn.tokenmap.com.cn/paper/website/media/f5f58d8cf68c45464ea27801580251f7dfce851241f38eceda00d088b875b263.png>)

模型实测

### Doubao Seed 2.1 Pro 工程任务实测

6 月 23 日，火山引擎在北京举办 2026 夏季 FORCE 原动力大会，正式发布豆包大模型 2.1。](<https://www.tokenmap.com.cn/research/doubao-seed-21-pro-engineering-tests>)
