But it seems work no matter what value of  find_unused_parameters . I wonder why it work when  find_unused_parameters=True , the traverse should failed logically.

IDK, I would assume this would lead to autograd hook fire on a ready parameter, which should trigger an error in DDP. BTW, when you manually run allreduce, DDP is no longer necessary. Any reason for still wrapping the model with DDP?