[{"data":1,"prerenderedAt":24},["ShallowReactive",2],{"chapter:teenygrad\u002Fcore-concepts\u002Ftensors-and-graph.json":3},{"project":4,"route":5,"title":6,"titleHtml":7,"navTitle":6,"part":8,"sourcePath":9,"editUrl":10,"html":11,"toc":12,"hasMermaid":17,"prev":18,"next":21},"teenygrad","\u002Fteenygrad\u002Fcore-concepts\u002Ftensors-and-graph","Tensors & the Computational Graph","Tensors &amp; the Computational Graph","Core Concepts","core-concepts\u002Ftensors-and-graph.md","https:\u002F\u002Fgithub.com\u002Fteenygrad\u002Fteenygrad\u002Fedit\u002Fmain\u002Fbooks\u002Fteenygrad\u002Fsrc\u002Fcore-concepts\u002Ftensors-and-graph.md","\u003Cp>\u003Ccode>teeny-core::graph\u003C\u002Fcode> (\u003Ca href=\"\u002Fapi\u002Fteenygrad\u002Fteenygrad\u002Fteeny_core\u002Fgraph\u002F\">API docs\u003C\u002Fa>) defines the\ntypes every other crate builds on:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Cstrong>\u003Ccode>Shape\u003C\u002Fcode>\u003C\u002Fstrong> — \u003Ccode>Vec&lt;Option&lt;usize&gt;&gt;\u003C\u002Fcode>; \u003Ccode>None\u003C\u002Fcode> entries are symbolic\u002Fdynamic dimensions (e.g. a batch\ndimension left unbound until trace time).\u003C\u002Fli>\n\u003Cli>\u003Cstrong>\u003Ccode>DtypeRepr\u003C\u002Fcode>\u003C\u002Fstrong> — the element dtype of a tensor (\u003Ccode>F32\u003C\u002Fcode>, etc. — see\n\u003Ca href=\"\u002Fteenygrad\u002Fcore-concepts\u002Fdtype-system\">The Dtype System\u003C\u002Fa>).\u003C\u002Fli>\n\u003Cli>\u003Cstrong>\u003Ccode>Op\u003C\u002Fcode>\u003C\u002Fstrong> — the set of graph operations (elementwise, reductions, layout, etc.).\u003C\u002Fli>\n\u003Cli>\u003Cstrong>\u003Ccode>GraphNode\u003C\u002Fcode>\u003C\u002Fstrong> \u002F \u003Cstrong>\u003Ccode>Graph\u003C\u002Fcode>\u003C\u002Fstrong> — the traced computational graph: nodes are \u003Ccode>Op\u003C\u002Fcode> applications,\nedges are data dependencies.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>\u003Ccode>SymTensor\u003C\u002Fcode>\u003C\u002Fstrong> — a \u003Cem>symbolic\u003C\u002Fem> tensor handle used while tracing a model: calling layers with a\n\u003Ccode>SymTensor\u003C\u002Fcode> input records \u003Ccode>Op\u003C\u002Fcode>s into a \u003Ccode>Graph\u003C\u002Fcode> rather than executing eagerly.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch2 id=\"tracing\">Tracing\u003C\u002Fh2>\n\u003Cp>Building a \u003Ccode>Graph\u003C\u002Fcode> from a model is “tracing”: construct a \u003Ccode>SymTensor::input(dtype, shape)\u003C\u002Fcode>, call\nyour model with it (via the \u003Ccode>nn::Layer\u003C\u002Fcode> trait), and read back the \u003Ccode>Graph\u003C\u002Fcode> that was recorded as a\nside effect. See \u003Ca href=\"\u002Fapi\u002Fteenygrad\u002Fteenygrad\u002Fteeny_cli\u002F\">\u003Ccode>teeny-cli\u003C\u002Fcode>\u003C\u002Fa>’s \u003Ccode>aot_compile\u003C\u002Fcode> for a\nconcrete example of this pattern.\u003C\u002Fp>\n\u003Cp>What happens to the \u003Ccode>Graph\u003C\u002Fcode> next is covered in \u003Ca href=\"\u002Fteenygrad\u002Fcore-concepts\u002Fcompilation-flow\">Compilation Flow\u003C\u002Fa>.\u003C\u002Fp>\n",[13],{"id":14,"text":15,"level":16},"tracing","Tracing",2,false,{"title":19,"titleHtml":19,"route":20},"Your First Model","\u002Fteenygrad\u002Fgetting-started\u002Ffirst-model",{"title":22,"titleHtml":22,"route":23},"Compilation Flow","\u002Fteenygrad\u002Fcore-concepts\u002Fcompilation-flow",1786271829000]