Hi,
I’m training a network in fp16 precision, where it has to sample from a laplace distribution.
I find that in fp16 the laplace.sample()
method possibly returns torch.inf
, but in fp32 this will not happen.
To reproduce the code:
import torch
import torch.distributions as dist
def test(r):
count = 0
for i in range(1000):
if r.sample().isinf().any():
count += 1
return count
ra = dist.laplace.Laplace(torch.randn(100).cuda().half(),
torch.randn(100).cuda().exp().half())
print(test(ra)) # this returns non-zero value
Is it possible to solve this problem?
I know I can manually cast to fp32 for this operation, but I wonder if there exists any clean method.