news 2026/8/27 20:59:11

极简深度学习框架 tinygrad:PyTorch 的皮,micrograd 的魂,代码仅几万行,却能跑通大模型

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
极简深度学习框架 tinygrad:PyTorch 的皮,micrograd 的魂,代码仅几万行,却能跑通大模型
tinygrad 完全解析:极简、可 hack 的深度学习框架

项目介绍:介于 PyTorch 与 micrograd 之间的“玩具”内核

在深度学习框架的版图上,PyTorch 占据了易用性高地,TensorFlow 统治着生产部署,而 JAX 则代表着函数式编程的未来。然而,这些框架的代码库动辄数十万行,内部实现极其复杂,让想要深入理解深度学习底层原理的开发者望而却步。

tinygrad的出现,正是为了填补这一空白。它由知名黑客 George Hotz(geohot)创建,是一个端到端深度学习堆栈,包含自动微分、张量库、JIT 编译器、优化器、神经网络层和数据加载器,但全部代码只有约 4 万行(核心部分甚至更少)。它的设计哲学是“保持小巧,易于阅读,极度可 hack”,让你能够像理解 micrograd 一样,彻底掌握一个现代深度学习框架的工作机制。

tinygrad 的名字本身就暗示了它的定位:比 PyTorch 更小,比 micrograd 更完整。它不仅是教学工具,更是一个真正可用的训练框架——你可以用它训练 MNIST 分类器(98% 准确率,仅需 5 秒),也可以在其上构建 GPT 等现代模型。更重要的是,它支持 CPU、GPU(CUDA/Metal/OpenCL)、AMD、Qualcomm 等多种硬件,并通过 JIT 编译生成高性能内核。

核心特性:极简、统一、可编译

轻量级张量库与自动微分

tinygrad 的核心是Tensor类,它支持所有常见的张量操作(点积、reshape、卷积等),并内置自动微分。与 PyTorch 的 API 高度相似,让你可以无缝迁移代码。

from tinygrad import Tensor x = Tensor.eye(3, requires_grad=True) y = Tensor([[2.0, 0, -2.0]], requires_grad=True) z = y.matmul(x).sum() z.backward() print(x.grad.tolist()) # dz/dx print(y.grad.tolist()) # dz/dy

函数式 JIT 与懒执行

tinygrad 采用了与 JAX 相似的函数式 JIT 编译。通过TinyJit装饰器,可以将一个函数编译为高效的设备内核。更重要的是,tinygrad 是懒执行的——计算图不会立即执行,而是先构建 IR,最后通过编译器生成内核,并在需要时触发计算。这种设计使得内核融合成为可能,例如矩阵乘法可以被编译成单个高性能 kernel,而不是多个串行操作。

from tinygrad import Tensor, TinyJit @TinyJit def matmul(a, b): return a @ b a = Tensor.rand(1024, 1024) b = Tensor.rand(1024, 1024) c = matmul(a, b) # 触发 JIT 编译并执行

多后端编译器

tinygrad 的核心编译器负责将计算图降级为底层 IR,并通过调度器为不同硬件生成代码。目前支持的后端包括:

  • CPU

  • CUDA(NVIDIA GPU)

  • METAL(Apple GPU)

  • OpenCL

  • AMD

  • QCOM(Qualcomm)

  • WebGPU(浏览器)

添加新后端非常容易——只需实现约 25 个低级操作(如矩阵乘法、卷积、复制等),就能将整个框架移植到新硬件上。

完整训练栈

除了张量和自动微分,tinygrad 还提供了nn模块(线性层、卷积、BatchNorm 等)、优化器(SGD、Adam)和数据加载器,让你可以编写完整的训练脚本。

from tinygrad import Tensor, nn from tinygrad.nn.optim import Adam class LinearNet: def __init__(self): self.l1 = Tensor.kaiming_uniform(784, 128) self.l2 = Tensor.kaiming_uniform(128, 10) def __call__(self, x): return x.flatten(1).dot(self.l1).relu().dot(self.l2) model = LinearNet() optim = Adam([model.l1, model.l2], lr=0.001) # 训练循环(类似 PyTorch) for epoch in range(10): optim.zero_grad() loss = model(x).sparse_categorical_crossentropy(y).backward() optim.step() print(loss.item())

快速开始:5分钟上手

安装

推荐从源码安装以获得最新特性:

git clone https://github.com/tinygrad/tinygrad.git cd tinygrad pip install -e .

或直接通过 pip 安装主分支:

pip install git+https://github.com/tinygrad/tinygrad.git

测试运行

# 查看默认设备 python -c "from tinygrad import Device; print(Device.DEFAULT)" # 运行 MNIST 训练示例(会下载数据,需联网) python examples/beautiful_mnist.py

调试模式

设置环境变量DEBUG=3可以查看编译过程,DEBUG=4可以看到生成的设备代码:

DEBUG=3 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(axis=2).realize()"

