news 2026/9/2 14:49:57

基于WebGPU的浏览器本地LLM推理完整实战指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基于WebGPU的浏览器本地LLM推理完整实战指南

最近在做一个纯前端 AI 工具的项目,核心需求是“不部署后端推理服务,也能在用户浏览器里完成大模型的本地推理”。调研了一圈之后发现,真正能在生产环境落地的方案,基本都围绕 WebGPU 展开。这个方向很有意思,但网上的资料比较零散,很多文章只讲到了“WebGPU 能跑 LLM”,却没有把“验证浏览器支持度—选择推理框架—加载模型—实际跑通推理—排查性能问题”这条完整链路讲清楚。

这篇文章就结合我的实际调研和实践经验,完整梳理一遍在浏览器中运行 LLM 的整套流程。内容包括 WebGPU 的基础概念、浏览器环境检测方法、两个主流推理方案(WebLLM 与 Transformers.js 的浏览器部署思路)、一个可以跑在本地的最小对话示例,以及我在模型加载、性能调优、工程落地过程中遇到的各种问题和解决方案。

适合这样的读者:想用纯前端方式做 AI 应用的开发者、对 WebGPU 感兴趣的浏览器端工程师、以及对“本地私有化推理”这个方向有探索需求的技术同学。

1. 为什么要把 LLM 放进浏览器

1.1 浏览器运行 LLM 是什么

传统的大模型推理服务,通常部署在云端 GPU 服务器上,客户端通过 REST API 或 WebSocket 发送请求,服务端推理完成后返回结果。这种方式成熟稳定,但有几个绕不开的问题:

  • 服务器 GPU 成本高,高并发时需要大量显存。
  • 每次请求都有网络延迟,交互体验不如本地响应。
  • 用户数据必须上传到服务器,隐私敏感场景很难接受。
  • 离线环境下无法使用。

“在浏览器中运行 LLM”指的是把模型文件下载到用户本地,利用浏览器的 WebGPU 能力直接调用 GPU 完成模型推理,不需要后端推理服务。用户打开一个网页,模型就在他自己的电脑上跑,数据不出设备。

这不是未来概念,而是已经被验证的可行技术路径。目前常见的方案包括 WebLLM、Transformers.js、ONNX Runtime Web 等,都支持在浏览器中加载小型 LLM 模型并完成对话生成。

1.2 为什么 WebGPU 是关键

要理解 WebGPU 在其中的作用,先看之前的困境。

在 WebGPU 成熟之前,浏览器端做 AI 推理主要依赖 WebGL 和 WebAssembly。WebGL 本身是图形渲染接口,虽然也能做通用计算,但设计上有很多限制。比如:

  • 计算精度不够,很多 WGPU 支持的操作无法表达。
  • 缓冲区绑定和调度方式不灵活。
  • 对 GPU 的算力利用效率不高。

WebAssembly 虽然在 CPU 上能把性能压榨到不错的水平,但和 GPU 相比仍有数量级差距。

WebGPU 是新一代 Web 图形和计算 API,由 W3C GPU for the Web 工作组推进。它提供了一套更接近现代图形 API(如 Vulkan、Metal、Direct3D 12)的低级接口,允许开发者直接操作 GPU 资源、编写计算着色器、执行通用计算任务。

把 WebGPU 用到 LLM 推理上,意味着模型的核心矩阵运算(比如矩阵乘法、注意力计算)可以直接跑在用户 GPU 的通用计算单元上,速度远快于 WASM 的 CPU 方案。

1.3 适用场景与不适用场景

浏览器本地推理的优势很明显,但也要清楚它的边界。

最适用的场景包括:

  • 隐私敏感的工具类应用:用户输入的内容(如聊天记录、文档内容)不上传服务器。
  • 离线环境下的辅助工具:比如本地文档摘要、润色、关键词提取。
  • 高并发但低复杂度的场景:推理压力分散到用户端,服务器只负责静态资源分发。
  • 教学和演示项目:让学习者直观理解 LLM 推理流程。

