You are creating h0 but not allocating it on the gpu.
You need to do (maybe some synthax errors)
        h0 = torch.zeros(self.num_layers, x.size(0), self.hidden_size,device=x.device).double()
        c0 = torch.zeros(self.num_layers, x.size(0), self.hidden_size,device=x.device).double()

And still to optimize if you want them yo be double you can assign dtype in the construction too.
Read the torch.tensor and torch.zeros docs
In newer versions you have the constructor
x.new_zeros or something like that which already copies x dtype and device