tinygrad

GitHub
32.5k 4.1k 简单 1 次阅读 今天MIT开发框架
AI 解读 由 AI 自动生成,仅供参考

tinygrad 是一个极致轻量且功能完整的端到端深度学习框架,旨在填补 PyTorch 的易用性与 micrograd 的简洁性之间的空白。它不仅仅是一个张量库,更内置了从自动微分、中间表示(IR)编译、内核融合到即时编译(JIT)执行的全栈能力,让用户能够用熟悉的 PyTorch 风格代码进行真实的模型训练。

tinygrad 主要解决了现有大型框架过于臃肿、黑盒化严重的问题。它将编译器逻辑和底层调度完全开源并简化,使开发者能清晰看到并修改从高层算子到底层硬件指令的整个过程。同时,它支持 CPU、CUDA、Metal、AMD 等多种加速器,仅需约 25 个底层操作即可适配新硬件,极大地降低了部署门槛。

这款工具特别适合希望深入理解深度学习底层原理的研究人员、想要自定义硬件后端或优化算子的系统开发者,以及喜欢“黑客式”探索源码的教育者。其独特的技术亮点在于“惰性执行”机制,能自动将多个操作融合为单一内核以提升效率,同时保持了代码库的极小体积和高可读性。如果你既喜爱 PyTorch 的流畅体验,又渴望拥有对底层细节的完全掌控权,tinygrad 将是一个理想的选择。

使用场景

一位嵌入式 AI 工程师需要在资源受限的树莓派或老旧笔记本上快速验证新的神经网络架构原型,同时希望深入理解底层算子融合机制以优化推理延迟。

没有 tinygrad 时

  • 环境部署沉重:安装 PyTorch 或 TensorFlow 往往需要数 GB 的依赖库和特定的 CUDA 版本,在边缘设备上极易因内存不足而失败。
  • 黑盒调试困难:当模型性能不佳时,开发者无法查看中间编译过程,难以判断是算子未融合还是调度策略问题,只能盲目调整参数。
  • 硬件适配门槛高:若想尝试在非主流加速器(如特定 AMD GPU 或 WebGPU)上运行,通常需要编写复杂的底层 C++/CUDA 代码或等待官方支持。
  • 学习曲线陡峭:想要从零实现一个自定义算子或修改反向传播逻辑,面对庞大的框架源码往往无从下手,修改成本极高。

使用 tinygrad 后

  • 轻量级即时运行:tinygrad 仅需极少的依赖即可安装,直接在树莓派等低配设备上加载并运行完整的训练循环,启动秒级完成。
  • 透明化内核洞察:通过设置 DEBUG 环境变量,开发者能直接看到生成的底层代码和算子融合细节,精准定位性能瓶颈并进行针对性优化。
  • 跨平台无缝切换:只需更改一行代码指定设备(如 METALOPENCL),同一套模型代码即可在不同硬件后端高效运行,无需重写算子。
  • 极高的可黑客性:框架核心代码仅数千行,开发者可以轻松阅读甚至修改其 IR 编译器与调度器,快速实现个性化的算子逻辑或教学演示。

tinygrad 让深度学习框架从“不可触碰的黑盒”变成了“透明且可随意拆解的乐高”,极大降低了边缘侧模型研发与底层原理探索的门槛。

运行环境要求

操作系统
  • Linux
  • macOS
GPU
  • 非必需
  • 支持多种加速器:NVIDIA GPU (CUDA), AMD GPU, Apple Silicon (Metal), Intel/AMD CPU (OpenCL), WebGPU, Qualcomm (QCOM)
  • 具体显存和 CUDA 版本未说明,取决于所选后端
内存

未说明

依赖
notes该工具主打轻量级和可黑盒化,核心代码极少。推荐从源码安装。支持约 25 种底层操作即可适配新加速器。不同硬件后端需安装对应的运行时驱动(如 NVIDIA 驱动、AMD ROCm、Apple Metal 等)。测试需安装额外依赖包 (.[testing])。
python3.8+
numpy (隐式依赖)
pyopencl (可选,用于 OpenCL)
pycuda (可选,用于 CUDA)
llvmlite (可能用于编译)
tinygrad hero image

快速开始

tiny corp logo

tinygrad:介于 PyTorchkarpathy/micrograd 之间的一款深度学习框架。由 tiny corp 维护。

主页 | 文档 | Discord

GitHub 仓库星标数 单元测试 Discord


tinygrad 是一个端到端的深度学习栈:

  • 张量库,支持自动微分
  • 中间表示与编译器,用于融合和降低计算核
  • 即时编译 + 图执行
  • nn / optim / datasets,用于实际训练

它受到 PyTorch(易用性)、JAX(函数式变换和基于 IR 的自动微分)以及 TVM(调度和代码生成)的启发,但刻意保持轻量级且易于扩展。


tinygrad 与其他框架的对比

PyTorch

  • ✅ 相似:急切模式下的 Tensor API、自动微分、优化器、基础数据集和层。
  • ✅ 可以编写熟悉的训练循环。
  • 🔁 不同于 PyTorch,tinygrad 的整个编译器和中间表示都是可见且可修改的。

