GGML tensors are always four dimensional. For example:
1D vector of length 8: ne = {8, 1, 1, 1}
2D matrix 3×4: ne = {4, 3, 1, 1}
3D (batch, H, W) = 2,3,4: ne = {4, 3, 2, 1}
The dimensions are always ordered as follows:
{l, k, j, i}
Where they are indexed C-style like:
x[i][j][k][l]
In the context of matrices:
{columns, rows, stacks, batches}
Or in the context of activations in a transformer:
{d_head_kv, n_tokens, n_head_kv, batch}