[HN Gopher] Show HN: GPT-2 implemented using graphics shaders
       ___________________________________________________________________
        
       Show HN: GPT-2 implemented using graphics shaders
        
       Back in the old days, people used to do general-purpose GPU
       programming by using shaders like GLSL. This is what inspired
       NVIDIA (and other companies) to eventually create CUDA (and
       friends). This is an implementation of GPT-2 using WebGL and
       shaders. Enjoy!
        
       Author : nathan-barry
       Score  : 150 points
       Date   : 2025-05-02 15:21 UTC (7 hours ago)
        
 (HTM) web link (github.com)
 (TXT) w3m dump (github.com)
        
       | throwaway314155 wrote:
       | This is pretty rad. I've built and run the project on my MacBook
       | and can't seem to get the visualizations to show as they appear
       | in the GitHub demonstration. I'm running Firefox but I think that
       | should support WebGL features you're using?
       | 
       | Happy to file an issue on the repository as well if you'd prefer
       | that.
        
         | nathan-barry wrote:
         | Yeah it'd be great if you could file an issue and show what you
         | see! I was using Safari but I'm gonna check other browsers to
         | test if it works on them
        
           | throwaway314155 wrote:
           | Great! I've filed an issue.
        
       | SamosaGuru wrote:
       | Would be really cool to have it hosted on a website if it can be
       | a static page so we could try it out
        
         | nathan-barry wrote:
         | Working on getting it up on Github pages, will let you know.
         | Not sure if there will be an issue with hosting the weights,
         | I'll look into it
        
           | Philpax wrote:
           | You _may_ be able to fetch the weights directly from Hugging
           | Face. I 'd try that first.
        
             | ianand wrote:
             | Checkout https://github.com/jseeio/gpt2-tfjs fetches the
             | weights for GPT2 from huggingface on the fly.
        
           | jasonjmcghee wrote:
           | I haven't looked at your implementation, but if you can read
           | ONNX weights... https://huggingface.co/Xenova/gpt2
        
       | Philpax wrote:
       | I'm reminded of this VRChat world, which runs Qwen2-0.5B in a
       | shader:
       | https://vrchat.com/home/launch?worldId=wrld_e919c1f4-8399-43...
        
       | ianand wrote:
       | As the guy who did GPT2 in Excel, very cool and kudos!!
       | 
       | Curious why you chose WebGL over WebGPU? Just to show it can be
       | done?
       | 
       | (Also see my other comment about fetching weights from
       | huggingface)
        
         | ronsor wrote:
         | Probably because WebGPU support is still rather iffy.
        
         | nathan-barry wrote:
         | This was a final project for a graphics class where we used
         | WebGL a lot. Also I was just more familiar with OpenGL and
         | haven't looked that much into webGPU
        
         | littlestymaar wrote:
         | > Curious why you chose WebGL over WebGPU? Just to show it can
         | be done?
         | 
         | For a WebGPU implementation, one can use transformers.js
         | directly (or many other libraries actually), maybe WebGL is
         | more original.
         | 
         | [1]: https://huggingface.co/docs/transformers.js/index
        
           | 85392_school wrote:
           | Transformers.js wraps the ONNX runtime which is rather
           | versatile (WASM, WebGL, WebGPU, and WebNN). It's not the
           | backend that makes it novel.
        
         | _dijs wrote:
         | ianand, I immediately thought of you when I saw this post. Miss
         | you friend.
        
         | divan wrote:
         | Someone needs to implement Excel using graphics shaders now.
        
       | helloplanets wrote:
       | Would absolutely read a 'making of' post on this project!
        
       | jasonjmcghee wrote:
       | Incredible. Was going to suggest tossing up a github page with
       | it, but looks like one is currently in-progress? (https://nathan-
       | barry.github.io/gpt2-webgl/) but doesn't seem to load for me
       | currently.
       | 
       | Looks like it's trying to load the typescript directly / hosting
       | the source files: `<script type="module"
       | src="src/main.ts"></script>` - instead of hosting the dist
       | folder.
        
         | nathan-barry wrote:
         | Yeah, right now the weights aren't even pushed to the repo so
         | there's no way for the github page to load them in. I've looked
         | a tiny bit into it and might end up making a fix for it, having
         | it load the weights by fetching them from somewhere else on
         | load, but probably not today.
         | 
         | There is a link to the zipped up folder with the weights here:
         | https://github.com/nathan-barry/gpt2-webgl/releases/download...
         | 
         | If anyone wants to make a PR which fetches the file from there,
         | unzips it, then loads in the weights from there that would be
         | greatly appreciated.
        
       | badmonster wrote:
       | Super cool project! How much of the inference time is actually
       | GPU-bound vs CPU-bound in the browser? Curious if WebGPU would
       | offer a big perf boost over WebGL2 here.
        
       | Narishma wrote:
       | Now do it with the fixed function pipeline so I can run it on my
       | 3dfx Voodoo card.
        
       | gitroom wrote:
       | Nice, that takes some serious grinding to pull off in shaders.
       | Makes me kinda wonder - does pushing old tools like WebGL
       | actually force deeper understanding of how these models work
       | compared to just grabbing a new library?
        
       ___________________________________________________________________
       (page generated 2025-05-02 23:00 UTC)