We are happy to announce that, with the newly introduced
depyf package, we can debug
torch.compile generated code now!
import torch @torch.compile(backend="eager") def toy_example(a, b): x = a / (torch.abs(a) + 1) if b.sum() < 0: b = b * -1 return x * b import depyf with depyf.prepare_debug(toy_example, "./dump_src_debug_function"): for _ in range(100): toy_example(torch.randn(10), torch.randn(10)) with depyf.debug(): toy_example(torch.randn(10), torch.randn(10))
General guideline for debugging
backend="eager"to debug Dynamo first, as this is the major place of black magic. If Dynamo works as you expect, it is straight-forward to debug the backend.
- Run your code under
with depyf.prepare_debugcontext for enough times, so that all branches of your code get compiled.
- When leaving the
with depyf.prepare_debugcontext, you will be prompted to set breakpoints for Dynamo generated code.
- The following code under
with depyf.debug():context is debuggable.
And of course, remember to
pip install depyf first.
A demo gif:
More information at GitHub - thuml/depyf: Decompile python bytecode, and understand PyTorch compiler! .
Hope it helps!