A first version of a full-featured  numpy.random.choice  equivalent for PyTorch is now available here 3.3k (working on PyTorch 1.0.0). It includes CPU and CUDA implementations of:

Uniform Random Sampling WITH Replacement (via  torch::randint )
Uniform Random Sampling WITHOUT Replacement (via reservoir sampling)
Weighted Random Sampling WITH Replacement (via inverse transform sampling)
Weighted Random Sampling WITHOUT Replacement (via this method 282)