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

资讯详情

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

tinygrad 入门:4 个机制跑通你的第一个深度学习训练循环

tinygrad 入门:4 个机制跑通你的第一个深度学习训练循环 tinygrad 入门4 个机制跑通你的第一个深度学习训练循环【免费下载链接】tinygradYou like pytorch? You like micrograd? You love tinygrad! ❤️项目地址: https://gitcode.com/GitHub_Trending/tiny/tinygradtinygrad 把张量计算、自动微分、GPU 执行塞进几千行 Python 源码里每个 API 背后都能读到底。新手最容易卡的不是 API而是它的计算模型。下面按实际会踩坑的顺序讲 4 个机制每个配能直接跑的代码。 环境搭建tinygrad 从源码安装只需一条 clone 命令先装好再说。执行git clone https://gitcode.com/GitHub_Trending/tiny/tinygrad然后cd tinygrad pip install -e .。CPU 就是默认后端第一次跑通不需要任何显卡驱动。有人会觉得是不是少了什么依赖答案是官方本来就建议源码安装预编译包反而缺调试信息。 Tensor 为什么延迟执行realize 之前什么都没发生tinygrad 的所有操作都是惰性的像记账a*21只是往账本上写一笔真正跑 kernel 是realize()或.numpy()那一刻。下面这段最小训练循环就是完整的记账结账30 行以内涵盖核心 APIfrom tinygrad import Tensor, Context from tinygrad.nn.datasets import mnist from tinygrad.nn.optim import SGD X_train, Y_train, X_test, Y_test mnist() w1 Tensor.kaiming_uniform(128, 784) w2 Tensor.kaiming_uniform(10, 128) def model(x): return x.flatten(1).dot(w1.T).relu().dot(w2.T) opt SGD([w1, w2]) with Context(TRAINING1): for step in range(70): opt.zero_grad() s Tensor.randint(128, highX_train.shape[0]) model(X_train[s]).sparse_categorical_crossentropy(Y_train[s]).backward() opt.schedule_step() if step % 10 9: print((model(X_test).argmax(1) Y_test).mean())这里要注意两点Context(TRAINING1)是训练开关缺了它 optimizer 会直接报错schedule_step()是结账动作不写它整个循环只在攒账。跑完 loss 会稳步下降步数和 Adam 调一下还能更高完整写法见 examples/beautiful_mnist.py。有人会问为什么非要把执行推迟答案是调度器要看完整计算图才能合并相邻 kernel否则每个算子一次内存读写速度腰斩。 TinyJit 装饰器怎么加把 Python 派发开销一次性买断纯 Python 逐 op 派发是 tinygrad 慢的主因——相当于每做一道菜都回办公室重翻菜谱。TinyJit的思路是第一次调用时把 kernel 序列拍下来同形状输入直接回放from tinygrad import TinyJit TinyJit def train_step(X, Y): opt.zero_grad() model(X).sparse_categorical_crossentropy(Y).backward() opt.schedule_step() return model(X).argmax(1)注意函数必须纯、输入形状不能变第一次调用更慢在抓序列边界用例在 test/backend/test_jit.py 里都有覆盖。有人会问回放是按输入值匹配吗不是按形状和类型建缓存同形状不同数据走同一条录制好的 kernel 链。 没有 nn.Module 时get_parameters 怎么喂给 optimizerPyTorch 用户会本能写model.parameters()。tinygrad 里没有nn.Module模型就是普通 Python 类get_parameters帮你递归挖出所有可训练 Tensorfrom tinygrad.nn.state import get_parameters from tinygrad.nn.optim import SGD opt SGD(get_parameters(model))这里要注意它只挑is_param的 TensorBatchNorm 的 running_mean 这类 buffer 不进 optimizer但仍会被正确 realize不会漏更新。 tinygrad 调试DEBUG2 和 VIZ1 两个开关先看这里卡住时别硬猜。DEBUG2打印每个 kernel 的耗时和调用次数是确认到底执行了什么的第一选择VIZ1画出计算图融合对不对一眼可见环境有疑义就跑python3 -m pytest test/test_tiny.py这个官方冒烟测试变量全集在 docs/env_vars.md。有人问怎么确认操作落在哪个后端看DEBUG2里 kernel 名前缀CL/、CUDA/、HIP/对照环境里装了什么编译器就清楚了。 tinygrad 能跑多大的模型从 MNIST 到 YOLOv8 和 SDXL训练循环通了上限比想象的高examples 目录里有 YOLOv8、Stable Diffusion、GPT-2 的完整跑法下图是 tinygrad 跑 SDXL 的生成结果想抄模型定义翻 extra/models/ 里的 ResNet、ViT、Llama 实现比任何博客都权威。把上面那段 MNIST 循环真正跑一遍再开着DEBUG2看 kernel 一个个执行下去——tinygrad 最上头的地方是每一层都能读到底。遇到看不懂的行为直接翻对应源码那里就是最好的文档。【免费下载链接】tinygradYou like pytorch? You like micrograd? You love tinygrad! ❤️项目地址: https://gitcode.com/GitHub_Trending/tiny/tinygrad创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表