不太适用的场景包括:

  • 需要超大参数模型(比如 70B 级别)的场景,浏览器不可能加载几十 GB 的模型文件。
  • 低端移动设备上的复杂推理,显存和带宽都是瓶颈。
  • 对响应速度要求极高的生产系统,纯浏览器方案在模型较小的情况下尚可,但模型稍大就存在首 Token 延迟。

2. 核心概念:WebGPU、本地推理与模型量化

2.1 WebGPU 提供的核心能力

WebGPU 对浏览器端 AI 推理最核心的贡献,是 GPUComputePipeline 和计算着色器。

一段典型的 WebGPU 计算管线,大致流程如下:

// 这是 WebGPU 计算管线的简化示例,重点展示调用结构 const adapter = await navigator.gpu.requestAdapter(); const device = await adapter.requestDevice(); const shaderModule = device.createShaderModule({ code: ` @group(0) @binding(0) var<storage, read> input: array<f32>; @group(0) @binding(1) var<storage, read_write> output: array<f32>; @compute @workgroup_size(256) fn main(@builtin(global_invocation_id) gid: vec3<u32>) { let index = gid.x; output[index] = input[index] * 2.0; } ` }); const computePipeline = device.createComputePipeline({ layout: 'auto', compute: { module: shaderModule, entryPoint: 'main' } });

这就是一个把输入数组每个元素乘以 2 的 GPU 计算程序。LLM 推理中大量的张量计算,本质上就是类似这样的大规模并行计算任务,只是复杂度高得多。

如果你对 WebGPU 有更深的研究需求,后续可以关注 compute pass 的调度策略、张量内存布局、共享内存使用这些方向。对于做 LLM 工程化的同学,更实际的做法是使用已经封装好底层细节的推理框架,而不是自己手写计算着色器。

2.2 本地推理的完整链路

浏览器里跑 LLM,完整流程大致是:

模型文件下载(远端静态资源) ↓ 模型加载与反序列化 ↓ 权重张量填入 GPU Buffer ↓ 推理引擎调用 WebGPU 计算管线 ↓ 逐 Token 生成文本 ↓ 回调返回给前端界面

每一步都有坑。模型文件动辄几百 MB,下载策略要考虑;权重需要从 CPU 内存传到 GPU 显存,浏览器内存压力很大;推理过程中 KV Cache 占用会不断变化,显存不足时容易报错。

2.3 模型量化在浏览器端的意义

浏览器端跑 LLM,模型量化不是可选项,而是必选项。

一个 FP16(半精度浮点)的 7B 模型,光权重就要占用约 14 GB 内存,浏览器根本扛不住。量化到 INT4 之后,权重体积降到约 3.5 GB,才有实际落地的可能性。

量化带来的损失主要体现在生成质量上。但在大多数通用对话场景中,INT4 量化模型的输出质量已经足够可用。尤其是 Phi-3-mini、Qwen2.5-1.5B、Llama-3.2-1B 这类小型模型,量化后反而更适合浏览器运行。

选择模型时,不要盲目追求大参数,而是要看“量化后的大小”和“生成速度”是否符合你的场景。

3. 环境准备与方案选型

3.1 浏览器与硬件要求

由于 WebGPU 仍处于快速迭代阶段,不同浏览器的支持情况有差异。

目前我建议的验证环境:

  • Google Chrome 或 Microsoft Edge 的最新稳定版,对 WebGPU 的支持相对完整。
  • Firefox 和 Safari 的 WebGPU 支持也在推进中,但完整度不如 Chromium 系。
  • 操作系统方面,Windows、macOS、最新版的 Linux 桌面环境都可以。
  • 硬件方面,最好有一块支持 Direct3D 12 / Metal / Vulkan 的独立显卡。核显也能跑,但速度会慢不少。

