ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

3步跑通tinygrad深度学习框架:从0到可用的完整指南

3步跑通tinygrad深度学习框架:从0到可用的完整指南 3步跑通tinygrad深度学习框架从0到可用的完整指南【免费下载链接】tinygradYou like pytorch? You like micrograd? You love tinygrad! ❤️项目地址: https://gitcode.com/GitHub_Trending/tiny/tinygradtinygrad 是一个自包含的深度学习框架定位在 PyTorch 和 micrograd 之间Tensor 库、编译器、GPU 后端一应俱全。代码量极小但足够真实——它能在几分钟内训练出可跑的手写数字分类器而且每一层源码你都能读完。什么时候你会需要它 假设你用过几年 PyTorch想搞清楚一件事一个深度学习框架到底是怎么把loss.backward()变成 GPU 上的 kernel 的。你会发现 PyTorch 的代码库大得让人望而却步编译器、调度、驱动散落在无数目录里改一行都要先读三天文档。另一个场景你想在自己不太主流的硬件上跑推理但主流框架的后端封装太深动它成本很高。这时你会希望有一个小一号的框架——前端 API 和你熟悉的 PyTorch 几乎一样但编译器是明文的后端只需要实现约 25 个底层算子就能跑起来。tinygrad 就是为这两种人准备的想读懂框架内核的人和想动手改框架的人。它到底在做什么 打个比方如果框架是餐厅后厨大多数框架只给你上菜和菜单而 tinygrad 把后厨全开放了——每个灶台kernel怎么点火、怎么排班scheduler你都能亲眼看到。一次前向传播的完整路径是Tensor操作只是语法糖实际在构建一张低层 UOp 计算图scheduler把这张图切分成一个个 GPU kernelcodegen把每个 kernel 降成可执行代码最后由对应硬件的 runtime 发射。全链路没有黑盒官方用一张图总结了它在技术栈中的位置维度常规做法tinygrad 做法编译器/调度体量大、改动成本高全部开源可读一个仓库读得完执行每个 op 立即分派惰性求值realize()时自动融合成少数 kernel加新后端写大量适配代码实现约 25 个底层算子即可加速依赖框架内部优化TinyJit装饰器 BEAM 搜索最优 kernel三步跑起来 第 1 步克隆仓库并安装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)官方推荐从源码安装而不是直接 pip 装这样你能同步读代码。第二条命令打印当前默认后端第一次跑之前先确认它不是你想要的设备。第 2 步看一次惰性如何工作DEBUG3 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(axis2).realize()你会看到一长串 reshape、乘法、求和操作被融合进一个 kernel执行。看不懂没关系它的作用是让你直观感受tinygrad 里中间结果不落地realize()才真正算。第 3 步跑一个真实的训练python3 examples/beautiful_mnist.py这个脚本就是一个两层卷积小网络官方称约 5 秒能训到 98% 精度。它同时演示了完整训练循环的写法optim nn.optim.Adam([model.l1, model.l2], lr0.001) x, y Tensor.rand(4, 1, 28, 28), Tensor([2, 4, 3, 7]) for i in range(10): optim.zero_grad() loss model(x).sparse_categorical_crossentropy(y).backward() optim.step()坑提前说数据集首次运行需要下载如果你没有 GPU默认后端可能落在 CPU速度正常但别和 GPU 时间对比。功能亮点 ✨惰性求值 自动融合中间 Tensor 不占显存、不产生拷贝scheduler 决定哪些 op 合并成一个 kernel小模型训练速度因此非常可观。TinyJit给纯函数加一行TinyJit它会捕获 kernel 序列并回放跳过 Python 分派开销推理提速立竿见影。后端选择多CPU、CUDA、AMD、Metal、OpenCL、WebGPU 都有现成实现且 runtime 目录 下每个后端都是单个文件级别的代码。safetensors 原生支持权重存取用业界通用的 safetensors 格式safe_save/load_state_dict两行搞定和其他生态互通无障碍。跑推理效果的话仓库里 YOLOv8 的例子直接能出结果用久了你一定会遇到的问题 ⚠️报错没有 forward 属性tinygrad 没有nn.Module模型就是一个普通 Python 类用__call__代替forward参数收集靠nn.state.get_parameters。从 PyTorch 迁移时这是最高频的报错。forward 完拿不到数值所有操作是惰性的忘了realize()或.numpy()之前一切只是符号图。调试时先确认你的 tensor 已经落地。首次运行特别慢慢在 Python 编译阶段UOp 改写、BEAM 搜索多候选 kernel属于一次性成本。用TinyJit包一层后后续循环走的是回放路径速度才是真实水平。想看到底生成了什么代码DEBUG3看 kernel 级调度DEBUG4直接打印生成的 C 代码。这是排查为什么慢的第一工具环境变量全表在 docs/env_vars.md。写在最后tinygrad 的取舍很明确不追求功能全家桶追求每一行都读得懂、每一处都改得动。如果你只想用它的 API 足够像 PyTorch如果你还想懂从 开发者文档 的前端—调度—下降—执行四段式开始读配合 quickstart 教程 跟着敲一遍一个周末足够把核心链路走通。想玩更多模型examples 目录 和 showcase 从 EfficientNet 到 LLaMA 都有现成入口。【免费下载链接】tinygradYou like pytorch? You like micrograd? You love tinygrad! ❤️项目地址: https://gitcode.com/GitHub_Trending/tiny/tinygrad创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表