Show HN:使用图形着色器实现的GPT-2
Show HN: GPT-2 implemented using graphics shaders

原始链接: https://github.com/nathan-barry/gpt2-webgl

这个项目使用 WebGL2 进行 GPU 加速推理,实现了基于浏览器的 GPT-2(小型,1.17 亿参数)。它避免了服务器端处理,依赖于客户端计算。 **主要特性:** * **GPU 推理:** 使用 WebGL2 着色器直接在浏览器中执行完整的 GPT-2 前向传递。 * **客户端分词:** 通过浏览器中的 js-tiktoken 处理 BPE 分词,消除了 WASM 获取依赖。 * **权重下载:** Python 脚本 (`download_weights.py`) 从 HuggingFace 下载预训练的 GPT-2 权重(Float32Arrays)并生成清单。 * **前端:** 使用 Vite 进行打包,提供 ESM 模块和热模块替换 (HMR)。 **设置:** 1. 安装 Python 依赖项(`torch`、`numpy`、`transformers`)并运行 `download_weights.py` 下载权重。 2. 安装 Node.js 依赖项。 3. 使用 Vite 启动本地开发服务器。 `src/` 目录包含核心逻辑(`gpt2_webgl.ts` - WebGL2 推理、着色器和分词器)和 UI 引导程序(`main.ts`)。权重存储在 `public/weights/` 中。

这个Hacker News帖子讨论了一个使用WebGL着色器实现GPT-2的项目,这种技术让人想起CUDA出现之前的早期GPU编程。作者nathan-barry将其作为图形学课程的期末项目,因为他熟悉WebGL。用户们称赞了这项努力,一些人建议使用WebGPU或直接从Hugging Face获取权重来简化部署。甚至还有用户链接了一个在VRChat世界中使用着色器运行Qwen2的例子。 讨论涉及到使用像WebGL这样的旧工具来更深入地理解模型工作原理的好处。人们提出了关于性能瓶颈(GPU瓶颈还是CPU瓶颈)以及WebGPU可能带来的性能提升的问题。大家希望有一个可访问的演示,作者正在努力实现,但面临着权重托管的挑战。其他人也提供了解决这个问题的方法。一位用户报告了一个可视化问题,促使作者请求提交错误报告。

原文

A browser-based, WebGL2 implementation of GPT-2.

Demo

  • 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)

🐍 Download the GPT-2 Weights

We rely on HuggingFace’s transformers to pull down the official GPT-2 weights and emit raw Float32Array blobs:

  1. Install Python dependencies:
    pip install torch numpy transformers
  2. Run the downloader:
    python download_weights.py
    This will fetch:
    • wte.bin (token embeddings)
    • wpe.bin (positional embeddings)
    • c_attn_q_w_0.binc_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

⚙️ Front-end Setup with Vite

We use Vite to bundle TS, serve ESM modules & handle js-tiktoken:

  1. Install JS dependencies:
  2. Start the local dev server:
  3. Open your browser at

Any changes under src/ will trigger HMR and live-reload.


.
├── public/                  # static assets served at `/`
│   └── weights/             # GPT-2 weight binaries + manifest.json
├── src/
│   ├── gpt2_webgl.ts        # WebGL2 inference + shaders + tokenizer
│   └── main.ts              # bootstrap: loads manifest, sets up UI
├── download_weights.py      # Python script to fetch & dump weights
├── index.html               # (copied by Vite) entrypoint HTML
├── vite.config.ts           # Vite config
├── package.json
└── tsconfig.json

MIT

联系我们 contact @ memedata.com