If preTrain=True, suppQueryFusion won’t be the output of the encoder, but will be provided via weights. If weights wasn’t computed by the encoder in the previsous run, the encoder output won’t be used in this scenario and thus you won’t see any gradients for it.
I’m wondering, why the penultimate layer doesn’t have gradients. Could you check them via print(model.conv1_1_1.weight.grad.sum()) after calling loss.backward()?