You say we can just avoid the correctness checks under torch.no_grad?

No, you only ignore these ops for gradient computation.
Avoiding correctness checks is the last “valid” use case for .data in the sense that we don’t have another way to do this yet (be careful though! You can get wrong gradients by doing so!!)

When we do b.data is it exactly like calling a.data ?

I an not 100% sure of what the behavior is now that Variables don’t exist. But I would avoid it 
But yes I think the two are the same. And so have the same limitations as .data in general.