尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

tinygrad 快速上手:10 行代码跑通你的第一个深度学习训练

tinygrad 快速上手:10 行代码跑通你的第一个深度学习训练 tinygrad 快速上手10 行代码跑通你的第一个深度学习训练【免费下载链接】tinygradYou like pytorch? You like micrograd? You love tinygrad! ❤️项目地址: https://gitcode.com/GitHub_Trending/tiny/tinygrad你写过 PyTorch也啃过 micrograd但想要一个既够用、又小到能通读源码的深度学习框架tinygrad 就是卡在两者之间的答案一个纯 Python 写的端到端深度学习栈张量、自动求导、编译器、JIT 全在你能读完的体量里。tinygrad 到底能替你扛下什么活大白话tinygrad 让你用几十行 Python 就能定义、训练、跑推理一个神经网络而且你能一路追到它生成的底层 kernel。技术上它不是只给你一个张量库而是一整套栈——带自动求导的 Tensor、负责融合和下推 kernel 的 IR 与编译器、把重复计算打包回放的 JIT外加能直接训模型的 nn、optim、datasets。所以从手写 MNIST 到 Stable Diffusion、LLaMA 这类真实模型它都能接。7 行代码看 tinygrad 的自动求导下面这段代码创建两个张量、做一次矩阵乘法求和再算出梯度是体验 tinygrad 核心——惰性张量加自动求导——最短的路径from tinygrad import Tensor x Tensor.eye(3).clone() y Tensor([[2.0, 0, -2.0]]) z y.matmul(x).sum() z.backward() # 触发自动求导 print(x.grad.tolist()) # dz/dxz.backward()是关键它沿着计算图把每个张量上的梯度算出来填进.grad。你不需要手写求导公式clone()让 x 成为一个真实 buffer这样梯度才有地方存。懒加载为什么 tinygrad 先记账再干活可以把惰性求值想成餐厅点菜你每下一道 op服务员只是把菜写进单子后厨不动等你喊「上菜」realize()后厨才把能一起做的菜合成一锅、一次端上来。a Tensor.rand(4, 4) b Tensor.rand(4, 4) c (a * b).relu().sum() # 此时什么都没算只记在账本上 c.realize() # 真正执行融合、下推、出结果这么设计是为了性能一串 op 先攒起来编译器才能把它们融合成更少的 kernel、减少在 CPU 和设备之间来回搬数据顺带把整个计算图交给自动求导去处理。从玩具代码到真训练跑通一个数字分类器你要实现一个手写数字分类器识别 MNIST 里的 0 到 9。先搭一个带卷积的模型from tinygrad import Tensor, nn, Context from tinygrad.nn.datasets import mnist class Model: def __init__(self): self.conv nn.Conv2d(1, 8, 5) self.fc nn.Linear(8*24*24, 10) def __call__(self, x): return self.fc(self.conv(x).relu().flatten(1))注意这里没有nn.Module也没有forward模型就是个普通 class用__call__表达前向。接上优化器和数据开始训练model, opt Model(), nn.optim.Adam(nn.state.get_parameters(model), lr3e-4) Xtr, Ytr, Xte, Yte mnist() with Context(TRAINING1): for i in range(100): opt.zero_grad() model(Xtr[:64]).sparse_categorical_crossentropy(Ytr[:64]).backward() opt.step()get_parameters(model)会递归把模型里所有可训练张量抓出来交给 Adam训练完在测试集上验一把acc (model(Xte[:1000]).argmax(1) Yte[:1000]).mean() print(acc.item())想跑得更快把前向套上 JIT它会记住算好的 kernel 直接回放from tinygrad import TinyJit TinyJit def forward(x): return model(x).realize()新手最容易踩的 3 个坑打印 Tensor 没有值 / 结果莫名不对现象print(t)或拿结果去比较发现数值是空的或错的。原因op 只是记账没realize()就不会真正计算。解法用.numpy()、.item()或.realize()触发执行再加DEBUG3看生成了哪些 kernel。训练态和推理态没区分准确率不涨现象加了 BatchNorm 的模型训练效果差、评估时对不上。原因忘了开训练上下文两种状态用了同一套统计量。解法训练循环用with Context(TRAINING1)包住退出的时候会自动还原。照着 PyTorch 习惯写代码报错现象写了nn.Module或model.forward(x)找不到。原因tinygrad 没有 Module模型是普通 class前向叫__call__。解法用nn.state.get_parameters(model)取参数直接model(x)调用。延伸阅读想看一个 48 行就能跑到 98% 精度的完整训练循环直接读这个 examples/beautiful_mnist.py。从张量创建到各种操作符Tensor 的全部方法都收在这 docs/tensor/index.md。想改运行行为——调试、换后端、开 VIZ 可视化环境变量一览在这 docs/env_vars.md。到这里你已经能独立写一个 tinygrad 训练循环读懂它的懒加载和自动求导也能顺着源码一路追到生成 kernel 的那一层。想再往下走从 examples/ 里挑一个你感兴趣的模型读起来就行。【免费下载链接】tinygradYou like pytorch? You like micrograd? You love tinygrad! ❤️项目地址: https://gitcode.com/GitHub_Trending/tiny/tinygrad创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表