优势对比:tinygrad 与其他框架

对比维度

tinygrad

PyTorch

JAX

TensorFlow

代码规模

~4 万行

数百万行

数十万行

数百万行

可读性

⭐⭐⭐⭐⭐

⭐⭐

⭐⭐⭐

自动微分

支持

支持

支持(函数式)

支持

JIT 编译

函数级 TinyJit

TorchScript

默认

XLA

硬件支持

多后端,可扩展

丰富

丰富

丰富

训练能力

完整

完整

完整

完整

易用性

接近 PyTorch

极高

中等

中等

生产级部署

实验性

成熟

中等

成熟

社区

新兴

庞大

增长

庞大

核心目标

教学 + 可 hack

易用 + 性能

函数式 + 编译

生产 + 部署

核心优势

  • 代码极简:任何人都可以在几小时内通读核心代码,理解深度学习框架的内部机制。

  • 可 hack 性:想要添加新操作、新后端或优化编译器?修改几处代码即可,无需在数十万行代码中挣扎。

  • 统一设计:从张量到编译器的全栈统一,没有“Python 前端 + C++ 后端”的割裂感。

  • 真正跨平台:通过少量底层原语就能移植到任何硬件,甚至支持 WebGPU(浏览器中运行)。

应用场景:谁应该使用 tinygrad?

  • 学习者:想深入理解深度学习框架的内部实现,tinygrad 是最佳教材。你可以从tinygrad/tensor.py开始,一步步看到自动微分、编译和硬件加速如何实现。

  • 研究人员:需要快速验证新算子、新优化器或新训练策略?tinygrad 让你无需在庞大代码库中绕圈,可以直接在核心上实验。

  • 框架开发者:想为特定硬件(如自研 NPU)开发深度学习支持?tinygrad 的硬件抽象层极其简单,可以快速移植。

  • 极客:喜欢探索新技术,对 George Hotz 的作品感兴趣?tinygrad 充满了 hack 精神,值得收藏和把玩。

总结:学习深度学习框架的最佳入口

tinygrad 证明了深度学习框架不必是庞然大物。通过极简的设计和可 hack 的实现,它让开发者能够真正理解现代深度学习栈的每个层次,从张量运算到编译器优化。如果你正在寻找一条从零开始掌握深度学习框架的捷径,tinygrad 就是最好的起点。它可能不会取代 PyTorch 在生产环境中的地位,但它一定会培养出更多懂得框架底层原理的工程师。

现在就克隆代码,用 DEBUG=3 运行一下,看看矩阵乘法是如何被编译成 CUDA kernel 的——你可能会对深度学习框架的魔力有全新的认识。


项目地址:https://github.com/tinygrad/tinygrad
文档:https://docs.tinygrad.org

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/27 20:57:16

前端渲染性能问题的定位方法

前端渲染性能问题的定位方法渲染变慢时先区分网络等待、脚本计算和页面布局。性能面板中的长任务只是线索,还需要回到组件更新原因和数据量确认。 减少无效更新 将昂贵计算放在稳定依赖之后缓存,列表使用窗口化或分页。优化前后使用相同交互路径录制&…

作者头像 李华
网站建设 2026/8/27 20:57:07

2027届必备的六大降AI率方案解析与推荐

毕业论文提交前,降AI率成了多数毕业生绕不开的一道工序。高校对AIGC检测的重视程度逐年提升,2027届的评审标准只会更严。市面上降AI率的方案五花八门,到底哪些真正管用?这篇把主流方案逐一拆开看。 降AI率为什么成了毕业论文的&q…

作者头像 李华
网站建设 2026/8/27 20:57:06

2027届毕业季论文降重平台横评:五款实测对比

毕业季又到了,论文降重成了多数学生绕不开的一关。知网、维普的重复率红线就摆在那里,而市面上号称"智能降重"的平台少说几十款,宣传话术大同小异,实际效果却参差不齐。有的改完语义断裂,有的越改重复率越高…

作者头像 李华
网站建设 2026/8/27 20:54:18

图论建模与Dijkstra算法:从电梯调度问题到最短路径实战

1. 项目概述:从一道题到一类问题的建模与求解 看到“电梯换乘 Uva10801”这个标题,很多参加过算法竞赛或者对图论建模感兴趣的朋友可能会心一笑。这不仅仅是UVA在线评测系统上的一道经典题目,更是一个将现实世界中的复杂调度问题,…

作者头像 李华
网站建设 2026/8/27 20:50:29

Python2 已终结,入手Python 3,你需要这30个技巧

。有着那样一个具备实用价值的功能存在, 在于做出把先前的命令输出给进行调用这样的相关操作, 在此身处地方的输入以及输出确实实际上都是对象, 就好像举例来说, 你能够采用Out去将第三条命令的输出从当中抽取调出来。你可以用下面这条命令安装 :pip34. 列表表达式一…

作者头像 李华