张量分片(Tensor Sharding)与张量分块(Tensor Tiling)是否为同一实现?二者有何差异?
张量分片(Tensor Sharding)与张量分块(Tensor Tiling)的差异解析
核心概念差异
- 张量分片:将单个张量的不同维度拆分到多个设备上,属于分布式训练的核心技术,目的是让单设备无需存储完整张量,支撑大模型的分布式部署。拆分后,张量的不同分片由不同设备持有,计算时需跨设备通信协作。
- 张量分块:将单个张量在单设备内拆分为更小的子张量块,目的是适配硬件缓存层级(如GPU的SM缓存),优化单设备内的计算效率,减少内存访问开销。分块后的所有子块仍在同一设备上,无需跨设备通信。
XLA/Hlo框架下的差异
- Tensor Tiling:是XLA核心的单设备优化手段,Hlo指令中的
Tile操作会将张量按指定块大小拆分,比如把[1024,1024]的矩阵拆成[32,32]的子块,让GPU以更高效的粒度加载数据到缓存中计算,全程在单设备内完成。 - Tensor Sharding:XLA通过GSPMD扩展支持分片,Hlo层面会添加
Sharding注解标记张量维度如何映射到设备网格。比如把[batch, hidden]的张量按hidden维度拆分到8个设备上,每个设备持有[batch, hidden/8]的分片,计算时会自动插入跨设备通信操作(如AllGather、ReduceScatter)。
GSPMD框架下的差异
- Tensor Tiling:主要作为分片后的补充优化,当设备持有的分片仍过大时,在单设备内进一步分块以适配硬件计算粒度。比如某设备持有
[1024, 1024]的张量分片,会再拆成[64,64]的子块计算,不涉及设备间交互。 - Tensor Sharding:是GSPMD的核心能力,通过
PartitionSpec定义张量维度到设备网格的映射,支持灵活的并行策略(数据并行、流水线并行、张量并行等)。例如张量并行中,将线性层权重按输出维度拆分到多个设备,每个设备只负责部分输出计算,需通过Collective操作同步结果。
并行训练场景中的差异
- 数据并行场景:
- 分块:每个设备持有完整模型副本和部分数据,会对数据或模型张量在单设备内分块,优化单设备计算效率。
- 分片:一般不单独用于数据并行,但如果模型过大单设备存不下完整副本,会结合模型并行的分片策略,将模型张量拆分到多设备,同时每个设备处理部分数据。
- 模型并行场景:
- 分块:作为单设备内的优化,在每个持有模型分片的设备上,对分片张量进一步分块,适配硬件缓存加速计算。
- 分片:是模型并行的核心,将模型的权重、激活等张量按维度拆分到多设备,让每个设备只负责部分模型计算,必须依赖跨设备通信完成整体计算。
内容的提问来源于stack exchange,提问作者YuGyoung Yun
相关产品推荐
相关产品推荐