WebGPU 在桌面端已经比较稳定,但移动端设备适配还需要额外测试。

3.2 推理框架选型

目前浏览器端 LLM 推理,我重点关注两个方案。

第一个是 WebLLM。这是一个专门为浏览器打造的大模型推理引擎,底层基于 MLC LLM,直接从 WebGPU 层面做起,针对 LLM 推理做了深度优化。优点是集成度高,模型加载、采样、流式输出都有现成 API。

第二个是 Transformers.js。这是 Hugging Face 生态在浏览器端的延伸,支持的任务种类更丰富,不仅能跑 LLM,还能跑 embedding、图像分类、音频处理等。如果你希望统一管理多种模型任务,Transformers.js 会更顺手。

另一个可选方案是 ONNX Runtime Web,适合已经有 ONNX 模型的团队。它可以把 ONNX 格式的模型直接在浏览器中运行,但 LLM 相关的算子支持没有前两者那么聚焦。

3.3 开发环境准备

在实际编码前,先准备好开发环境。

推荐项目结构:

browser-llm-demo/ ├── index.html ├── main.js ├── package.json ├── vite.config.js └── public/ └── models/

使用 Vite 作为构建工具,开发体验比较顺畅,也能方便地处理 Web Worker。

初始化项目:

npm create vite@latest browser-llm-demo -- --template vanilla cd browser-llm-demo npm install

版本需要根据项目实际情况调整,后续示例代码的重点是逻辑演示,具体依赖版本以你安装时为准。

4. 第一步:验证浏览器是否支持 WebGPU

4.1 使用 navigator.gpu 检测支持度

在编写任何模型加载代码之前,首先要确认浏览器暴露了 WebGPU 接口。

目前的标准入口是navigator.gpu

// 文件路径:src/utils/webgpu-check.js export async function checkWebGPUSupport() { if (!navigator.gpu) { return { supported: false, reason: '当前浏览器不支持 WebGPU', detail: '请升级到最新版 Chrome、Edge 或 Firefox' }; } try { const adapter = await navigator.gpu.requestAdapter(); if (!adapter) { return { supported: false, reason: '无法获取 GPU 适配器', detail: '浏览器启用了 WebGPU,但当前设备没有可用的 GPU 适配器' }; } const device = await adapter.requestDevice(); const info = { supported: true, adapterInfo: { vendor: adapter.info.vendor, architecture: adapter.info.architecture, device: adapter.info.device, description: adapter.info.description }, device: device }; return info; } catch (error) { return { supported: false, reason: 'WebGPU 初始化失败', detail: error.message }; } }

在页面 UI 中调用:

<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>WebGPU 检测工具</title> </head> <body> <h1>浏览器 WebGPU 支持检测</h1> <button id="checkBtn">开始检测</button> <pre id="result">等待检测…</pre> <script type="module"> import { checkWebGPUSupport } from './src/utils/webgpu-check.js'; document.getElementById('checkBtn').addEventListener('click', async () => { const result = await checkWebGPUSupport(); if (result.supported) { document.getElementById('result').textContent = JSON.stringify(result.adapterInfo, null, 2); } else { document.getElementById('result').textContent = `${result.reason}: ${result.detail}`; } }); </script> </body> </html>

4.2 检测时需要注意的坑

在 Chrome 上,即使返回了 adapter,也不代表 WebGPU 计算功能完全可用。

常见坑点:

  • 某些远程桌面环境或虚拟机环境中,WebGPU 后端可能降级为软件渲染,速度极慢。
  • adapter.requestDevice()可能因为权限或系统策略返回 null。
  • 浏览器返回的 adapter 支持的功能集可能与实际 GPU 硬件能力不完全一致。

建议开发阶段使用chrome://gpu/页面查看 WebGPU 的具体状态,确认硬件加速已经开启。

