现在,让我们打造属于你自己的人工智能吧。
确认内可使用真实文件和的 环境。在输入三条检查命令即可,不需要 pip、账号、 或 。
开发环境
运行,已安装。只用,无需、、账户或。
是大中处理与的。在支持的上加速,不能用于此。的普通监听与后台服务受限,所以全部必修练习在完成。
只用 Python 标准库——用到的模块和作用
不用 pip 安装任何东西。只用安装 Python 时自带的标准库。
- :把设置、、检查点存成文本文件并读取。
- math:exp、log、sqrt 等数学。
- random:用于初始值、选择片段、抽取的随机数。seed 相同,结果就相同。
- collections.Counter:在 中统计相邻对的次数。
- pathlib:读写文件。
- argparse:接收 --steps 这样的选项。
- hashlib:生成训练资料的指纹(),判断资料是否变化。
- os:安全地替换检查点()。
- 、urllib: 和 。
没有安装,就没有冲突或安装失败。代价是矩阵计算库(、PyTorch)做的事要自己写。这正是本课程的目的。
浏览器里的 Linux——什么在哪里运行
右边的并不是连到服务器。真正的 Linux 就在这个里运行。
- v86:模拟 的。用 编写,在浏览器里运行。
- Alpine Linux 32bit:在这个虚拟 CPU 上运行的小型 Linux。 512MB。
- 、、、、:Linux 里预装的。
由学生电脑的 CPU 经过模拟器执行。不会发送到服务器,所以运行什么都安全。不过因为是模拟,同样的 Python 代码比直接在自己电脑上跑慢得多。所以 XSLM 的默认规模和训练次数都定得很小。
~/xslm 的文件保存在这个浏览器里,刷新后也还在。正在运行的程序(Runner 等)刷新后会停止,需要重新启动。
更大的模型用什么工具来做
XSLM 只用 Python 标准库。做更大的模型时,通常使用下面的工具。
- PyTorch:用 GPU 快速进行数字数组(张量)计算和自动微分。就是 XSLM 的 engine.py 做的事。
- tokenizers:快速的 BPE 分词器库。用 编写,比纯 Python 快约 100 倍。就是 XSLM 的 tokenizer.py 做的事。
- numpy、tqdm:数字数组和进度条。
- :管理 Python 项目和包。像 uv add torch 这样安装。
- 设备(device):计算的地方。Apple GPU 是 mps, GPU 是 ,都没有就是 cpu。
工具不同,原理和 XSLM 一样。工具只是把同样的计算做得更快。
为什么慢——逐个数字计算的代价
XSLM 的计算全是一个个 Value 对象的加法和乘法。数一数训练一次 12 个词元片段的情况。
- 每个位置都有 query、key、value、project、expand、contract、head 七次,一次矩阵乘法就是几十到几百次乘法和加法。
- 每次计算都会产生一个 Value 对象,记录在里。默认设置下一次训练约产生 32,000 个。
- backward 会把这些对象全部倒着再走一遍。
PyTorch 把同样的计算按矩阵打包,在 、GPU 上一次处理,所以快几百到几千倍。为了看清原理,我们故意选了慢的路。训练太久时按 停下,也会保存到最后完成的那一步。
我们在这个浏览器 Linux 中测量了默认的 20 次训练(python3 train.py --steps 20):在快速的台式机(Apple M5 Max)上约 23 秒,把 CPU 降速 4 倍约 2 分 13 秒,降速 6 倍约 4 分 5 秒。生成(generate.py)分别约 3 秒、17 秒、33 秒。如果电脑较慢,可以像 --steps 5 这样分几次运行。训练会从检查点继续,所以结果和一次运行完全相同。
本课程需要的 Python 与终端基础
只整理输入源码时不卡住所必需的内容。
- micro 文件名.py:打开并编辑 Python 文件。+S 保存,Ctrl+Q 关闭。按 Enter 后会延续到下一行,比源码更深时按 Backspace 减少。
- nano 文件名:打开 settings.json、raw.txt 等其他文件。Ctrl+O 再按 Enter 保存,Ctrl+X 关闭。
- python3 文件名.py:运行程序。只输入 python3 会打开逐行实验的交互式 Python(),用 exit() 退出。
- 缩进:Python 用空格划分代码块。本课程每一级用 4 个空格。Tab 和空格混用会出现 。
- :from model import 是从同一文件夹的 model.py 导入 GPT。所以所有命令都在 ~/xslm 中运行。
- if __name__ == '__main__': 只有直接运行文件时,下面的代码才会执行。被其他文件 import 时不执行。
- , 消息:条件为假时带着该消息停止。XSLM 用 assert 尽早发现错误的资料和设置。
出错时从 的最后一行开始读。最后一行是错误类型和消息,它上面的 File … line 数字就是出问题的位置。
想在自己电脑上做得更大
完成 XSLM 后,如果想训练更大的模型,可以在自己电脑上搭建 PyTorch 环境(可选)。
- 安装 Python 3.10 以上。
- 安装 uv:curl -LsSf https://astral.sh/uv/install.sh | (macOS 也可以用 install uv)。
- 用 uv init my-gpt 建项目, my-gpt 后用 uv add torch tokenizers tqdm numpy 安装。
- Apple Silicon Mac 上看 uv run python -c "import torch; (torch.backends.mps.is_available())" 是否为 True。NVIDIA GPU 用 torch.cuda.is_available() 查看。
Apple Silicon 用 MPS,Linux 和 上的 NVIDIA GPU 用 CUDA,其他情况用 CPU 训练。CPU 也能训练,但很慢。在 XSLM 学到的名称(、、、、)在 PyTorch 代码里也原样出现。
动手输入并实验
执行三条检查命令,查看Python版本、x86架构和ready。后续也使用此终端。
python3 --version
uname -m
python3 -c "import json, math, random, http.server; print('ready')"
在终端中练习
检查理解
说明为何无需torch和MPS。训练在浏览器模拟的CPU中进行。
遇到问题时
不要安装torch,本课程不导入它。加载失败时检查并重试。
常见问题
pip install torch 会更快吗?
不要在这个终端里装。PyTorch 没有 32bit Linux 的包,就算有,在 512MB 内存的模拟器里也很难运行。XSLM 源码不导入 torch,所以也不需要。PyTorch 请另外装在自己的电脑上使用。
不能用 Pyodide 在浏览器里跑 Python 吗?
Pyodide 能在浏览器里做 Python 计算,分词器和训练都可以。但普通的套接字服务器和后台受限,无法完成启动 Runner( 服务器)、再让另一个程序(XChat)连接的练习。所以全部练习都在真正的 Linux(Alpine)里做。
刷新后什么会留下,什么会消失?
~/xslm 里的 .py、.json、.txt、.md 文件(最多 100 个、2MB)会在命令结束时和每 5 秒保存到这个浏览器,重新打开就会恢复。运行中的程序、其他扩展名、其他文件夹的文件会消失。保存只在这个浏览器里,换浏览器或电脑会从空白开始。