I still think that you are hunting down two separate issues.
torch.load(..., map_location) will load the tensor or state_dict onto the specified device.
However, since you are piping this operation directly to model.load_state_dict, internally most likely param.copy_ will be used, which will then respect the parameters’s device and copy the state_dict parameter to the same device used in the model’s parameter.
Try to separate the calls and check the tensors in the state_dict right after using torch.load.
You should see, that the desired device passed via map_location is used.
If you want to avoid the host and device memory allocation, make sure that the model is on the same device as the state_dict before calling .load_state_dict.