ok… I figured out what was happening. Basically, most problems came from my misusing.
In my model definition, some parts were already instantiated model, like:
class Sequential_X(nn.Module):
        ...

sequential_x = Sequential_X()
sequential_x.requires_grad = False ## instantiated in the global scope
...

class MyModel(nn.Module):
    def __init__(self, ):
        super(MyModel, self).__init__()
        ...
        self.sequential_x = sequential_x ## <- it was the source of problem :(
   ...

I thought that sequential_x was fixed by sequential_x.requires_grad=False, but it was trained anyway (maybe I forgot to set sequential_x.requires_grad=False before the training session and changed the code later?) so I only saved/loaded some modules that I thought trained at this session. Therefore, the first result was not that I expected.
After this, I loaded the whole model by model.load_state_dict(torch.load('./data/model.pth')) , it also updates the globally defined sequential_x , so both model and model_2 work fine.