I don’t think this operation is fused, as you’ve already mentioned that you are not scripting the model.
torch.cuda.memory_allocated() will return the currently allocated memory, not its peak (use torch.cuda.max_memory_allocated() for is or torch.cuda.memory_summary()).
Based on your description, I would guess that linear2_out is already freed as it’s not needed for the backward calculation and will thus not show up in the next memory_allocated() print statement.