第一篇:项目概览 — 在浏览器里跑大模型,端侧 AI 的革命来了

第一篇:项目概览 --- 在浏览器里跑大模型,端侧 AI 的革命来了

阅读完本文你将能回答:这个项目是做什么的?用了哪些技术?为什么要在浏览器里跑 AI?WebGPU 是什么?


一、引言

简单来说,这个项目的核心目标是:在浏览器里本地运行一个 15 亿参数的推理大模型,所有的计算都在你的电脑上完成,数据不会离开你的机器。

你可能会问:大模型不都是跑在云端服务器上的吗?ChatGPT、DeepSeek 官网不都是发 HTTP 请求吗?为什么要把模型搬到浏览器里?

这就引出了我们第一个话题 ------ 端侧模型(On-Device AI)


二、为什么要做端侧 AI?

2.1 云端推理的三大痛点

痛点 说明
每次 API 调用都要花钱,token 计费模式对于高频使用场景成本很高
不安全 你的 prompt 和上下文(context)会随着请求发送到远程服务器,敏感数据有泄露风险
延迟高 网络往返 + 服务端排队 + 推理耗时,用户体验不够丝滑

2.2 端侧模型的优势

端侧模型(On-Device Model)是指模型文件就在用户设备上,推理计算也发生在本地:

  • 零网络延迟:没有 HTTP 请求,GPU 直接计算
  • 数据隐私:你的对话内容永远不会离开你的设备
  • 离线可用:模型下载一次,之后不需要网络
  • 零成本:不需要付费 API,算力来自你的 GPU

端侧模型的典型场景:

  • 📱 手机端:iOS 的 CoreML、Android 的 MediaPipe
  • 🚗 汽车端:车载语音助手离线运行
  • 🖥️ 浏览器端:通过 WebGPU 调用本地 GPU,就是我们这个项目做的事
  • 🤖 Agent 场景:本地小模型做意图识别,云端大模型做复杂推理,协同工作

三、技术栈全景图

让我用一张图来展示项目的技术架构:

scss 复制代码
┌─────────────────────────────────────────────────────────┐ 
│                      浏览器 (Browser)                     
│  ┌───────────────────────────────────────────────────┐  
│  │              React 19 + TypeScript                 
│  │  ┌─────────────┐  ┌──────────────┐               
│  │  │   App.tsx    │  │ Progress.tsx │               
│  │  │  (主组件)    │  │  (进度条组件) │                 
│  │  └──────┬───────┘  └──────────────┘                 
│  │         │                                           
│  │  ┌──────▼──────────────────────────────────────┐ 
│  │  │        🤗 Transformers.js                     
│  │  │  (HuggingFace 官方的 JS 推理库)                
│  │  └──────┬──────────────────────────────────────┘  
│  │         │                                        
│  │  ┌──────▼──────────────────────────────────────┐   
│  │  │        ONNX Runtime Web                        
│  │  │  (开放神经网络交换格式的浏览器运行时)            
│  │  └──────┬──────────────────────────────────────┘   
│  └─────────┼──────────────────────────────────────────┘   
│            │                                            
│  ┌─────────▼──────────────────────────────────────┐
│  │                   WebGPU API                        
│  │         (直接调用本地 GPU 进行并行计算)              
│  └──────────────────────┬─────────────────────────┘ 
└─────────────────────────┼──────────────────────────────┘
                          │
┌─────────────────────────▼──────────────────────────────┐
│              本地 GPU (NVIDIA / AMD / Intel)             
│  运行 DeepSeek-R1-Distill-Qwen-1.5B (ONNX 格式)        
└────────────────────────────────────────────────────────┘

核心技术栈一览

层级 技术 作用
前端框架 React 19 + TypeScript 构建 UI 界面,类型安全
构建工具 Vite 8 极速开发服务器与生产构建
样式方案 TailwindCSS 4 原子化 CSS,几乎不用写 CSS 文件
AI 推理库 Transformers.js HuggingFace 官方 JS 库,加载和运行模型
模型运行时 ONNX Runtime Web 高效的跨平台神经网络推理引擎
硬件加速 WebGPU 新一代浏览器 GPU API,取代 WebGL
模型 DeepSeek-R1-Distill-Qwen-1.5B 15 亿参数的蒸馏推理模型

