jax.lax.all_to_all#
- jax.lax.all_to_all(x, axis_name, split_axis, concat_axis, *, axis_index_groups=None, tiled=False)[source]#
物化映射轴并映射不同的轴。
如果
x
是一个 pytree,则结果等同于将此函数映射到树中的每个叶子。在输出中,输入映射轴
axis_name
在逻辑轴位置concat_axis
物化,并且位置split_axis
处的输入未映射轴以名称axis_name
映射。映射轴的组大小必须等于未映射轴的大小;也就是说,我们必须有
lax.psum(1, axis_name, axis_index_groups=axis_index_groups) == x.shape[axis]
。默认情况下,当axis_index_groups=None
时,这涵盖所有设备。- 参数:
x – 具有名为
axis_name
的映射轴的数组。axis_name – 可哈希的 Python 对象,用于命名 pmapped 轴(有关更多详细信息,请参阅
jax.pmap()
文档)。split_axis – int,指示要以名称
axis_name
映射的x
的未映射轴。concat_axis – int,指示输出中要以名称
axis_name
物化输入的映射轴的位置。axis_index_groups – 可选的列表列表,包含轴索引(例如,对于大小为 4 的轴,[[0, 1], [2, 3]] 将在前两个和最后两个副本上运行 all_to_all)。组必须精确地覆盖所有轴索引一次,并且所有组必须大小相同。
tiled – 当为 True 时,all_to_all 会将 split_axis 分成块并将它们沿 concat_axis 连接起来。 特别是,不会添加或删除任何维度。 默认为 False。
- 返回:
当 tiled 为 False 时,形状由表达式给出的数组
np.insert(np.delete(x.shape, split_axis), concat_axis, axis_size)
其中
axis_size
是输入x
中名为axis_name
的映射轴的大小。否则,数组的形状与输入形状相似,只是 split_axis 除以轴大小,concat_axis 乘以轴大小。