Drawing and adding samples of random size

This is likely an issue with Predictive – see this post and this associated issue. In particular, when I attempt to use Predictive, I get an error like

/opt/anaconda3/lib/python3.7/site-packages/pyro/infer/predictive.py in _predictive_sequential(model, posterior_samples, model_args, model_kwargs, num_samples, return_site_shapes, return_trace)
     46     else:
     47         return {site: torch.stack([s[site] for s in collected]).reshape(shape)
---> 48                 for site, shape in return_site_shapes.items()}

which makes sense because the shape is itself an rv.

If your only goal is simulation, a model like

def model(): 
    N = pyro.sample("N", dist.Poisson(10.)) 
    noise = pyro.sample("noise", dist.Normal(0, 1).expand((int(N),))) 
    randsum = pyro.deterministic("rand_sum", noise.sum()) 
    return randsum

should be fine. As far as sampling from the prior predictive, since this is just calling model() and we can do this with

samples = torch.stack(list(map(lambda x: model(), range(100))))

then replacing map with something like

import multiprocessing
pool = multiprocessing.Pool(None)
...
samples = torch.stack(list(pool.map(lambda x: model(), range(100))))

would be okay.