Rendered at 21:29:50 GMT+0000 (Coordinated Universal Time) with Cloudflare Workers.
2 days ago [-]
AndReics 1 days ago [-]
Wow that's really cool i'll definitely check it out!
have played around with machine learning algorithms built from scratch in c / cuda too, but once i hit the cuda part of it i kinda just left it to the side.
i'm curious how did you use CUDA to optimize the matrix multiplications?
how optimized is training, does it take much longer then using pytorch?
vforno 1 days ago [-]
Hi, in nanoeuler I use cuBLAS (NVIDIA's super-optimized library) for all matrix multiplications, with the tensor cores in TF32 mode. It's the same thing PyTorch uses underneath, so it's very fast.
What I've optimized (and will improve even more) and written by hand are the kernels for the other parts (like FlashAttention, which gave a nice 3x speedup), while I've delegated the large matrices to cuBLAS.
Training the 116M model on a 4070 runs well and in reasonable times. Compared to PyTorch, it's a bit slower (probably 1.5-2.5x), but nothing dramatic, especially considering it's all done from scratch without a framework and there are no other optimizations that would make it faster. I'm working on it.
novaRom 1 days ago [-]
Do you have a guess why your code is so much slower than torch? I didn't look, but there must be no reason to have 2x slower code esp. for a simple grid of FMAs.
vforno 1 days ago [-]
Yes, because it has many separate kernels instead of aggressive merges like PyTorch (with Torch Compile). Each pass (norm, matmul, residual, RoPE, etc.) launches its own kernel, which increases launch overhead and memory traffic. CuBLAS helps, but it's not enough to compensate.
AndReics 1 days ago [-]
i see really cool, where i failed was trying to build my own matrix operations library, it was just too much, but using cuBLAS definitely helps, i'll look into the custom kernels you wrote they seem interesting!
did you build the backprop yourself?
it is a really cool project to build and i think you can agree that it teaches you a lot of how LLMS and machine learning in general works.
vforno 1 days ago [-]
Absolutely yes! With nanoeuler I learned so much by testing every little detail of the project. Every little part you see has been tested and proven several times so that it could be understood and worked.
tdesilva 2 days ago [-]
Mentioning neural ODE doesn't make sense here, as this is unrelated. Basically any implementation of transformer uses residuals, but you're not really training a neural ODE here.
Also consider getting rid of the em-dashes. I don't know if you mostly vibe-coded this or not, but the README is pretty clearly AI generated.
vforno 2 days ago [-]
Hi, thanks for the comment. Nanoeuler is starting as a study and research project that will obviously improve over time. I'll do my best to make the readme and other things more readable. Thank you very much.
memezed 1 days ago [-]
Amazing, i’ll try to learn from your code. Thanks!
vforno 1 days ago [-]
Thanks to you! I will update the model later to make it more and more optimized but you will see everything you need in the readme.
isatty 2 days ago [-]
I'm genuinely curious how much of this is LLM generated?
vforno 2 days ago [-]
Most part of trasformer and sft!
ericb 2 days ago [-]
How long was it trained for? How many tokens?
vforno 2 days ago [-]
Hi, a couple of hours, not too much! Including sft!
ali_chherawalla 1 days ago [-]
this is super interesting. Looking forward to trying this out!
vforno 1 days ago [-]
Really thanks If you need any help or have any questions I'm here.
valentynkit 2 days ago [-]
[dead]
Chu4eeno 2 days ago [-]
Very weird coding style, did you run astyle --style=python on C code?
Also, your LLM left a comment in the cuda source that it is untested, does the cuda stuff work?
bArray 2 days ago [-]
Not sure, but the code is quite dense and lacking in comments. `nanoeuler` & `nanoeuler_check` is itself the binary checked straight into git with the `.log` file? All of the commit messages are "Add files via upload" and happened in quick succession.
I suspect this is LLM generated, which is cool, but shouldn't then have the claim "forward and backward passes are written and verified by hand" unless it is true.
Regarding the data, old texts from Gutenberg probably lowers the performance - especially as many texts are on purpose whimsical. Shakespeare for example made up words to be theatrical. You have a mix of different old English styles in the corpus - it's a terrible way to learn modern English. I had some success using .ZIM data archives from Kiwix as a source, you should get a more stable output using that data.
vforno 2 days ago [-]
Hi, the uploads are one after the other because it was a long, step-by-step research project where I tested the code on another machine. I admit that I'm slowly making up for the commits on all the projects. For Gutenberg and Shakespeare, I admit that they were the best tests I could do, but I'll always improve!
andai 2 days ago [-]
I haven't tested NanoEuler yet but Gutenberg is awesome. Maybe a matter of taste but I like it much better than modern English.
dang 2 days ago [-]
> Very weird coding style, did you run astyle --style=python on C code?
I'm sure you mean it in a more curious way but this type of comment on a Show HN often comes across as too harshy/snarky/dismissive for what we want here (see https://news.ycombinator.com/showhn.html).
gaflo 1 days ago [-]
Consider adding a rule that an author must disclose (in their own words) for what parts and to what extent LLMs have been used to assist their project.
dang 1 days ago [-]
I don't think it would help: most people wouldn't know about it, of those who did many wouldn't conform, and there would be no reliable way to enforce it.
gaflo 6 hours ago [-]
You're probably right, I guess I'm too optimistic.
dang 25 minutes ago [-]
Sorry for being a downer!
vforno 2 days ago [-]
yes yes tested on a 4070 ti 16gb everything worked without problems!
did you build the backprop yourself? it is a really cool project to build and i think you can agree that it teaches you a lot of how LLMS and machine learning in general works.
Also consider getting rid of the em-dashes. I don't know if you mostly vibe-coded this or not, but the README is pretty clearly AI generated.
Also, your LLM left a comment in the cuda source that it is untested, does the cuda stuff work?
I suspect this is LLM generated, which is cool, but shouldn't then have the claim "forward and backward passes are written and verified by hand" unless it is true.
Regarding the data, old texts from Gutenberg probably lowers the performance - especially as many texts are on purpose whimsical. Shakespeare for example made up words to be theatrical. You have a mix of different old English styles in the corpus - it's a terrible way to learn modern English. I had some success using .ZIM data archives from Kiwix as a source, you should get a more stable output using that data.
I'm sure you mean it in a more curious way but this type of comment on a Show HN often comes across as too harshy/snarky/dismissive for what we want here (see https://news.ycombinator.com/showhn.html).