JAX

  • ✅ 基于中间表示的自动微分,使用原语(如 JAXPR + XLA)。
  • ✅ 函数级别的 JIT(TinyJit),能够捕获并重放计算核。
  • 🔁 功能性变换较少(尚未实现完整的 vmap/pmap),但代码更易读。

TVM

  • ✅ 多次降低 pass、调度以及基于 BEAM 搜索的计算核选择。
  • ✅ 设备“图”用于批处理执行。
  • 🔁 tinygrad 同时提供了前端框架(张量、神经网络、优化器),而不仅仅是编译器。

惰性求值

尝试一个矩阵乘法。你会发现,尽管风格不同,但由于惰性求值机制,它会被融合为一个单一的计算核。

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()"

DEBUG 改为 4,即可查看生成的代码。

神经网络

事实证明,构建神经网络所需的 90% 仅仅是良好的自动微分/张量库。再加上优化器、数据加载器和足够的计算资源,你就拥有了所有必需的工具。

from tinygrad import Tensor, nn

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])  # 替换为真实的 MNIST 数据加载器

with Tensor.train():
  for i in range(10):
    optim.zero_grad()
    loss = model(x).sparse_categorical_crossentropy(y).backward()
    optim.step()
    print(i, loss.item())

完整版本请参见 examples/beautiful_mnist.py,该示例可在约 5 秒内达到 98% 的准确率。

加速器支持

tinygrad 已经支持多种加速器,包括:

并且很容易添加更多!你选择的加速器只需支持大约 25 个底层操作即可。

要查看默认加速器,请运行:python3 -c "from tinygrad import Device; print(Device.DEFAULT)"

安装

目前推荐从源码安装 tinygrad。

从源码安装

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

直接安装(master 分支)

python3 -m pip install git+https://github.com/tinygrad/tinygrad.git

文档

详细的文档及快速入门指南可在 docs 网站 上找到,该网站基于 docs/ 目录构建而成。

快速对比 PyTorch 的示例

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

同样的代码在 PyTorch 中是这样:

import torch

x = torch.eye(3, requires_grad=True)
y = torch.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

贡献指南

近来,tinygrad 引起了广泛关注。遵循以下指南将有助于您的 PR 被接受。

首先,我们列出一些会导致 PR 直接关闭并指向本节的情况:

  • 请勿进行代码极简化!虽然低行数是本项目的指导原则之一,但任何看起来像代码极简化的提交都会被直接关闭。我们的真正目标是降低复杂度、提高可读性,而单纯删除换行符并不能达到这一目的。
  • 所有文档和空格变更的 PR 都会被关闭,除非您是广为人知的贡献者。编写文档的人应当是对代码库最为熟悉的开发者。未展现出相关能力的人员不应随意修改文档。此外,空格变更既无实际意义,还可能引入 bug。
  • 您声称的“性能提升”必须经过基准测试验证。总体而言,本项目追求简洁性,因此即使您的 PR 使代码运行速度略有提升,也需权衡维护性和可读性的影响。
  • 通常情况下,tinygrad/ 核心目录之外的代码未经充分测试,因此除非现有代码存在明显问题,否则不建议对其进行修改。
  • 如果您的 PR 看起来过于复杂、改动量过大或新增了大量代码行,则不会被评审或合并。建议将其拆分为多个更小、更清晰的 PR。常见模式是在添加新功能之前先进行必要的重构。如果能够通过(干净地)重构,使新功能仅需三行代码即可实现,这将是理想的方案,也便于我们快速评审。

接下来,我们欢迎以下类型的贡献:

  • Bug 修复(附带回归测试)非常受欢迎!目前该库尚未发布 1.0 版本,如果您发现了 bug,请修复它、编写相应的测试用例,并提交 PR,这将是非常有价值的贡献。
  • 解决悬赏任务!tinygrad 为某些库的改进提供了现金悬赏(详见 Google 表格)。所有新增代码都应具备高质量并经过充分测试。
  • 新功能。不过,在添加新功能时,请考虑代码行数与实用性之间的平衡。如果是三行代码的功能,其满足实用性的门槛自然低于三十或三百行的功能。所有新功能都必须包含回归测试。在没有其他约束的情况下,新功能的 API 应尽量与 PyTorch 或 NumPy 保持一致。
  • 明显有益的重构。一般来说,若您的重构无法带来明确的优势,PR 将被关闭。然而,有些重构确实非常出色!请从深层次上考虑代码的可读性。仅仅调整空格或简单移动几个函数并无意义,但如果发现两个各有一百行的函数实际上可以使用同一个一百一十行的函数,并通过传递参数来实现,同时还能显著提升可读性,那么这就是一次巨大的改进。此类重构应通过 进程回放测试
  • 测试用例和模糊测试工具。如果您能添加不易出错的测试用例,我们将非常欢迎。我们目前也有一些模糊测试工具,借助它们以及进一步优化这些工具,仍有许多潜在的 bug 可以被发现。即使只是编写一些本应失败但预期会通过的测试用例(使用 @unittest.expectedFailure),也是非常有价值的。正是通过这种方式,我们才能不断取得进展。
  • 移除核心 tinygrad/ 目录中的死代码。我们并不关心额外模块中的代码,但从核心库中移除死代码是非常有益的,这样新加入的开发者就不必阅读和困惑于这些无用的代码了。

