(Edit: I wrote Unbind first, but it needs to be torch.nn.Unfold, thank you for pointing this out, I changed it here).
torch.nn.Unfold gets you the patches that you could feed into matrix multiplication to get the convolution result (after reshaping).
If you then use pointwise multiplication with broadcasting, you should roughly get what you want (albeit in a different shape).
The torch.nn.Unfold documentation has an example of how to mimic convolution with torch.nn.Unfold and matmul.
Best regards
Thomas