10 分钟上手 tinygrad:5 秒训完 MNIST 的完整指南
2026/9/2 12:22:17 网站建设 项目流程

10 分钟上手 tinygrad:5 秒训完 MNIST 的完整指南

【免费下载链接】tinygradYou like pytorch? You like micrograd? You love tinygrad! ❤️项目地址: https://gitcode.com/GitHub_Trending/tiny/tinygrad

上周凌晨一点,我要调一个张量融合的 bug,开发机没 GPU,PyTorch 的 wheel 光下载就花了 20 分钟,装完还只能对着黑盒猜。换tinygrad之后:安装只要 3 行命令,纯 CPU 跑通 1024×1024 的矩阵乘法,DEBUG多加一位数字就直接看到编译器生成的融合 kernel——前后不到 10 分钟。这就是你今天要跟我做的事。

tinygrad 是介于 PyTorch 和 micrograd 之间的一个完整深度学习栈:带自动求导的张量库、做 kernel 融合与 lowering 的 IR 和编译器、JIT + 图执行,外加nn/ optim / datasets 这些训练必备件。它故意做得小而可读,核心代码全在tinygrad/目录里,从 Tensor 到硬件指令每一步人眼都能跟完。当前版本 0.14.0,要求 Python ≥ 3.11,零硬性依赖。

先跑起来:3 条命令装完

官方推荐从源码装,一共就这几行:

git clone https://gitcode.com/GitHub_Trending/tiny/tinygrad cd tinygrad python3 -m pip install -e .

这就是全部安装步骤,装完先确认它会把活跑在哪块设备上:python3 -c "from tinygrad import Device; print(Device.DEFAULT)",GPU 机器会显示CUDAAMDMETAL之类,纯 CPU 机器显示CPU

💡 装完先跑一次python3 -m pytest test/backend/test_ops.py当冒烟测试(需要测试依赖pip install -e '.[testing]'),确认后端没问题再碰模型,能省掉后面一大半排查时间。

你的第一个训练:两层网络认出手写数字

装好之后第一件事是训 MNIST,别跳过去。官方例子 examples/beautiful_mnist.py 是 2 层卷积 + 2 层全连接,batch 大小BS=512,默认STEPS=70步,测试集准确率 98%,普通 CPU 机器上整个流程约 5 秒。训练循环的核心长这样:

from tinygrad import Tensor, nn, Context class Net: def __init__(self): self.l1 = Tensor.kaiming_uniform(784, 128) self.l2 = Tensor.kaiming_uniform(128, 10) def __call__(self, x): return x.flatten(1).dot(self.l1).relu().dot(self.l2) model = Net(); opt = nn.optim.Adam([model.l1, model.l2], lr=0.001) x, y = Tensor.rand(4, 1, 28, 28), Tensor([2,4,3,7]) with Context(TRAINING=1): loss = model(x).sparse_categorical_crossentropy(y).backward() opt.step()

这是一个 10 步循环的压缩版,完整训练逻辑直接看例子文件(约 50 行)。和 PyTorch 有两处你会立刻注意到的差别:模型就是普通类,没有nn.Module、没有forward,只有__call__;数据也简单,from tinygrad.nn.datasets import mnist一行拿回 60000 张 28×28 的训练图和标签。

写完一个矩阵乘法,看看编译器对你做了什么

tinygrad 的所有张量操作都是惰性的:a+b只是在图上挂了个节点,直到你调.realize().numpy()才真正执行。好处是编译器有空间把相邻操作融合成一个 kernel。README 里这个一行命令就是干这个的——跑一个 1024×1024 matmul:

DEBUG=3 python3 -c "from tinygrad import Tensor; N=1024; a,b=Tensor.empty(N,N),Tensor.empty(N,N); (a.reshape(N,1,N)*b.T.reshape(1,N,N)).sum(axis=2).realize()"

跑完你会看到这次 matmul 被融合成了单个 kernel 以及参数搜索过程。DEBUG是分级的:DEBUG=2出每个 kernel 的耗时和带宽,DEBUG=3出优化过程,DEBUG=4出生成的 kernel 代码,DEBUG=5/6出 UOps 中间表示,DEBUG=7一路到汇编。完整清单在 docs/env_vars.md。想更狠一点可以加BEAM=50,让 beam search 给 kernel 多试几组参数。

算在哪:DEV 一个变量切换后端

tinygrad 支持 OpenCL、CPU、METAL、CUDA、AMD、NV、QCOM、WEBGPU 等后端,每个后端就是 tinygrad/runtime/ 里的一个ops_*.py文件。切换不用改代码,运行前导出DEV就行:DEV=CL走 OpenCL,DEV=NV:CUDA:sm_70指定 NV 设备和 CUDA 目标架构,DEV=CPU:LLVM:x86_64,znver2,avx2精确到 CPU 微架构。格式是设备:渲染器:架构,后两段可省略,省略就自动探测。

拿 YOLOv8 看效果最直接,examples/yolov8.py 跑起来就是下面的实时检测画面:

从手写数字到 Stable Diffusion:例子直接跑

examples/目录基本是"即开即玩"的模型合集:python3 examples/stable_diffusion.py出图,SMALL=1 python3 examples/whisper.py跑语音(需要 pyaudio 和 torchaudio),python3 examples/llama.py聊天。识别图片这种最轻量的,直接喂一张本地路径:python3 examples/efficientnet.py ./test/models/efficientnet/Chicken.jpg

权重格式统一是 safetensors,tinygrad/nn/state.py 里的get_state_dict/safe_save/safe_load/load_state_dict四个函数覆盖存读,两行存、两行读,也方便把别的框架的 safetensors 权重直接搬过来。

FAQ:被问得最多的 5 个问题

Q:我打印出来的数不对 / 跟 PyTorch 对不上,为啥?九成是惰性求值:操作没 realize 之前图上什么都没发生。先加.realize().numpy(),再核对两边的dtype是否一致。

Q:怎么确认代码跑在哪块设备上?python3 -c "from tinygrad import Device; print(Device.DEFAULT)",或者干脆DEBUG=1跑,启动时会列出在用的设备。

Q:我想看编译器到底生成了什么 kernel?DEBUG=4打印生成的 kernel 代码,DEBUG=7打印目标硬件的汇编。看第一个例子建议从DEBUG=3开始,信息密度最舒服。

Q:推理慢了两倍,先查什么?给纯函数加@TinyJit装饰器,让它捕获并回放编译好的 kernel,GPU 利用率会明显上去;注意 JIT 不支持输入形状每次都变的函数。然后试BEAM=50让 kernel 自动搜参数。

Q:模型训完怎么保存?get_state_dict(net)拿参数字典,safe_save(state_dict, "model.safetensors")落盘;加载反过来,safe_load+load_state_dict两行。

下一步你可以做什么

  • 跑一次完整测试python3 -m pytest test/,确认你的后端全绿
  • 跟完 docs/quickstart.md 的 MNIST 教程,再回头逐行读 examples/beautiful_mnist.py,把训练循环和@TinyJit对上号
  • 挑一个examples/里的模型跑通,建议从python3 examples/stable_diffusion.py开始
  • 打开DEBUG=4跑一个小模型,第一次认真读完编译器给你生成的 kernel
  • 想深入原理的话,翻 docs/developer/ 目录,从 IR 和 uop 编译流程读起

【免费下载链接】tinygradYou like pytorch? You like micrograd? You love tinygrad! ❤️项目地址: https://gitcode.com/GitHub_Trending/tiny/tinygrad

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询