Skip to content

Commit 8cfe320

Browse files
committed
docs(moxwebgpu): 新增『浏览器在线训练实战』章节(线性回归 SGD 例子),让自动微分/训练能力更醒目
1 parent 475c8fc commit 8cfe320

1 file changed

Lines changed: 42 additions & 0 deletions

File tree

‎README.md‎

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
- [安装](#安装)
3737
- [快速上手](#快速上手)
3838
- [统一 API 参考](#统一-api-参考)
39+
- [浏览器在线训练实战](#浏览器在线训练实战)
3940
- [算子清单](#算子清单)
4041
- [数据类型与内存布局](#数据类型与内存布局)
4142
- [错误处理与调试](#错误处理与调试)
@@ -344,6 +345,47 @@ console.log(await W.grad.toArray()); // dL/dW,形状与 W 一致
344345
345346
---
346347

348+
### 🚀 浏览器在线训练实战(无需安装,浏览器里当场训一个模型)
349+
350+
> **这是 moxwebgpu 最被低估的能力**:它不止能做单次 GPGPU 计算,还能在**浏览器里跑完整的自动微分 + 梯度下降训练循环**——数据不用出浏览器、不依赖任何后端,笔记本 / 手机 / 树莓派只要有 WebGPU 就能训。配合前面说的「前端直接 `<script>` 引入 SDK」,任意网站都能让访客的 GPU 当场帮你训练一个小模型。
351+
352+
下面用核心逻辑跑通一个 **线性回归(最小二乘 / MSE)**,梯度真的在 GPU 上算:
353+
354+
```ts
355+
import { mox } from 'moxwebgpu';
356+
const gpu = await mox.init();
357+
358+
// 造一点训练数据:y ≈ 2x + 1
359+
const X = gpu.tensor([[0], [1], [2], [3]]);
360+
const Y = gpu.tensor([[1], [3], [5], [7]]);
361+
362+
const lr = 0.05;
363+
let W = gpu.tensor([[0]]).withGrad(); // 可微参数
364+
let b = gpu.tensor([[0]]).withGrad();
365+
366+
for (let step = 0; step < 200; step++) {
367+
const pred = X.matmul(W).add(b); // 前向:ŷ = X·W + b
368+
const loss = pred.sub(Y).mul(pred.sub(Y)).mean(); // MSE
369+
loss.backward(); // 反向:梯度填进 W.grad / b.grad(惰性,未上 GPU)
370+
371+
const wn = await W.sub(W.grad.mul(lr)).toArray(); // 手写 SGD 一步
372+
const bn = await b.sub(b.grad.mul(lr)).toArray();
373+
W = gpu.tensor(wn).withGrad(); // 重建张量并重新标记可微
374+
b = gpu.tensor(bn).withGrad();
375+
}
376+
console.log('训完的 W =', await W.toArray(), 'b =', await b.toArray()); // ≈ [[2]], [[1]]
377+
```
378+
379+
要点:
380+
381+
- **前向 / 反向全在惰性计算图上**:`backward()` 只建图、填 `.grad`,直到你 `await ...toArray()` 才真正下发 GPU——省得每一步都来回拷数据。
382+
- **目前没有内置优化器**:训练需手写 `W = W - lr * W.grad`(如上)。`SGD / Adam` 已在路线图上。
383+
- **想看真·在线演示?** 打开 [`examples/browser`](examples/browser/index.html) 或文档站的「在线演示」,你的 GPU 会当场把模型训给你看;也欢迎把它塞进你自己的网页(见 [浏览器演示](#浏览器演示))。
384+
385+
> 📌 训练刚需「可微」:`withGrad()` 标记的叶子才会累积 `.grad`,其余张量默认不计梯度,省显存。
386+
387+
---
388+
347389
## 📚 统一 API 参考
348390

349391
### `mox.init(options?)` → `Promise<MoxContext>`

0 commit comments

Comments
 (0)