用5分钟跑通tinygrad:能读懂的深度学习框架全拆解

发布时间:2026/9/2 13:55:53
用5分钟跑通tinygrad:能读懂的深度学习框架全拆解 用5分钟跑通tinygrad能读懂的深度学习框架全拆解【免费下载链接】tinygradYou like pytorch? You like micrograd? You love tinygrad! ❤️项目地址: https://gitcode.com/GitHub_Trending/tiny/tinygrad如果你想学深度学习但一想到几百十万行、内部看不进去的框架就头大tinygrad 值得一试。它是一个端到端的深度学习框架从张量、自动求导到融合并生成内核的编译器再到 nn / optim / datasets全链路代码量小到你能整个读一遍。装好之后你会发现它没有任何第三方依赖纯 CPU 就能把 MNIST 手写数字识别在大约 5 秒内训到 98%。 先跑起来5 分钟 Quick Start克隆仓库官方推荐直接从源码安装git clone https://gitcode.com/GitHub_Trending/tiny/tinygrad cd tinygrad python3 -m pip install -e .确认默认设备。你现在应该看到CPU、CUDA或NV之类的输出如果没看到或报错通常是没在仓库根目录执行pip install -e .补装一次即可。python3 -c from tinygrad import Device; print(Device.DEFAULT)跑第一个训练。直接运行仓库自带的 MNIST 例子DEBUG3 python3 examples/beautiful_mnist.py看结果。你现在应该看到 loss 在几秒内降到 0 以下、test_accuracy 爬到 97~98%没跑起来的话先看报错里缺的是哪个后端DEVCPU可强制走 CPU 兜底。看看它到底生成了什么。DEBUG3会打印调度和融合信息改成DEBUG4还能直接看到生成的内核代码——这在别的框架里是看不到的。它到底替你做了什么内核自动融合操作是惰性的。你写的a.matmul(b).relu()不会一步步执行而是先记成计算图等.realize()或.item()时才真正落地且相邻操作会被合并成一个内核。效果是显存读写次数大幅减少矩阵乘加激活这类常见模式只剩一次访存。关键配置DEBUG4查看融合后的代码。一行装饰器开启 JIT。把训练步包上TinyJit框架会捕获整个前向反向的计算图并回放省掉每步重复调度的开销。官方 MNIST 例子就是这么写的GPU 上单步耗时能降不少。想关掉就设JIT0。同一份代码多种芯片。换个环境变量就换后端DEVCPU、NV、AMD、CUDA、METAL、WEBGPU都支持甚至DEVCPU:LLVM:x86_64,znver2,avx2还能指定 CPU 指令集。你的 M1 Mac 或者浏览器都能直接跑同一份训练代码不用改一行。大模型也能跑。examples/ 下有 GPT-2、LLaMA、Stable Diffusion 的完整实现权重用 HuggingFace 上的 safetensors / PyTorch 格式torch_load加载即用不用转换。tinygrad/llm/ 里还带了聊天界面和推理服务起个本地端口就能在浏览器里对话。关键配置速查配置名默认值什么时候该改改了会怎样DEBUG0想看内部行为时1-7 逐级加深从设备信息到生成代码、汇编DEV自动选择想用指定芯片或后端时强制后端如DEVCPU、NV:PTXBEAM框架默认大矩阵乘不够快时内核 beam 搜索宽度BEAM50更激进JIT1排查图缓存问题时0 关闭2 开 JIT 但禁用图IMAGE0老 GPU 跑卷积时启用 2D 图像格式内存优化FLOAT160显存紧张时图像张量用 float16省一半内存VIZ0想可视化计算图时打开图查看页面看融合过程MAX_CONTEXT128跑 LLM 例子时LLM 推理的最大上下文长度这些都写在命令行前的环境变量里如BEAM50 python3 examples/beautiful_mnist.py立即生效不需要任何配置文件。完整清单见 docs/env_vars.md新手教程在 docs/quickstart.md。接入你的工具权重这一侧基本零摩擦extra/models/ 里的 EfficientNet、ResNet 等都有load_from_pretrained自动下载对应权重你自己训练的模型只要存成 safetensorssafe_save/safe_load在 tinygrad/nn/state.py就能在任意 tinygrad 环境里加载不挑框架版本。数据侧也简单MNIST、CIFAR 的 loader 自带你自己的数据集只要是 numpy 数组Tensor(arr)一行进框架。比如 EfficientNet 在 tinygrad 上直接跑推理输出就是标准分类结果一个真实部署长什么样场景你给团队的内部应用加 YOLOv8 目标检测不想引入一套几 GB 的 CUDA 依赖。模型直接用 examples/yolov8.pyPyTorch 权重torch_load进来就能推理流量单机、图片一张张进没有大 batch 压力配置显存紧张就FLOAT161内核慢就BEAM50监控DEBUG2会打印每个内核的耗时和带宽哪层慢一眼可见。PyTorch 路线tinygrad 路线安装torch 对应 CUDA 版本数 GBpip install -e .一行零依赖运行时内部预编译内核黑盒DEBUG4看生成代码硬件覆盖基本只有 CUDACPU / AMD / NV / Metal / WebGPU踩坑与调优装完 import 报错→ 没做可编辑安装 → 在仓库根目录执行python3 -m pip install -e .examples 里的脚本才能正常 import。同一张卡比 PyTorch 慢→ 多半是 BEAM 没调 → 我一开始只默认跑了一次就下结论说慢后来BEAM50加上 JIT 之后大 GEMM 反而追平了。先调参再下结论。数值和 PyTorch 对不齐→ 小差异是融合内核改变了运算顺序设个容差别慌差异大就用DEBUG5看 UOp 中间表示逐层对比。CPU 后端第一次特别慢→ 它用 clang 即时编译内核首个内核要现编译之后有缓存正常现象。WebGPU 起不来→ 需要安装 Dawn 库pydawn各后端的具体要求见 docs/runtime.md。还能玩什么进阶 边界VIZ1打开可视化页面浏览器里实时看计算图的融合和调度过程examples/webgpu/ 把 YOLOv8 和 Stable Diffusion 整个搬进 Chrome浏览器里跑通文生图效果大致如下extra/gemm/ 里有一堆手写 GEMM 内核CUDA、Metal、AMD 汇编都有想学怎么亲手写 GPU 内核这里是最好的教材边界要说清楚还没有 vmap/pmap 这类功能变换部分算子缺失社区在 docs/ 和测试目录里持续补方向可以看仓库的 Issues。tinygrad 解决的核心痛点是主流深度学习框架太大、太黑盒想读懂、想魔改无从下手。它适合两类人——想真正搞懂框架内部机制的学习者和想要一份可审计、可裁剪推理栈的开发者。下一步建议直接打开 examples/beautiful_mnist.py 逐行读一遍再去 Issues 里看看大家还在提什么需求你就知道这个项目的下一步往哪走了。【免费下载链接】tinygradYou like pytorch? You like micrograd? You love tinygrad! ❤️项目地址: https://gitcode.com/GitHub_Trending/tiny/tinygrad创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考