Thanks for sharing! Was about to implement exactly this and then saw your reply 
Did you consider making a PR for this?
Also, had to change your code a bit to make it work for me:
if isinstance(out, OrderedDict):
    return OrderedDict( [(k,Gather.apply(target_device, dim, *[each[k] for each in outputs])) for k in out.keys()] )