You could push all parameters and buffers back to the CPU and store the state_dict:
# after training
model.cpu()
torch.save(model.state_dict(), 'filename.pth')

In another script you would be able to create the model instance, load the state_dict, and perform the inference.
However, unfortunately you have defined the cuda() calls explicitly in your model, so that creating the model instance would always try to push the model to the GPU(s).
I would generally recommend to try to write device-agnostic code via to() and pass the device into the __init__ instead of the GPU id.