浏览器里跑语言模型已经从演示变成能日常用的东西。MicroLLM Lab 在一个网页里放了七个 25M 到 360M 的小模型,权重做 Q4 量化,点 Load 就流式下载进 IndexedDB,推理优先走 WebGPU 计算着色器,不可用时依次降级到 WASM 和纯 JS。聊天、跑分、出性能证书都在本机完成,prompt 不出设备,不需要账号,也不把请求发去任何服务器。
七个模型里六个是 Apache 2.0,GPT-2 是 MIT。参数从 25.8M 的 MiniMind2 Small 到 361.8M 的 SmolLM2 360M Instruct,除 GPT-2 的上下文是 1024,其余都是 2048。折成 Q4 之后内存占用差距很大,26M 的版本占 16 MB,135M 一档 84 MB,360M 要 226 MB。
底层是什么在算
自研的 PetitGPT 引擎加 WebGPU 计算着色器,不是 WebLLM,也不是 transformers.js。Apple Silicon 走 Metal,Windows 走 DirectX 12,Linux 走 Vulkan,浏览器不支持 WebGPU 时按 WASM、纯 JS 的顺序降级,速度会明显掉。
页面上能看到 tok/s、首 token 时间、总耗时、JS 堆、GPU buffer、IndexedDB 用量和当前 GPU 型号。五个用 ChatML 模板的模型带默认 system prompt,PetitGPT 用自己的模板,GPT-2 是纯补全模式,没有 system 位。
七个模型的来历
PetitGPT research-v1 是个人开发者用单张 RTX 4090 在约 13B token 上从头训练的,30 层,隐藏维度 576,9 个查询头对 3 个键值头,前馈 1536,词表 32000。SmolLM2 360M Instruct 有 32 层,隐藏维度 960,15 个查询头对 5 个键值头,前馈 2560,词表 49152。GPT-2 最老,12 层,隐藏维度 768,12 个查询头对 12 个键值头,没有分组注意力。135M 一档有三个模型,参数量完全相同,训练数据不同,跑同一个 prompt 的输出差别能直接看出数据的影响。
Q4 把 16 位权重压到 4 位,体积约缩四分之三。100M 以上参数的模型在浏览器内存里占 50 到 84 MB 这个量级,360M 要 226 MB。IndexedDB 只做权重缓存,真正推理时仍要整份进内存,老机器掉到 WASM 之后内存压力会更明显。
三步试一遍
- 打开页面,或者下载整包后本地起一个 HTTP 服务。
file://直接打开不行,ES module、WebGPU 和 IndexedDB 都会被浏览器安全策略挡掉。 - 在模型卡片上点 Load,权重流式写入 IndexedDB,第二次访问不用重新下载,整包约 589 MB。
- Chat 标签选模型输入 prompt,Benchmarks 标签跑内置客观题、峰值速度和 256 token 的持续解码,还可以写自定义 JS 评测。Compare 页面出跨模型图表,Certificate 生成一张带硬件信息和日期的 PNG。
限制要提前知道
模型小,能力上限远低于前沿模型,项目自己写明 135M 这一档允许失败。基准只做客观对错题,用正则或精确 token 匹配判分,不评估写作质量。跑分数字随设备差异极大,证书上的数据只代表本机。
隐私边界要分清。推理和评测全在本地,prompt 不出设备,权重缓存在 IndexedDB,多人共用的机器会留下痕迹,需要手动点 Unload。第一次加载要下载几十到两百多 MB,网络差的时候先有个心理准备。
小模型自有它的位置。延迟、隐私、成本三件事同时有要求时,一个 26M 的本地模型比任何接口调用都干脆,它甚至能在飞行模式下跑完一次分类。
常见问题
WebGPU 是硬门槛吗。是。老浏览器或老 GPU 会掉到 WASM 和纯 JS 路径,能跑,慢到不适合日常对话。
26M 的模型有什么用。适合验证流程、做端侧演示、观察 tokenizer 行为,别期待内容质量。
能拿它做产品原型吗。可以。权重许可干净,量化打包和多模型复用的做法能参考,产品化要换更大的模型和更强的运行时。
跑分该看哪个数。峰值速度受采样策略影响大,持续解码的 tok/s 更接近日常对话。首 token 时间长通常是加载和预热,不是推理慢。