如果你在各浏览器中打开检测页面都得到“不支持”的结果,另一个思路是检查浏览器是否开启了硬件加速。Chrome 设置中搜索“硬件加速”,确保开关处于打开状态。

4.3 WebGL 与 WebGPU 不要混淆

很多旧资料把 WebGL 作为浏览器 GPU 能力的判断标准。这里要明确:

WebGL 是基于 OpenGL ES 的图形接口,主要面向渲染。虽然也能做部分计算任务,但在数据格式、计算精度、通用计算能力上与 WebGPU 有本质差距。

navigator.gpu只对应 WebGPU。如果你的项目用 WebGL 检测来判断是否支持 LLM 推理,大概率会误判。

5. 完整实战:在浏览器中运行小模型对话

5.1 项目目标

我们来做一个最简单的浏览器聊天页面,功能如下:

  • 用户输入一句中文。
  • 浏览器加载一个本地小模型,在 WebGPU 上完成推理。
  • 页面以流式方式输出生成结果。

这里我将使用 WebLLM 作为推理引擎示例。由于 WebLLM 的 API 在不同版本中会有所调整,下面的代码会保留核心调用结构,你需要根据实际安装的包版本做微调。

安装依赖:

npm install @mlc-ai/web-llm

5.2 初始化推理引擎

WebLLM 的核心入口是CreateMLCEngine。我们创建一个管理类,方便后续扩展。

// 文件路径:src/llm/engine.js import { CreateMLCEngine } from '@mlc-ai/web-llm'; export class LLMEngine { constructor(options = {}) { this.modelId = options.modelId || 'Qwen2.5-1.5B-Instruct-q4f16_1-MLC'; this.engine = null; this.progressCallback = options.progressCallback || (() => {}); } async initialize() { if (!navigator.gpu) { throw new Error('WebGPU 不可用,请检查浏览器支持情况'); } const initProgressCallback = (report) => { this.progressCallback(report); }; this.engine = await CreateMLCEngine( this.modelId, { initProgressCallback } ); return this.engine; } async generate(prompt, onTextDelta) { if (!this.engine) { throw new Error('引擎尚未初始化'); } const messages = [ { role: 'system', content: '你是一个简洁、友好的中文助手。' }, { role: 'user', content: prompt } ]; const reply = await this.engine.chat.completions.create({ messages, temperature: 0.7, max_tokens: 512, stream: true }); let text = ''; for await (const chunk of reply) { const delta = chunk.choices[0]?.delta?.content || ''; if (delta) { text += delta; onTextDelta?.(delta); } } return text; } }

5.3 页面主逻辑

编写一个简单的页面,让用户能实际体验推理过程。

