Numpy is OK, but verbose and a bit of a pain.
Numpy is OK, but verbose and a bit of a pain.
Given that ML is becoming so important and Julia has ergonomic handling of numerical code, why don't they explicitly support it? Is it inertia?
ML on CUDA is very much part of Julia already, and Meta seems into that lib as well. =)
Compared to the CUDA dumpster fire at a cat food factory, it is often trivial and nearly transparent syntax for the users familiar with ML.
Really depends on the use-case =)
The conventional options are fairly well documented:
https://fluxml.ai/Flux.jl/stable/gpu/
The big mistake was Microsoft not having .NET cross-platform from the beginning and not pitching F# as a Python alternative.
To play devil advocate, i think when F# was out (and still being developed), the Zeitgeist was really enamored with the idea of dynamic language, and the envisioned productivity gain from them. So F# was really too early to the dance.
Since then, things have change quite a bit with most major dynamic language adding a proto-type system.
Right now, i think we understand better what made language such as python and ruby so popular and are able to design better statically typed version with better tooling around them ( rust, zig, julia etc...)
I wonder if GPT-4 could be used to efficiently start porting more stuff over to Julia. I feel like Python is really a poor fit for deep learning. Julia is much more pleasant.
So yeah, I'd be surprised if FB ever moved away from Python.
There is Zygote.jl, which is used in Flux.jl. However, it's more in maintenance mode. At some point, Diffractor.jl was hyped but it didn't take off yet. And then there is Enzyme.jl which people hype now.
But for me as a user, it's not clear what I should really do to make my code well differentiable for those libraries.
If you stick with torch, jax or tensorflow, everything seems to work better regarding AD.
[0]: https://github.com/FluxML/Flux.jl [1]: https://github.com/FluxML/Zygote.jl [2]: https://github.com/JuliaDiff/Diffractor.jl [3]: https://github.com/EnzymeAD/Enzyme.jl
It seems to me that Julia is still moving too fast for its own good. At some point, something needs to stabilize for it to be worth adopting.
People often conflate popularity with good design. Have a great Monday =)
Python is the core issue rather than specifically Numpy, as it was bodged on (SWIG) to try to fix real use-cases... much like how 30 years of bodged on GPU mailbox structures made people biased to implement ridiculous solutions that necessitated ridiculous software paradigms.
I don't think any one person has the will and resources to resolve the core problem. However, Julia will likely also initially bind the same nonsense for awhile due to compatibility needs, but users tend to re-factor nonsense out of the ecosystem with better native solutions over time.
"All software is terrible, but some of it is useful" =)
It seems to me that, even given Python's constraints as a language, that a nicer wrapper could have been developed in Numpy that still called out to bindings to do the heavy work.
> functional compatibility layer for a fundamentally broken language paradigm
What did you mean by this? Is it mainly the fact that Python is a bit an undesigned language in general that calls into unmanaged languages like C/C++ and Fortran in its libraries?
Why would one bottleneck a design with polyglot stacks even before a single line of code was implemented? This sounds like naive nonsense.
"What did you mean by this? ... Python"
Python was never designed to handle threads or parallelism properly, and has performance issues Numpy tries to address though its wrapped C/C++ libraries.
Python became 30 years of spiral development, and implodes into a new implementation every so often. Depending on the use-case it may prove appropriate, but never optimal. =)
https://gist.github.com/AlexanderFabisch/6343090 (small feature comparison list, but ignore the incorrect opinions)
https://fluxml.ai/Flux.jl/stable/gpu/
https://alan-turing-institute.github.io/MLJ.jl/dev/about_mlj...
You don't seem to know much about what you're criticizing.