We are happy to announce that, with the newly introduced depyf package, we can debug torch.compile generated code now!
Example usage:
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 torch.compile:
- Use
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!