运行测试

请使用 pre-commit install 安装预提交钩子。这将在每次提交时自动运行 linter、mypy 以及部分测试。

如需更多关于如何运行完整测试套件的示例,请参阅 CI 工作流

以下是一些本地运行测试的示例:

python3 -m pip install -e '.[testing]'  # 安装测试所需的额外依赖
python3 test/backend/test_ops.py        # 仅运行算子测试
python3 -m pytest test/                 # 运行整个测试套件

进程回放测试

进程回放 会将您 PR 生成的内核与主分支的内核进行对比。如果您的 PR 是一次重构或性能优化,且未涉及行为上的变化,则应在 PR 标题中注明 [pr]

版本历史

v0.12.02026/01/12
v0.11.02025/08/19
v0.10.32025/05/14
v0.10.22025/02/21
v0.10.12025/02/05
v0.10.02024/11/19
v0.9.22024/08/13
v0.9.12024/06/29
v0.9.02024/05/28
v0.8.02024/01/09
v0.7.02023/08/27
v0.6.02023/05/26
v0.5.02023/03/07
v0.4.02022/11/08

常见问题

相似工具推荐

openclaw

OpenClaw 是一款专为个人打造的本地化 AI 助手,旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚,能够直接接入你日常使用的各类通讯渠道,包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息,OpenClaw 都能即时响应,甚至支持在 macOS、iOS 和 Android 设备上进行语音交互,并提供实时的画布渲染功能供你操控。 这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地,用户无需依赖云端服务即可享受快速、私密的智能辅助,真正实现了“你的数据,你做主”。其独特的技术亮点在于强大的网关架构,将控制平面与核心助手分离,确保跨平台通信的流畅性与扩展性。 OpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者,以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力(支持 macOS、Linux 及 Windows WSL2),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你

349.3k|★★★☆☆|1周前
Agent开发框架图像

stable-diffusion-webui

stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。

162.1k|★★★☆☆|1周前
开发框架图像Agent

everything-claude-code

everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上

159.3k|★★☆☆☆|今天
开发框架Agent语言模型

ComfyUI

ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。

108.3k|★★☆☆☆|1周前
开发框架图像Agent

gemini-cli

gemini-cli 是一款由谷歌推出的开源 AI 命令行工具,它将强大的 Gemini 大模型能力直接集成到用户的终端环境中。对于习惯在命令行工作的开发者而言,它提供了一条从输入提示词到获取模型响应的最短路径,无需切换窗口即可享受智能辅助。 这款工具主要解决了开发过程中频繁上下文切换的痛点,让用户能在熟悉的终端界面内直接完成代码理解、生成、调试以及自动化运维任务。无论是查询大型代码库、根据草图生成应用,还是执行复杂的 Git 操作,gemini-cli 都能通过自然语言指令高效处理。 它特别适合广大软件工程师、DevOps 人员及技术研究人员使用。其核心亮点包括支持高达 100 万 token 的超长上下文窗口,具备出色的逻辑推理能力;内置 Google 搜索、文件操作及 Shell 命令执行等实用工具;更独特的是,它支持 MCP(模型上下文协议),允许用户灵活扩展自定义集成,连接如图像生成等外部能力。此外,个人谷歌账号即可享受免费的额度支持,且项目基于 Apache 2.0 协议完全开源,是提升终端工作效率的理想助手。

100.8k|★★☆☆☆|1周前
插件Agent图像

markitdown

MarkItDown 是一款由微软 AutoGen 团队打造的轻量级 Python 工具,专为将各类文件高效转换为 Markdown 格式而设计。它支持 PDF、Word、Excel、PPT、图片(含 OCR)、音频(含语音转录)、HTML 乃至 YouTube 链接等多种格式的解析,能够精准提取文档中的标题、列表、表格和链接等关键结构信息。 在人工智能应用日益普及的今天,大语言模型(LLM)虽擅长处理文本,却难以直接读取复杂的二进制办公文档。MarkItDown 恰好解决了这一痛点,它将非结构化或半结构化的文件转化为模型“原生理解”且 Token 效率极高的 Markdown 格式,成为连接本地文件与 AI 分析 pipeline 的理想桥梁。此外,它还提供了 MCP(模型上下文协议)服务器,可无缝集成到 Claude Desktop 等 LLM 应用中。 这款工具特别适合开发者、数据科学家及 AI 研究人员使用,尤其是那些需要构建文档检索增强生成(RAG)系统、进行批量文本分析或希望让 AI 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性,但其核心优势在于为机器

93.4k|★★☆☆☆|1周前
插件开发框架