Yes.
I already wrote my own function in a differential way “hopefully”
Here is:
def my_nullspace(At, rcond=None):
  ut, st, vht = torch.Tensor.svd(At, some=False,compute_uv=True)
vht=vht.T        
Mt, Nt = ut.shape[0], vht.shape[1] 
if rcond is None:
    rcondt = torch.finfo(st.dtype).eps * max(Mt, Nt)
tolt = torch.max(st) * rcondt
numt= torch.sum(st > tolt, dtype=int)
nullspace = vht[numt:,:].T.cpu().conj() ===> problem here
# nullspace.backward(torch.ones_like(nullspace),retain_graph=True)
return nullspace

Everything works fine even when I use .backword() from nullspace (in case  nullspace = vht.T.cpu().conj() ) , however when I take just a part from the tensor vht (i.e., vht[numt:,:] ) the gradients become zero I dont know why shoudld I call it like this  vht[numt:,:].clone() or there is smoothing wrong?