tinygrad/tinygrad
You like pytorch? You like micrograd? You love tinygrad! ❤️
tinygrad – 小さくハック可能なディープラーニングスタック
概要 – tinygradは、完全なエンドツーエンドのディープラーニングフレームワークを実装したオープンソースのPythonライブラリですが、コードベースは意図的に小さく保たれています。以下を提供します:
- 自動微分 (autograd) を備えた Tensor クラス。
- 演算を融合し、デバイスカーネルに低レベル化する IR / コンパイラ。
- JIT / グラフ実行 (
TinyJit経由)。 - 実際のモデルを学習するための軽量な nn / optim / dataset 層。
PyTorchのような人間工学的な使い勝手を提供しつつ、コンパイラの内部構造を公開して調整を容易にすることで、フル機能のPyTorchと極小のmicrogradの中間に位置することを目指しています。
主要フレームワークとの比較
| 機能 | 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())
リポジトリには、GPU上で約5秒で約98%の精度に達する完全なMNISTの例 (examples/beautiful_mnist.py) が含まれています。
デバイスサポート (アクセラレータ)
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スタックの内部構造を理解したり拡張したりしたい学生、愛好家、研究者に最適です。
関連
- プロジェクト
- プロジェクト
- プロジェクト
- プロジェクト
- プロジェクト