tinygrad/tinygrad
You like pytorch? You like micrograd? You love tinygrad! ❤️
tinygrad – 一个精简且可修改的深度学习堆叠
它是什么 – tinygrad 是一个开源 Python 库,实现了一个完整的端到端深度学习框架,但代码库刻意保持精简。它提供:
- 具有自动微分 (autograd) 的 Tensor 类。
- 一个将运算融合并降低为设备核心 (device kernels) 的 IR / 编译器。
- JIT / 图执行 (通过
TinyJit)。 - 轻量级的 nn / optim / dataset 层,让您可以训练真实模型。
它的目标是介于功能齐全的 PyTorch 与极简的 micrograd 之间,在提供类似 PyTorch 的人体工学体验的同时,公开编译器内部结构以便于调整。
与大型框架的比较
| 特性 | PyTorch | JAX | tinygrad |
|---|---|---|---|
| Eager Tensor API | ✅ | – | ✅ |
| Autograd | ✅ | ✅ (via JAXPR) | ✅ |
| 函数式转换 (vmap, pmap) | – | ✅ | 部分 |
| 编译器与 IR 可见 | – | ✅ | ✅ |
| 前端 (nn, optim, datasets) | ✅ | – | ✅ |
| 多设备支持 | ✅ | ✅ | ✅ (CPU, CUDA, Metal, OpenCL, AMD, NV, QCOM, WebGPU) |
快速开始示例
from tinygrad import Tensor, nn, Context
class LinearNet:
def __init__(self):
self.l1 = Tensor.kaiming_uniform(784, 128)
self.l2 = Tensor.kaiming_uniform(128, 10)
def __call__(self, x: Tensor) -> Tensor:
return x.flatten(1).dot(self.l1).relu().dot(self.l2)
model = LinearNet()
optim = nn.optim.Adam([model.l1, model.l2], lr=0.001)
x, y = Tensor.rand(4, 1, 28, 28), Tensor([2,4,3,7])
with Context(TRAINING=1):
for i in range(10):
optim.zero_grad()
loss = model(x).sparse_categorical_crossentropy(y).backward()
optim.step()
print(i, loss.item())
该存储库附带一个完整的 MNIST 示例 (examples/beautiful_mnist.py),在 GPU 上约五秒内即可达到约 98% 的准确率。
设备支持 (加速器)
tinygrad 可以在许多后端上执行,每个设备仅需约 25 个原始运算:
- CPU
- CUDA (NVIDIA GPU)
- Metal (Apple GPU)
- OpenCL
- AMD, NV, QCOM (专用执行环境)
- WebGPU (浏览器 / WASM)
执行
python3 -c "from tinygrad import Device; print(Device.DEFAULT)"以查看默认使用的加速器。
安装
# 从源码安装 (推荐)
git clone https://github.com/tinygrad/tinygrad.git
cd tinygrad
python3 -m pip install -e .
# 或直接从存储库安装
python3 -m pip install git+https://github.com/tinygrad/tinygrad.git
该项目还提供 .[testing] 选项以执行测试套件。
文档与社区
- 文档与快速开始: https://docs.tinygrad.org/ (由
docs/文件夹生成) - Discord: https://discord.gg/ZjZadyC7PK – 用户与开发者的活跃聊天室。
- 贡献: README 概述了严格的 PR 政策(无代码高尔夫、对任何速度声明进行基准测试、包含回归测试等),并提到对被采纳的改进提供现金奖励。
何时使用 tinygrad
- 学习与实验 – 由于编译器管线是公开的,您可以精确地观察高阶张量运算如何转变为低阶核心。
- 在受限硬件上进行原型设计 – 该库轻量且可在 CPU、GPU 甚至 WebGPU 上执行。
- 需要可修改堆叠的研究 – 您只需修改几个文件即可新增运算或变更调度。
如果您需要庞大的生态系统、生产级的稳定性或完整的 JAX 转换套件,PyTorch 或 JAX 仍然是更好的选择。
总结
tinygrad 是一个真实、功能齐全的深度学习框架,在精简且易读的代码库中实现了张量、自动微分、基于 JIT 的编译器以及多设备执行。它非常适合想要理解或扩展现代 ML 堆叠内部结构,且不想承担庞大库负担的学生、爱好者与研究人员。
相关
- 项目
- 项目
- 项目
- 项目
- 项目