tinygrad/viz
qazal 0ecc417dd2
prep for viz move to core [pr] (#6938)
* prep for viz move to core [pr]

* polish
2024-10-07 23:24:04 +08:00
..
README Viz (#6502) 2024-09-14 16:15:29 +08:00
favicon.svg Viz (#6502) 2024-09-14 16:15:29 +08:00
index.html small changes from the viz_rewrite branch [pr] (#6907) 2024-10-06 12:00:55 +03:00
serve.py prep for viz move to core [pr] (#6938) 2024-10-07 23:24:04 +08:00
test_viz.py prep for viz move to core [pr] (#6938) 2024-10-07 23:24:04 +08:00

README

viz is a replacement for:
GRAPH=1
JITGRAPH=1 (this restricts the graph...no need if we can select the schedules)
GRAPHUOPS=1
most uses of DEBUG >= 3
https://tiny-tools-client.vercel.app/

and a viewer for:
SAVE_SCHEDULE=1
TRACK_MATCH_STATS=2
PROFILE=1 (eventually)

to use:
1. Run tinygrad with VIZ=1 (this saves the pkls and launches the server (new process please!))
2. That's it!

This should be able to:
1. See all schedules
2. See all graphs and how they were rewritten
3. See generated code

bunch of dev rules:
* everything must be responsive to keyboard smashing! lag should never happen
* no requirement to use any of these libraries, but in general libraries are bad
* pure python server + browser ready JS
* serialization is very annoying! UOps are fine...others think carefully
* NOTE: we don't have to save very much
  * anything pure functional can be regen by the server (stable tinygrad APIs only!)

user story: viewing code
* tinygrad ran 3 schedules: init the model + first train step, train step, test step
  * schedule 1 (123) = main.py:97
  * schedule 2 (97) = main.py:97
  * schedule 3 (10) = main.py:145
* click "schedule 1", get list of kernels (like DEBUG=2)
  * kernel 1 "E_34_34" -- 'sin'
  * kernel 2 "R_4545"
* click "E_34_34"
  * pre-rewritten UOp graph (step through rewrite here)
  * post-rewritten UOp graph
  * UOp list
  * generated code

user story: debugging scheduler
* tinygrad ran 3 schedules: init the model + first train step, train step, test step
  * ...
* click "schedule 1 graph", get a graph of the schedule in UOps
  * step through rewrite rules
  * see how things are broken into kernels
  * see why two kernels didn't fuse

this needs to be tested, both as the server and as the frontend