all_gather: 把一个tensor广播到一个list,返回tensor list
.chunk: 把一个tensor切分成几块
# 把 features.data广播到list中的元素上,list中的内容是total_features切分成的几个块,最后返回这个list.相当于把features拷贝成了好几份
dist.all_gather(list(total_features.chunk(self.world_size, dim=0)), features.data)
https://pytorch.org/docs/stable/distributed.html#torch.distributed.all_gather
https://www.cnblogs.com/jiangkejie/p/10309766.html