<!-- 文件路径:index.html --> <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>浏览器本地 LLM 推理 Demo</title> <style> body { font-family: system-ui, sans-serif; max-width: 720px; margin: 40px auto; padding: 0 16px; } #chat { border: 1px solid #ddd; padding: 16px; min-height: 320px; border-radius: 8px; background: #fafafa; } .message { margin-bottom: 12px; line-height: 1.6; } .message.user { text-align: right; color: #333; } .message.assistant { text-align: left; color: #0b5394; } #loading { color: #888; margin: 12px 0; } .input-row { display: flex; gap: 8px; margin-top: 12px; } #prompt { flex: 1; padding: 8px; border: 1px solid #ccc; border-radius: 4px; font-size: 14px; } button { padding: 8px 16px; border: none; border-radius: 4px; background: #0b5394; color: #fff; cursor: pointer; } button:disabled { background: #ccc; cursor: not-allowed; } </style> </head> <body> <h1>浏览器本地 LLM 推理</h1> <p>模型权重将在本地加载,推理过程依赖 WebGPU,不发送数据到服务器。</p> <div id="loading">正在加载模型,请稍候…</div> <div id="chat"></div> <div class="input-row"> <input id="prompt" type="text" placeholder="输入你的问题" /> <button id="sendBtn" disabled>发送</button> </div> <script type="module"> import { LLMEngine } from './src/llm/engine.js'; const chatBox = document.getElementById('chat'); const loadingBox = document.getElementById('loading'); const promptInput = document.getElementById('prompt'); const sendBtn = document.getElementById('sendBtn'); function appendMessage(role, text) { const div = document.createElement('div'); div.className = `message ${role}`; div.textContent = `${role === 'user' ? '你' : 'AI'}: ${text}`; chatBox.appendChild(div); chatBox.scrollTop = chatBox.scrollHeight; } const engine = new LLMEngine({ progressCallback: (report) => { loadingBox.textContent = `模型加载进度: ${Math.round(report.progress * 100)}%`; } }); async function init() { try { await engine.initialize(); loadingBox.textContent = ''; sendBtn.disabled = false; appendMessage('assistant', '模型已就绪,请开始提问。'); } catch (error) { loadingBox.textContent = `初始化失败: ${error.message}`; } } sendBtn.addEventListener('click', async () => { const text = promptInput.value.trim(); if (!text) return; appendMessage('user', text); promptInput.value = ''; sendBtn.disabled = true; try { let assistantText = ''; const replyDiv = document.createElement('div'); replyDiv.className = 'message assistant'; chatBox.appendChild(replyDiv); await engine.generate(text, (delta) => { assistantText += delta; replyDiv.textContent = `AI: ${assistantText}`; chatBox.scrollTop = chatBox.scrollHeight; }); } catch (error) { appendMessage('assistant', `生成出错: ${error.message}`); } finally { sendBtn.disabled = false; } }); init(); </script> </body> </html>

5.4 运行与验证

执行:

npm run dev

打开浏览器访问本地地址。首次加载时,模型文件会从远端拉取,这个过程可能持续一段时间。模型下载完成并量化后,就可以开始对话。

预期输出大致如下:

AI: 模型已就绪,请开始提问。 你: 用一句话介绍 WebGPU AI: WebGPU 是一种现代 Web 图形和计算 API,它允许网页直接利用 GPU 进行高性能渲染和通用计算。

注意首轮推理速度通常较慢,因为引擎需要在 GPU 上构建对应的计算管线并分配显存。后续轮次的响应速度会明显提升。

6. 常见问题与排查思路

6.1 WebGPU 相关报错

问题现象常见原因解决思路
navigator.gpu为 undefined浏览器版本过旧或未开启硬件加速升级浏览器,在设置中打开硬件加速
requestAdapter()返回 null系统没有可用 GPU 或驱动异常检查显卡驱动,尝试更换浏览器
requestDevice()抛错设备请求过多或权限限制刷新页面重试,关闭其他 GPU 密集应用
GPU 计算速度极慢可能走了软件渲染后端chrome://gpu中确认加速状态

如果你使用的是 Windows 桌面环境,并且设备有核显和独显双 GPU,浏览器默认可能使用核显。可以尝试在系统设置中为对应浏览器指定高性能 GPU。

6.2 模型加载失败或提示资源不足

浏览器加载大模型时,内存问题会非常突出。

常见错误包括:

  • 模型文件下载中断,导致权重不完整。
  • 页面内存占用过高,浏览器直接崩溃。
  • 显存不足,WebGPU 设备上下文被销毁。

排查步骤建议如下:

  1. 在开发者工具 Network 面板中确认模型文件是否完整加载。
  2. 查看浏览器任务管理器的内存占用情况。
  3. 更换更小的量化模型(例如从 4bit 降到 2bit 或选择 1B 以下模型)。
  4. 确保页面在后台没有被休眠。

6.3 推理速度不达预期

如果模型已经跑通,但生成速度很慢,可以从这几个角度排查:

  • 是否使用了独立的 GPU,而不是核显。
  • 模型是否过大,导致 GPU 显存不足,触发内存换入换出。
  • 浏览器是否处于省电模式。
  • 是否同时有大量其他 WebGL/WebGPU 任务在竞争资源。
  • 采样参数中max_tokens是否设置过大,导致生成了过多无用内容。