四、WebGPU --- 浏览器里的 GPU 编程

4.1 从 WebGL 到 WebGPU

如果你写过 Three.js 或者了解过浏览器图形编程,你可能知道 WebGL。它是 2011 年发布的,基于 OpenGL ES 2.0,已经用了十几年了。

WebGPU 是下一代标准,2023 年在 Chrome 113 中正式发布。它和 WebGL 的关系,就像 Vulkan/DirectX 12/Metal 和 OpenGL 的关系 ------ 是革命性的升级。

对比维度 WebGL WebGPU
底层 API OpenGL ES 2.0 (2011) Vulkan / Metal / DirectX 12
计算管线 不支持通用计算 原生支持 Compute Shader
多线程 单线程为主 原生多线程支持
性能 受限于旧架构 接近原生 GPU 性能
AI 推理 几乎不可行 非常适合

关键区别:WebGL 是为"画三角形"设计的,而 WebGPU 从一开始就为**通用 GPU 计算(GPGPU)**设计了 Compute Shader 管线。这意味着 WebGPU 可以让 GPU 做矩阵乘法 ------ 而这恰恰是 AI 推理的核心运算。

4.2 WebGPU 和 AI 推理的关系

大模型的推理过程,本质上是大量矩阵乘法和张量运算。GPU 有成千上万个计算核心,天然适合做这种"简单但大量"的并行计算。

复制代码
一个 token 的推理 ≈ 数十亿次乘加运算 → GPU 并行执行 → 毫秒级完成

WebGPU 让浏览器可以直接调度本机的 GPU 来完成这些运算,这就是"在浏览器里跑大模型"的硬件基础。

4.3 检测浏览器是否支持

项目中有一行非常巧妙的代码:

ini 复制代码
const IS_WEBGPU_AVAILABLE = !!navigator.gpu;

