So, while I can't talk about the hardware differences in detail, developer experience is greatly on nVidia side and now AMD has a moat to overcome to catch up.
Maybe someone more clever than me can go into the specifics, I only understand the minimum of the low lvl GPU details.
Nice high lvl document
[0] https://www.acecloudhosting.com/blog/cuda-cores-vs-tensor-co...
On top of that, AMD's compute stack is fairly immature, their OpenCL support is buggy and ROCm compiles device specific code, so it has very limited hardware support and is kind of unrealistic to distribute compiled binaries for. Then, getting to the optimization aspect, NVIDIA has many tools which provide detailed information on the GPU's behavior, making it much easier to identify bottlenecks and optimize. AMD is still working on these.
Finally, NVIDIA went out of its way to support ML applications. They provide a lot of their own tooling to make using them easier. AMD seems to have struggled on the "easier" part.
They're supposed to be more optimized and more stable compared to AMD. That's how it was before anyway, not sure today.