WebLLM 是一个高性能的浏览器端 LLM 推理引擎
WebLLM 部署与使用教程
WebLLM 是一个高性能的浏览器端 LLM 推理引擎,它利用 WebGPU 加速,让你可以直接在浏览器中运行大语言模型,无需服务器支持。本教程将带你从零开始,完成 WebLLM 的集成、配置到部署的全过程。
一、核心特性概览
在开始部署前,了解 WebLLM 的主要能力有助于你更好地使用它:
- 纯浏览器推理:所有计算在本地完成,保护隐私,降低服务器成本。
- OpenAI API 兼容:使用熟悉的 OpenAI API 格式与开源模型交互,支持流式输出、JSON 模式等。
- 广泛模型支持:原生支持 Llama、Phi、Gemma、Mistral、Qwen 等主流模型系列。
- 多种缓存策略:支持 Cache API、IndexedDB、OPFS 等,灵活管理模型缓存。
- Web Worker 优化:可将模型加载和推理放到 Worker 线程,避免阻塞主线程 UI。
二、快速开始:在项目中集成 WebLLM
2.1 安装方式
通过包管理器安装
1 | npm install @mlc-ai/web-llm |
通过 CDN 直接引入
1 | <script type="importmap"> |
2.2 创建引擎与加载模型
核心操作是通过 CreateMLCEngine 工厂函数创建引擎实例并加载模型。
1 | import { CreateMLCEngine } from "@mlc-ai/web-llm"; |
注意:首次加载模型需要下载数 GB 的文件,耗时较长,请耐心等待并妥善处理加载状态。
2.3 执行对话
加载完成后,即可通过 engine.chat.completions 接口发送消息。
非流式对话
1 | const messages = [ |
流式对话
1 | const chunks = await engine.chat.completions.create({ |
三、高级部署配置
3.1 使用 Web Worker 优化性能
将推理任务放在 Worker 线程中,可以避免阻塞主页面 UI。
1. 创建 Worker 脚本 (worker.js)
1 | import { WebWorkerMLCEngineHandler } from "@mlc-ai/web-llm"; |
2. 在主线程中调用
1 | import { CreateWebWorkerMLCEngine } from "@mlc-ai/web-llm"; |
3.2 使用 Service Worker 实现模型持久化
Service Worker 可以让模型在页面刷新后保持加载状态,优化重复访问体验。
1. 创建 Service Worker 脚本 (sw.js)
1 | import { ServiceWorkerMLCEngineHandler } from "@mlc-ai/web-llm"; |
2. 在主线程注册并创建引擎
1 | if ("serviceWorker" in navigator) { |
3.3 缓存后端策略
WebLLM 提供多种缓存后端,可通过 appConfig.cacheBackend 配置:
1 | import { CreateMLCEngine, prebuiltAppConfig } from "@mlc-ai/web-llm"; |
| 后端 | 说明 |
|---|---|
"cache" |
浏览器 Cache API,默认选项。 |
"indexeddb" |
IndexedDB,适合存储大文件,持久性好。 |
"opfs" |
源私有文件系统,性能更好,需环境支持。 |
3.4 自定义模型与模型库
你可以使用 MLC LLM 编译自己的模型,并在 WebLLM 中加载。
1 | const appConfig = { |
四、构建与部署
4.1 构建项目
使用任何前端构建工具(如 Vite、Webpack、Parcel)打包你的应用。关键是在构建时正确处理 WASM 文件和 Worker。
Vite 示例配置
1 | // vite.config.js |
4.2 部署注意事项
- 跨域资源共享 (CORS):确保模型文件所在的 CDN 或存储桶配置了正确的 CORS 头,允许浏览器跨域加载。
- WebGPU 支持:WebLLM 依赖 WebGPU,请确保目标浏览器(Chrome 113+、Edge 113+、Firefox Nightly)支持并已启用。
- Service Worker 作用域:如果使用 Service Worker,需确保其注册路径能覆盖你的应用页面。
- 缓存策略:对于模型文件(常为
.bin,.wasm等),建议设置较长的缓存时间,减少重复下载。 - 内存管理:大模型会占用较多内存(数 GB),注意测试目标设备的可用内存。
五、部署清单
| 步骤 | 操作 | 关键点 |
|---|---|---|
| 1. 环境准备 | 确认浏览器支持 WebGPU | 推荐最新版 Chrome/Edge。 |
| 2. 项目集成 | npm install @mlc-ai/web-llm |
选择合适的包管理器。 |
| 3. 代码实现 | 创建引擎、加载模型、处理对话 | 实现加载进度反馈,处理流式输出。 |
| 4. 优化(可选) | 启用 Worker | 避免阻塞 UI。 |
| 5. 优化(可选) | 配置缓存后端 | 平衡加载速度与存储空间。 |
| 6. 构建 | 使用 Vite/Webpack 打包 | 正确处理 Worker 和 WASM。 |
| 7. 部署 | 上传静态文件到托管服务 | 配置 CORS,设置缓存头。 |
| 8. 验证 | 在目标浏览器中测试 | 检查 WebGPU 是否启用,模型是否能正确加载并推理。 |
总结
通过本教程,你已经掌握了在浏览器中部署 WebLLM 的核心方法。从简单的聊天应用,到复杂的、利用 Worker 优化性能的项目,WebLLM 提供了一个强大且灵活的框架。
后续学习建议:
- 查看官方 示例库 获取更多集成参考。
- 阅读 MLC LLM 文档 了解如何编译自定义模型。
- 关注 WebGPU 标准演进,以获得更好的性能支持。
WebLLM 使在浏览器中运行强大 AI 模型成为可能,现在就开始你的探索吧!
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 极客的赛博空间 | 专注 AI 与技术分享!
评论



