Splitting a matrix multiply
Tensor parallelism splits an individual matrix multiplication across devices, so no device ever holds a whole weight matrix or computes a whole output.
There are two ways to cut a matrix, and they behave differently.
Split by columns. Give each device a vertical slice of the weight matrix. Every device needs the full input, and each produces a slice of the output columns. No communication is needed to compute, but the output arrives distributed and must be concatenated to be complete.
Split by rows. Give each device a horizontal slice. Now each device needs only the matching slice of the input, and each produces a partial sum over the full output shape. The true output is the sum of the partials, so an all-reduce is required.
Neither is attractive alone: the first needs a gather afterwards, the second needs a scatter beforehand and a reduce after. The insight that makes tensor parallelism practical is that chaining them in the right order cancels the intermediate communication entirely.

