From 803587b8b42697fcc2f5ad920ea76d9cd716f666 Mon Sep 17 00:00:00 2001
From: George Hotz
Date: Fri, 26 May 2023 06:10:41 +0000
Subject: [PATCH] update readme
---
README.md | 46 +++++++++++++---------------------------------
1 file changed, 13 insertions(+), 33 deletions(-)
diff --git a/README.md b/README.md
index 650025dec4..00a76b4739 100644
--- a/README.md
+++ b/README.md
@@ -121,24 +121,6 @@ from tinygrad.tensor import Tensor
(Tensor.ones(4,4).gpu() + Tensor.ones(4,4).gpu()).cpu()
```
-### ANE Support?! (broken)
-
-If all you want to do is ReLU, you are in luck! You can do very fast ReLU (at least 30 MEGAReLUs/sec confirmed)
-
-Requires your Python to be signed with `ane/lib/sign_python.sh` to add the `com.apple.ane.iokit-user-access` entitlement, which also requires `sudo nvram boot-args="amfi_get_out_of_my_way=1 ipc_control_port_options=0"`. Build the library with `ane/lib/build.sh`
-
-In order to set boot-args and for the AMFI kext to respect that arg, run `csrutil enable --without-kext --without-nvram` in recovery mode.
-
-```python
-from tinygrad.tensor import Tensor
-
-a = Tensor([-2,-1,0,1,2]).ane()
-b = a.relu()
-print(b.cpu())
-```
-
-Warning: do not rely on the ANE port. It segfaults sometimes. So if you were doing something important with tinygrad and wanted to use the ANE, you might have a bad time.
-
### hlops (in tensor.py)
hlops are syntactic sugar around mlops. They support most things torch does.
@@ -148,7 +130,7 @@ hlops are syntactic sugar around mlops. They support most things torch does.
mlops are mid level ops. They understand derivatives. They are very simple.
```
-Relu, Log, Exp # unary ops
+Relu, Log, Exp, Sin # unary ops
Sum, Max # reduce ops (with axis argument)
Maximum, Add, Sub, Mul, Pow, Div, Equal # binary ops (no broadcasting, use expand)
Expand, Reshape, Permute, Pad, Shrink, Flip # movement ops
@@ -162,7 +144,7 @@ The autodiff stuff is all in mlops now so you can focus on the raw operations
```
Buffer # class of memory on this device
-unary_op (NOOP, EXP, LOG, CAST) # A -> A
+unary_op (NOOP, EXP, LOG, CAST, SIN) # A -> A
reduce_op (SUM, MAX) # A -> B (smaller size, B has 1 in shape)
binary_op (ADD, SUB, MUL, DIV, POW, CMPEQ, MAX) # A + A -> A (all the same size)
movement_op (EXPAND, RESHAPE, PERMUTE, PAD, SHRINK, STRIDE) # A -> B (different size)
@@ -174,16 +156,16 @@ fused_op [[optional]] (MULACC) # A * A -> B
Despite being tiny, tinygrad supports the full EfficientNet. Pass in a picture to discover what it is.
```bash
-ipython3 examples/efficientnet.py https://media.istockphoto.com/photos/hen-picture-id831791190
+python3 examples/efficientnet.py https://media.istockphoto.com/photos/hen-picture-id831791190
```
Or, if you have a webcam and cv2 installed
```bash
-ipython3 examples/efficientnet.py webcam
+python3 examples/efficientnet.py webcam
```
-PROTIP: Set "DEBUG=1" environment variable if you want to see why it's slow.
+PROTIP: Set "DEBUG=2" environment variable if you want to see why it's slow.
### tinygrad supports Stable Diffusion!
@@ -199,6 +181,14 @@ Run `python3 examples/stable_diffusion.py`
"a horse sized cat eating a bagel"
+### tinygrad supports LLaMA
+
+After putting the weights in weights/LLaMA, you can have a chat with Stacy. She lives inside tinygrad.
+
+```bash
+python3 examples/llama.py
+```
+
### tinygrad supports GANs
See `examples/mnist_gan.py`
@@ -215,18 +205,8 @@ See `examples/yolov3.py`
-## The promise of small
-
-tinygrad will always be below 1000 lines. If it isn't, we will revert commits until tinygrad becomes smaller.
-
### Drawing Execution Graph
-* Nodes are Tensors
-* Black edge is a forward pass
-* Blue edge is a backward pass
-* Red edge is data the backward pass depends on
-* Purple edge is intermediates created in the forward
-
```bash
GRAPH=1 python3 test/models/test_mnist.py TestMNIST.test_sgd_onestep
# requires dot, outputs /tmp/net.svg