这个 !! 双感叹号的技巧值得说一下:

  • navigator.gpu → 浏览器支持 WebGPU 时返回 GPU 对象,不支持时返回 undefined
  • 第一个 ! → 将值转为布尔值并取反(undefinedtrue
  • 第二个 ! → 再取反一次,得到正确的布尔值(truefalse

这就是 JavaScript 中经典的"双重否定等于肯定"。


五、模型 --- DeepSeek-R1 蒸馏版

5.1 什么是蒸馏(Distillation)?

"蒸馏"是模型压缩的一种技术。想象一下:

  • 老师模型:DeepSeek-R1 完整版,参数规模巨大(671B),推理能力极强,但普通电脑根本跑不动
  • 学生模型:Qwen-1.5B,只有 15 亿参数,体积小,普通电脑能跑
  • 蒸馏过程:用老师模型的输出和中间表示来训练学生模型,让学生模型"学到"老师模型的推理能力

就像把一大锅汤(老师模型的知识)蒸馏浓缩成一小瓶精华(学生模型),体积大幅减小但保留了核心能力。

5.2 为什么选 Qwen 1.5B?

考量 说明
参数量 1.5B 参数 ≈ 3-4GB 模型文件,浏览器可以承受
推理能力 经过 DeepSeek-R1 蒸馏,保留了强大的推理链(Chain of Thought)能力
ONNX 格式 ONNX 社区提供了优化好的 ONNX 版本,可以直接用 ONNX Runtime Web 加载
开源协议 完全开源,可以自由使用

5.3 HuggingFace --- 全球最大的开源模型社区

模型托管在 HuggingFace 上:onnx-community/DeepSeek-R1-Distill-Qwen-1.5B-ONNX

HuggingFace 你可以把它理解为 AI 界的 GitHub:

  • 托管开源模型(模型文件就是"代码")
  • 提供模型下载、版本管理
  • 提供 Transformers.js 这样的工具库让开发者方便地使用模型

六、Transformers.js 和 ONNX Runtime Web

6.1 Transformers.js

Transformers.js 是 HuggingFace 官方推出的 JavaScript 推理库。它的设计目标很明确:

让你在浏览器里使用 HuggingFace 上的模型,就像在 Python 里用 pipeline() 一样简单。

它屏蔽了模型加载、分词器(Tokenizer)、推理管线的复杂性,提供统一的 API。

6.2 ONNX Runtime Web

ONNX(Open Neural Network Exchange,开放神经网络交换格式)是一个跨框架的模型格式标准。

它的设计哲学是:

你用 PyTorch 或 TensorFlow 训练模型 → 导出为 ONNX 格式 → 在任何支持 ONNX 的运行时上推理

ONNX Runtime Web 就是浏览器端的推理引擎,它底层可以调用 WebGPU 来加速计算。

6.3 两者的配合

arduino 复制代码
┌─────────────────────┐
│  Transformers.js    │  ← 高层封装:加载模型、分词、构建 pipeline
│  "给我一个模型名"    │
└────────┬────────────┘
         │ 调用
┌────────▼────────────┐
│  ONNX Runtime Web   │  ← 底层引擎:加载 ONNX 文件、调度 GPU 计算
│  "用 WebGPU 跑它"    │
└────────┬────────────┘
         │ 调度
┌────────▼────────────┐
│  WebGPU / GPU       │  ← 硬件:真正执行矩阵运算
└─────────────────────┘

七、项目体验流程

用户打开网页后,经历了这样几个步骤:

arduino 复制代码
1. 打开页面 
   → 浏览器检测 WebGPU 支持(navigator.gpu)
   → 不支持:显示"您的浏览器还不支持 WebGPU"
   → 支持:显示 "Load Model" 按钮

2. 点击 "Load Model"
   → 状态变为 "loading"
   → Transformers.js 从 HuggingFace 下载模型文件(约 3-4GB)
   → 进度条实时显示每个文件的下载进度
   → 显示当前正在下载的文件名和大小

3. 加载完成
   → 状态变为 "ready"
   → 聊天输入框激活
   → 用户输入问题,模型本地推理,返回结果

4. 整个过程:
   ✅ 零服务器请求(除了下载模型文件)
   ✅ 数据完全本地
   ✅ 加载后可离线使用

八、本篇小结

这篇文章我们建立了项目的全局认知:

  1. 端侧 AI 是趋势,解决了云端的成本、隐私、延迟三大痛点
  2. WebGPU 是浏览器里跑 AI 的硬件基础,它提供了通用 GPU 计算能力
  3. DeepSeek-R1-Distill-Qwen-1.5B 是蒸馏后的轻量推理模型,适合浏览器运行
  4. Transformers.js + ONNX Runtime Web 是浏览器端 AI 推理的软件基础
  5. 整个项目实现了从模型下载到本地推理的完整闭环

下一篇我们将深入工程化层面,详解 Vite + React + TypeScript + TailwindCSS 的项目搭建过程,每一个配置文件我都会掰开揉碎了讲。


下一篇预告第二篇:工程化搭建 --- Vite + React + TypeScript + TailwindCSS 全解析

相关推荐
何时梦醒2 小时前
第二篇:工程化搭建 — Vite + React + TypeScript + TailwindCSS 全解析
前端·人工智能
只一2 小时前
React 性能优化精讲:useCallback 与 useMemo 彻底吃透(附实战案例)
前端·react.js
橘子星2 小时前
浏览器也能跑大模型:WebGPU + Transformers.js 本地运行 DeepSeek-R1
前端·人工智能
用户33144195556732 小时前
Rush Monorepo 构建缓存指南
前端
物联网软硬件开发-轨物科技2 小时前
【轨物方案】从五维感知到一键顺控:箱变智能化不是一个传感器能解决的事
人工智能·科技·其他·机器人·开源
windliang2 小时前
Claude Code 源码分析(八):Memory 如何被写入、整理与按需召回
前端·算法·面试
木公子2 小时前
Vue3源码精读03:响应式核心依赖追踪机制|track与trigger底层源码全解析
前端·vue.js
睡觉时不困4422 小时前
Obsidian 三端同步完整流程:电脑、手机、平板通过 Gitee 实时同步
前端
Swift社区2 小时前
Python 开发环境怎么选?PyCharm、VS Code、Trae 谁更适合 AI 开发?
人工智能·python·pycharm