Does anyone know how to dump out the schedule graph? I’d imagine it would be quite useful. If none exists today, what’s your experience/tricks/tips of debugging the schedule?
Perhaps try printing the IR using
print(tvm.lower(s, inputs, simple_mode=True))
like in the tutorial, but you’ll have to modify the code to simple print the IR of each graph operator in Relay/NNVM, I think.
Hi Nick, thanks for your suggestion.
tvm.lower() is useful and I am using it. In many cases I find the output of the first pass is more helpful than the final result (see Show unflattened tensor in tvm.lower()).
I still would like to see the schedule itself rather than the scheduled program. Does anyone else have the same need? I could try to create such a dumping function. But it seems the community has done well without such a tool. I am curious whether I am missing something in my debugging process.
What exactly do you mean by “the schedule”?
-
A graphical representation of the operator nodes and tensor shapes?
I have thought about needing this especially to see the fused operators. Printing the IR in this case is doable but sometimes I feel a simple graph diagram (Networkx python package?) would be more straightforward. -
The HW independent schedule?
So this is what I would call “vanilla” c code and is mostly equivalent to printing the IR after phase 0 (or even better just after. I think to some extent this could be implemented by a different level of thesimple_mode
parameter of thetvm.lower()
function
- The scheduling operations defined in the scheduling rules?
I think this would also be interesting to enable people to not have to read the source code, but I have no idea how this would be nicely represented.
I meant 3. I’d also like to see a combined view with 3 on the left and 1 on the right
(page 79 of https://people.csail.mit.edu/jrk/jrkthesis.pdf)
This would be brilliant.
Is it possible now to get the above “schedule” representation?
There exists something like TEDD But it is not as finegrained as in @YuanLin 's answer.
You can always use tvm.lower(schedule,[input_placeholders], simple_mode=True),
to get the “for loop view” though
@JosseVanDelm Thanks. I was reading about it, and it might be helpful. I will update here if I find something more detailed.