☰
tinygrad 快速上手指南:3 步跑通深度学习训练,比 PyTorch 更轻量
2026/10/13 9:40:14 网站建设 项目流程

tinygrad 快速上手指南:3 步跑通深度学习训练,比 PyTorch 更轻量

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

tinygrad 是一个把"训练、编译、JIT、推理"全塞进一个轻量库的深度学习框架,主打代码短到你能读完、后端随便换。这篇写给刚从 PyTorch 过来、或者想搞懂深度学习底层怎么跑的新手。

5 分钟跑通 MNIST 训练

三步,不用装任何额外东西。

第 1 步:克隆并安装

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

第 2 步:确认默认设备

python3 -c "from tinygrad import Device; print(Device.DEFAULT)"

有 NVIDIA 显卡会打印CUDA/NV,没有就是CPU。想强制指定后端,加个DEV=CPU或DEV=NV就行。

第 3 步:跑官方 MNIST 示例

python3 examples/beautiful_mnist.py

做完你能看到什么:训练日志一行行往下刷,大概 5 秒内准确率冲到 98% 以上。这就是 tinygrad 的完整训练循环——定义模型、算 loss、backward()求梯度、optim.step()更新参数,和你熟悉的 PyTorch 几乎一个模子。

下面这张图是 tinygrad 和其他框架的层次对比,看完你就明白它"轻"在哪:

它到底怎么工作:一张"记账本"的类比

tinygrad 最核心的一个词是惰性(lazy)。

你在 PyTorch 里写a + b,它马上就算。在 tinygrad 里写a + b,什么都不会发生。它只是往一张"记账本"上记一笔:这里要加一次。你接着写* 2、.relu(),它继续记。直到你调用.realize()(或.numpy()、.item()这类要拿结果的调用),它才把整本账翻出来,一次性算完。

打个比方:你点了一桌菜,厨房不会每道菜单独起锅送一次,而是把所有步骤排好,最后一下锅全炒出来端走。tinygrad 省下的,正是"每道菜单送"那部分的开销。

代码长这样:

from tinygrad import Tensor a = Tensor.randn(1024, 1024) b = Tensor.randn(1024, 1024) c = (a * b).relu() # 还没算,只是记账 c.realize() # 这里才上 GPU,且乘法和 relu 融成了一个 kernel

"记账"还有个好处:编译器能把相邻的操作融合成一个 kernel。a*b和.relu()本来要来回显存搬两次数据,融合后一次搞定,带宽直接省下来。这就是它"小模型快、还能读源码"的底气。

关键特性

算子融合:一次 realize 顶 N 次 kernel

对你最大的好处是省显存带宽。GPU 很多时候不是算力不够,而是在"从显存搬数据"上磨洋工。tinygrad 把能连起来的操作并成一个 kernel,来回搬数据的次数直接砍掉。

怎么实现的:靠前面说的惰性记账,加上 IR(中间表示)层面的 fuse 规则,在realize()时一次性生成融合后的代码。想看它到底生成了什么,跑DEBUG=4就能看到 kernel 源码。

TinyJit:一行装饰器,训练步从 75ms 干到 1ms

这是 tinygrad 最"值"的功能。默认状态下它不算快——在 T4 上,MNIST 一步训练要 75ms。把训练函数包一层TinyJit,同一件事变成1.0ms,约 75 倍加速。

from tinygrad import TinyJit jit_step = TinyJit(step) # step 是你的训练函数

原理很简单:它把第一次跑时用到的 kernel 都"录"下来,后面只重放这些 kernel,把 Python 那层开销整个跳掉。注意它连优化器一起 JIT,相当于"换个数据重放一遍"。代价是:非 tinygrad 的 Python 值从第二次开始会被"冻住",输入形状也不能变。

后端随便挑:同一份代码跑 CPU、NVIDIA、AMD、甚至浏览器

你写好的模型,换个DEV变量就能在别的硬件上跑,代码一行不改。目前支持 OpenCL、CPU、Metal、CUDA、AMD、NV、QCOM、WebGPU(浏览器)这些后端。

为什么这么省事?因为每个新后端只要实现约 25 个底层 op,其余全靠编译器生成。所以你能在自己的奇怪硬件上也跑起来,后端源码 每个文件都不长。

源码短到你能读完

PyTorch 出问题你多半只能等官方修;tinygrad 出问题,你自己打开文件就能改。核心库是纯 Python,量级比主流框架小得多。想加个功能、想改个 bug,门槛就是"读得懂"。这也是它常被拿来当学习深度学习框架原理的教材的原因。

