7 ms·
Show HN: HipScript – Run CUDA in the browser with WebAssembly and WebGPU
CUDA is NVIDIA's language for GPU programming, allowing you to mix write CPU and GPU code in C++ in one file. By chaining a few projects that compile CUDA to OpenCL, then Vulkan, then WebGPU, you can experiment with this GPGPU language on any hardware.
- CharlesW 2y agoFrom the "Learn More" link (https://lights0123.com/blog/2025/01/07/hip-script/ https://lights0123.com/blog/2025/01/07/hip-script/): "By chaining chipStar¹ (a HIP and NVIDIA® CUDA® to OpenCL compiler), Clspv² (an OpenCL to Vulkan compiler), and Tint³ (among others, a Vulkan shader to WebGPU shader compiler), you can run CUDA code in the browser!" ¹ https://github.com/CHIP-SPV/chipStar/ https://github.com/CHIP-SPV/chipStar/ ² https://github.com/google/clspv/ https://github.com/google/clspv/ ³ https://dawn.googlesource.com/dawn/+/refs/heads/main/src/tint/ https://dawn.googlesource.com/dawn/+/refs/heads/main/src/tin...
- deleted 2y ago[deleted]
- bagels 2y agoWhat an incredible demo/hack. This is actually the simplest way to actually execute CUDA code that I've seen.
- btown 2y agoNot to mention that it Just Works on Apple devices! Really, really cool.
- _nalply 2y agoFirefox supports WebGPU, but needs a setting in about:config. I enabled the setting but HipScript still denies running on Firefox with the message: "Please try a Chromium-based browser like Google Chrome or Microsoft Edge." Please do feature detection, not browser detection.
- lights0123 2y agoI do do feature detection—WebGPU is blocked on Release Firefox regardless of config, you'll need nightly. It does support Safari with its experimental mode enabled for example.
- doctoboggan 2y agoI enabled WebGPU in safari on my m1 Mac and got this error when running the GoL demo: ``` TypeError: B.values().some is not a function. (In 'B.values().some(r=>r.args.length)', 'B.values().some' is undefined) ``` EDIT: I got the same error with all three sample scripts
- lights0123 2y agoI believe I just fixed this—JavaScriptCore doesn't have support for a recently-introduced function.
- doctoboggan 2y agoI can confirm it is working for me now, thanks!
- _nalply 2y agoOK, I installed Firefox Nightly and enabled dom.webgpu.enabled and gfx.webrender.all corresponding to this article: https://hacks.mozilla.org/2020/04/experimental-webgpu-in-firefox/ https://hacks.mozilla.org/2020/04/experimental-webgpu-in-fir..., but still this error message. Which config options are needed for HipScript to run on Firefox? Edit: on Nightly `navigator.gpu` is available, I checked that in the console.
- deleted 2y ago[deleted]
- JackYoustra 2y agoI don't know why this never occurred to me. What a great website, glad you made it!
- Ameo 2y agoThe GoL example it loaded with seemed to be running way slower than I expected it to. It turns out that there's actually a `usleep(1000 * 100)` call in the code which was inserted to make it easier to see the output; the actual kernels execute quickly and take up very little GPU time. When I looked at the profiler, I was confused to see that one worker thread was at 100% usage the whole time it was running. At first, I thought that maybe it was actually running the code via Wasm on the CPU rather than on the GPU like it said. Instead, it turns out that the worker was just running `emscripten_futex_wait` - which as far as I can tell is implemented by busy waiting in a loop. Probably doesn't matter for performance since I imagine that's just for the sleep call anyway. ---- Altogether this is an incredibly cool tool. I'm sure there is some performance gap compared to native, but even so this is a extremely impressive and likely has a ton of potential use cases.
- btown 2y agoThank you so much for this! I was a bit concerned that the performance on my Mac was nearly identical to my new 3090 on PC and thought I might have messed up the setup there!
- ryanmerket 2y agoVery cool. Thank you for creating this!
- punnerud 2y agoHow performant is the CUDA code in browser compared to standalone program? Could we have PyTorch / ML training with CUDA through the browser performing ok?
- mordechai9000 2y agoDistributed large model training with web clients?
- sroussey 2y agoWith 10Tb/s Internet, then sure!
- machinekob 2y agoWebGPU don't have access to most accelerators in GPU so it would be super slow compared to CUDNN version but pure CUDA would be only x times times faster.
- saagarjha 2y agoWell the bigger issue is that even natively I doubt there is enough performance to train anything interesting.
- bloomingkales 2y agoHow is this different than web-llm?
- lights0123 2y agoweb-llm provides optimized kernels for neural network operations, and a convenient API for it. This project provides a place to experiment with CUDA, for any purpose—not necessarily for anything related to machine learning.
- JonChesterfield 2y agoThis feels like more stages than should be necessary (something should be able to do LLVM IR direct to WebGPU) but it's great to see it running, very nice!
- Cieric 2y agoI love the idea of this, but sadly I can't get it to work in Firefox, Chrome or Edge on my work pc, probably because I can't find "--enable-features=Vulkan" equivalent in the about:flags and the argument doesn't appear to work on windows. I'm actually a bit more curious about a standalone application that skips the webgpu part and goes straight to Vulkan as I would love to be able to experiment with some Cuda only applications.
- lights0123 2y agoI don't currently expose the option to run the compiler if a GPU isn't detected, but on systems that do, it exposes a download option that lets you download the SPIR-V kernel to run with Vulkan.
- sroussey 2y agoI got a `Uncaught (in promise) TypeError: WebAssembly compilation aborted: Network error: Response body loading was aborted` error the first time, but after a reload it worked.
- syrusakbary 2y agoThis is an awesome use of WASIX [1] and the Wasmer SDK [2]. Quite exciting to see! I recommend as well reading through the blogpost (repo on [3]): https://lights0123.com/blog/2025/01/07/hip-script/ https://lights0123.com/blog/2025/01/07/hip-script/ (many things to improve on the Wasmer side... we have some work to do!) [1] https://wasix.org/ https://wasix.org/ [2] https://github.com/wasmerio/wasmer-js https://github.com/wasmerio/wasmer-js [3] https://github.com/lights0123/hipscript/ https://github.com/lights0123/hipscript/
- grconner 2y agoThis is just amazing. So clean and straightforward. On a Mac just run it in Chrome see things work automagically. For real fun change the generations constant to 2000 and delete the usleep line to see this thing really cook.
- uncheckederror 2y agoImpressed that this runs on my RX 6900XT (an RDNA2 GPU) in Chrome without any trouble. Very cool demo, excited to see how people leverage this capability.
- samagra14 2y agoSounds interesting! I love all these edge experiments. But as long as there is architecture dependent code for models, I feel these edge experiments can't fully express their strong suit. You try to run something and Voila you need Ampere or Hopper or Laplace for flash attnt.
- mlepath 2y agoThis is really awesome. Tested it on both Nvidia and Mac GPUs. Interested to know how debugging in a real application would work since WASM is pretty hard to debug and GPU code is pretty hard to debug. I assume WASM GPU is ... very difficult to debug.
- saagarjha 2y agoYou can download the intermediate files fwiw
- Lockal 2y agoNow I wonder how long will it take to add chipStar/Clspv/Tint to https://github.com/jhuber6/doomgeneric/tree/amdgpu https://github.com/jhuber6/doomgeneric/tree/amdgpu and run DOOM on WebGPU this time.
- nullbyte 2y agoFinally I can use my website visitors to mine dogecoins