Open AldoLamarre opened 4 years ago
Hi Aldo,
You're totally correct: DML devices in TF do not support DT_COMPLEX* types in any kernels at the moment. The reason is pretty simple: DirectML itself doesn't support complex numbers. This may be something we add in the future. Can share the model/script you were running that uses these types? Knowing the scenarios that people want to use DML for can help us prioritize future features.
Thanks!
I was testing with the quantum circuit learner I coded for my master's.
https://github.com/AldoLamarre/quantumcircuitlearning
For quantum machine learning or even basic quantum simulations complex numbers are required. I know you can do some tricks to emulate them like it was done for PyTorch but native support is much better.
Thanks for sharing this -- it's really informative!
Emulation could definitely be a path forward, and we've taken a similar approach with int64 (not all DX hardware uniformly supports it). I suspect this feature won't make the cut in the near future, since we still have some bigger issues to address in the more traditional deep learning scenarios. That said, emulating the math using existing DML APIs should make it feasible for anyone to add this, which would be an awesome contribution.
I understand that it is of low priority currently, as a brand new API you have a lot on your plate. In my defence, some classical deep learning algorithms are using complex numbers like unitary recurrent neural networks who still are the subject of new research today.
As a correction, It does appear that PyTorch now has beta complex number support which it is positive news to me.
For emulation, I had in mind a higher level emulation than the int64 emulation that you are describing. What was done for PyTorch and Theano before that was to use abstract real number tensors to mimic the linear algebra operations done by complex number tensors. This can take a lot time to make work which why I was using TensorFlow as it has native supports. I'm not an expert in GPU programming, but I do not think this of sort of emulation is right for TensorFlow. In TensorFlow, the interface for complex numbers is all there it just need lower level devices that understand complex numbers.
Current complex numbers kernel appears to be run on the CPU when in eager execution and fails when run in non eager mode on GPU devices.
Is gpu complex number support expected like in mainline TensorFlow ?