A browser-based, WebGL2 implementation of GPT-2.
- Full GPT-2 small (117M) forward pass in the GPU via WebGL2 shaders
- BPE tokenization using
js-tiktoken
in the browser (no WASM fetch) - Simple Python script to download the pretrained weights
- Node.js ≥ 16.x and npm
- Python ≥ 3.8
- A modern browser with WebGL2 support (Chrome, Firefox, Safari, Edge)
We rely on HuggingFace’s transformers
to pull down the official GPT-2 weights and emit raw Float32Array
blobs:
- Install Python dependencies:
pip install torch numpy transformers
- Run the downloader:
This will fetch:
python download_weights.py
wte.bin
(token embeddings)wpe.bin
(positional embeddings)c_attn_q_w_0.bin
…c_attn_q_w_11.bin
c_attn_k_w_0.bin
… etc.lm_head_w.bin
,lm_head_b.bin
- And a generated
manifest.json
mapping names → URLs
We use Vite to bundle TS, serve ESM modules & handle js-tiktoken
:
- Install JS dependencies:
npm install
- Start the local dev server:
npm run dev
- Open your browser at
http://localhost:5173
Any changes under src/
will trigger HMR and live-reload.
MIT