在开发环境下,建议先打开 performance monitor,观察推理期间的 GPU 占用率。如果 GPU 没有明显跑满,说明存在 CPU-GPU 数据传输瓶颈,此时需要评估模型大小和推理框架的设置。

6.4 浏览器崩溃恢复

在低端设备上,浏览器崩溃是常见问题,特别是模型较大时。

为了提升稳定性,可以考虑以下措施:

  • 使用 Web Worker 隔离推理线程,避免阻塞 UI 主线程。
  • 对模型版本做分级:高端设备加载大模型,低端设备自动降级到更小模型。
  • 在进入推理前保存用户输入,崩溃后可以恢复会话。

具体来说,WebLLM 和 Transformers.js 都支持在 Web Worker 中运行推理。这可以防止 GPU 计算阻塞页面渲染,也能让异常恢复更可控。

7. 最佳实践与工程建议

7.1 模型选择与缓存策略

浏览器端应用的加载体验,很大程度上取决于模型文件的体积和数量。

建议:

  • 不要把所有模型都打包到首屏,按需加载。
  • 使用 Cache API 缓存已下载的模型文件,避免用户二次访问时重复下载。
  • 提供模型切换功能时,提前展示模型大小和预计加载时间。
  • 对于中文场景,优先选择中文优化较好的模型,如 Qwen2.5 系列。

模型下载是最耗时的环节,建议在页面中展示加载进度,并对加载失败提供重试按钮。

7.2 使用 Web Worker 隔离推理任务

LLM 生成是长任务,直接跑在主线程会阻塞页面交互。

推荐把推理引擎放到 Web Worker 中,主线程通过 postMessage 和 Worker 通信。

// 文件路径:src/llm/worker.js import { LLMEngine } from './engine.js'; const engine = new LLMEngine({ progressCallback: (report) => { self.postMessage({ type: 'progress', data: report }); } }); self.onmessage = async (event) => { const { type, payload } = event.data; if (type === 'init') { try { await engine.initialize(); self.postMessage({ type: 'ready' }); } catch (error) { self.postMessage({ type: 'error', message: error.message }); } } if (type === 'generate') { try { let answer = ''; await engine.generate(payload.prompt, (delta) => { answer += delta; self.postMessage({ type: 'delta', delta, answer }); }); self.postMessage({ type: 'done', answer }); } catch (error) { self.postMessage({ type: 'error', message: error.message }); } } };

使用 Web Worker 时,需要注意SharedArrayBuffer的跨源隔离要求。本地开发使用 Vite 通常没有问题,但如果部署上线,服务器需要正确的 COOP/COEP 响应头,否则部分依赖共享内存加速的功能可能不可用。不过对于纯 WebGPU 推理,不一定强制依赖SharedArrayBuffer,但如果你用到某些中间层(如 ONNX Runtime Web 的 wasm 多线程),就需要特别注意这一点。

7.3 错误处理与降级策略

浏览器端推理比服务端更不可控,用户设备的差异极大。

在生产环境,至少要提供以下降级策略:

  • 检测不到 WebGPU 时,提示用户升级浏览器或开启硬件加速。
  • WebGPU 初始化失败时,尝试切换到 WASM 后端(如果框架支持)。
  • WASM 也无法运行时,再提示用户当前设备不支持本地推理,并提供云端 API 作为替代。

Transformers.js 默认支持 CPU 和 WebGPU 多种后端,切换较方便。WebLLM 则更聚焦在 WebGPU 上。选型时,可以根据团队对降级策略的需求做出权衡。

7.4 安全与权限边界

虽然数据不出本地,但模型本身是开源权重,部署时要关注模型的 License。

