exo-explore / exo

Run your own AI cluster at home with everyday devices 📱💻 🖥️⌚
GNU General Public License v3.0
16.24k stars 860 forks source link

[BOUNTY - $1000] exo browser node (WebGPU) #304

Open AlexCheema opened 1 month ago

AlexCheema commented 1 month ago

Background

We want to make exo as accessible as possible. The most accessible thing possible would be you don't even have to install something, you just go to your browser e.g. node.exolabs.net

Proposed Solution

exo running in the browser. This could be a new minimal implementation in JS that implements the exo service, or it could be some way to get the existing Python code to run in the browser (WebAssembly or Pyodide or similar). The inference itself will probably need to use WebGPU. You will need to implement a new discovery module other than UDP since UDP broadcast won't work in the browser. This discovery module could be as simple as manually specifying node endpoints. You will also need to implement a new way of doing p2p networking since the current approach requires exposing a port for gRPC over HTTP. Instead, it may make sense to use libp2p or similar. In the end, there needs to be a shareable link that allows you to connect browser nodes. I could imagine this link being something like node.exolabs.net?node_endpoints=http://123.123.123.123:52712.

Deliverables

szmeku commented 2 weeks ago

on it :) anyone wants to help? ;)

moosh3 commented 2 weeks ago

@szmeku I've spent most of the weekend stubbing out a Typescript implementation of Exo, discovery/networking with libp2p + pubsub w/ a relay server and just started looking at writing wasm bindings for tinygrad vs actually writing out all the wgsl for a webgpu implementation...would love to chat! Discord DM's are open

szmeku commented 2 weeks ago

@moosh3 uff you're far further than me :D let me dig into it more. Thanks for your update!