No problem! Seems like since you need to update A later using this computed gradient, it actually seems like the vjp IS what you want here. In that case, I wouldn’t worry about the “entire Jacobian” to much and no further action is needed apart from just using .grad(delL_delWo, A), and using a grad_out such as (torch.ones_like(dL_dp) for dL_dp in delL_delWO). By using grad_out of ones_like(…) you are computing essentially “how sensitive A is to changes to the dL_dWo in the (1, 1, 1, …, 1) direction”, and this value can be used to update A, because its the same size as A.
If the entire Jacobian is J, the linear combination of its rows is v^T J for some arbitrary v, and so the values of v determine the coefficients of the linear combination.