同时,浏览器端推理意味着用户可以直接查看网络请求、导出模型权重、修改前端代码。不要在前端代码中放置任何机密信息,比如 API 密钥、内部模型路径、业务敏感逻辑。

如果混合使用云端 API 和本地推理,建议把 API 代理放在服务端,而不是直接暴露在前端。无论哪种方式,都要遵循最小权限原则,只给前端暴露必要的能力。

7.5 性能监控与日志

本地推理的调试比服务端更难,因为每一个用户设备都不一样。

建议在代码中埋入以下日志:

  • WebGPU adapter 信息。
  • 模型加载耗时。
  • 模型下载速度。
  • 首 Token 响应时间。
  • 每 Token 平均耗时。
  • 是否走了降级路径。

这些数据可以通过浏览器的 Performance API 或手动打点统计,对持续优化体验很有帮助。

8. 学习路线与进一步探索

到这里,你已经掌握了在浏览器中验证 WebGPU、加载模型、执行本地推理的完整流程。

如果你打算继续深入,建议按下面的方向推进:

第一,深入研究模型量化原理。理解了 INT4、INT8 对模型结构和生成质量的影响,才能更好地做方案选型。

第二,研究推理引擎的底层实现。WebLLM 的源码和 MLC LLM 的算子优化方法是很值得学习的素材。

第三,实现一个多模型管理平台。在实际项目中,通常不会只有一个模型,而是把多种模型组合起来形成应用能力。比如用小型 LLM 做摘要,用 embedding 模型做检索。

第四,关注浏览器端推理和 Web Worker、后台任务、离线缓存等浏览器能力的结合。这些能力组合起来,可以让本地推理应用更接近原生桌面的体验。

最后给一个实际经验:不要一上来就追求在浏览器里跑大模型。先从 1B 级别的模型开始,把加载、推理、流式输出、Worker 通信这一整套链路跑通,再逐步增加模型规模和功能。浏览器本地推理的性能天花板是明确的,工程上更重要的往往是“在合理设备约束下提供稳定可用的体验”。

如果这篇文章对你有帮助,可以收藏备用。后续我也会继续更新 WebGPU 推理方向的实践笔记,包括不同推理框架的对比、模型量化实践和浏览器端性能调优经验。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/2 14:49:30

AI工程师社区价值构建:从技术大会质量争议看高质量内容实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/2 14:49:19

工业AI工程实践:安全帽检测、故障预测与RAG问答系统

在工程机械和重型设备制造领域&#xff0c;卡特彼勒一直是“硬核”的代名词。最近看到一条消息&#xff0c;卡特彼勒正把 AI 从实验室搬到真实的作业现场&#xff0c;并且计划未来五年投入 1 亿美元做员工 AI 技能培训。这条新闻不是简单的“企业拥抱 AI”口号&#xff0c;它背…

作者头像 李华
网站建设 2026/9/2 14:44:46

MemPalace实战避坑清单:15个新手最容易踩的坑与官方纠正记录

MemPalace实战避坑清单&#xff1a;15个新手最容易踩的坑与官方纠正记录 【免费下载链接】mempalace The best-benchmarked open-source AI memory system. And its free. 项目地址: https://gitcode.com/GitHub_Trending/me/mempalace MemPalace 是一个免费开源的本地 …

作者头像 李华
网站建设 2026/9/2 14:43:35

用Agent Skill实现一键式科研课题设计:SKILL.md与本地部署实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/2 14:41:33

如何编译并调优 yuzu 模拟器:从 5 分钟跑通到三档硬件

如何编译并调优 yuzu 模拟器&#xff1a;从 5 分钟跑通到三档硬件 【免费下载链接】yuzu 任天堂 Switch 模拟器 项目地址: https://gitcode.com/GitHub_Trending/yu/yuzu yuzu 是一款把任天堂 Switch 游戏搬到 PC 上跑的开源模拟器&#xff0c;它要解决的核心问题是&…

作者头像 李华