配置详解:这几个环境变量最常用

tinygrad 的行为基本靠环境变量控制。下面是新手最常碰的几个,直接照着用:

变量常用值调大/调小会怎样
DEBUG1–7打印详情的开关。2看每个 kernel 耗时,3看优化,4看生成的 kernel 代码,7看到汇编。调试时最有用。
DEVNV/AMD/CPU/CL…指定后端。没显卡用CPU也能训;DEV=NV:CUDA:sm_70还能细到架构。
BEAM整数,如2、4越大搜索越狠,能找出更快的 kernel 实现;但首次搜索慢。结果会缓存,之后不用再搜。
DEFAULT_FLOATHALF/FLOAT32改HALF省显存、提速,精度略降。默认FLOAT32。
FLOAT161图像/视觉模型专用,显存直接减半。
JIT0/1/20全关(纯调试),1默认开,2开 JIT 但关图执行。
VIZ1打开可视化,把计算图画出来,排查结构超直观。
TRAINING1切训练模式,dropout 这类操作才会真正生效。

举例:想在浏览器里跑、还要看 kernel 代码,就DEV=WEBGPU DEBUG=4 python3 xxx.py。完整清单在 env_vars.md。

落地场景:从 MNIST 到 Stable Diffusion

场景一:教学和快速原型,几秒钟出结果

痛点:以前想给学生或自己演示一个训练流程,得先装好 PyTorch + CUDA,环境一装就是半小时,还容易版本冲突。

tinygrad 的解法:pip install -e .就行,纯 Python,没显卡也能在 CPU 上把 MNIST 跑到 98%。5 秒出结果,用来讲原理、做原型验证,环境成本几乎为零。

场景二:浏览器里跑视觉模型、生成式 AI

痛点:很多模型要部署到服务器上才能跑,前端只能干等 API。

tinygrad 有 WebGPU 后端,把同一份模型直接塞进浏览器。比如仓库里的 Stable Diffusion 示例,能在网页端直接出图:

目标检测同理。下面的 YOLOv8 结果就是 tinygrad 推理出来的,能框出人、球等多个目标:

还有 EfficientNet 图像分类,喂一张鸡的图,它直接告诉你这是什么:

性能与调优:把 tinygrad 调到和 PyTorch 一个量级

tinygrad 默认"不追求快",但下面几步做完,速度就能到主流框架的量级。数字以官方文档 T4 上的 MNIST 训练步为例:

配置单步耗时说明
什么都不加~75ms调试够用,别拿它跑正式训练
+TinyJit~1.0ms75 倍加速,生产训练标配
+BEAM=2再降一截自动搜最快 kernel,结果缓存,之后免搜
+FLOAT16=1(视觉模型)显存减半图像/生成类模型推荐,配合 HALF 用

可操作的几条:

  1. 永远上 TinyJit。这是最大的收益,没有之一。训练函数写成独立函数再包TinyJit,注意输入形状固定。
  2. 首次跑加BEAM。它替你搜最快实现并缓存,相当于免费的自动调优。
  3. 视觉模型开FLOAT16/DEFAULT_FLOAT=HALF,显存直接砍半,大一点的网络才放得下。
  4. 卡在哪用DEBUG=2看。它给出每个 kernel 的耗时和带宽,哪个 kernel 慢一眼就知道。

常见问题

默认设备怎么查?python3 -c "from tinygrad import Device; print(Device.DEFAULT)"。要强制指定就用DEV=NV这种环境变量。

从 PyTorch 迁移要改什么?两个点:一是没有nn.Module,模型就是普通类,用__call__代替forward;二是风格更"功能式",比如直接写x.conv2d(w, b),无状态的操作不用专门建类。API 大体和 torch 对齐,迁移成本不高。

为什么感觉比 PyTorch 慢?默认状态它不优化速度。加TinyJit再配BEAM,才进入和主流框架比拼的量级。

模型权重怎么存?标准格式是 safetensors,和 Hugging Face 通用。用tinygrad/nn/state.py里的safe_save/safe_load存读即可。

能跑 LLaMA 这种大模型吗?能。仓库examples/llama.py就是完整的聊天示例,下载好权重放进去就能跑。生成、检测、语音这些都有对应示例。

写在最后

tinygrad 的价值就一句话:用最短的代码,给你一条能从"写模型"一路看到"GPU 上跑的汇编"的完整链路。

下一步建议:跑完 MNIST 后,把examples/beautiful_mnist.py打开,对照着这份指南读一遍——你会发现整个训练循环也就几十行,这正是它想让你感受到的东西。

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

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

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

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

立即咨询