First of all, thanks for your immediate reply.
Regarding calling model.eval(), I am doing exactly what you suggest here.
Regarding configuring the trainable parameters so that they won’t require gradients, I found that this was actually the exact cause for gradient explosion in my case (I’m training with half precision a Resnet-based architecture for 3D human pose estimation). After I switch the code back so that the gradients for bn.weight and bn.bias are updated as usual (but the bn layers still function under eval mode at training time), the gradient explosion stopped. And for my own experiments this is the ideal behaviour (at training time the trainable params of bn layers are updated as usual but the runnning stats are fixed)