Web Neural Network API(WebNN)是一个专为神经网络推理硬件加速而设计的低级API。它允许Web应用程序利用操作系统和底层硬件平台的机器学习能力,而不必依赖于平台特定的能力。WebNN API定义了一个与硬件无关的抽象层,使得开发者可以编写自定义代码,而不需要依赖于库。
WebNN的主要特点包括:
- 硬件加速:WebNN利用CPU、GPU或专用AI加速器(如NPU)来加速神经网络模型的执行,从而实现更快、更节能的机器学习模型运行。
- 高性能和隐私保护:WebNN使得AI/ML场景(如生成AI、人检测、面部检测等)能够在本地设备上运行,减少了对远程服务器的依赖,保护了用户隐私。
- 低延迟:在浏览器中进行推理有助于实现需要低延迟的新用例,例如实时视频分析、面部检测和语音识别。
- 高可用性:即使在互联网连接不可用或不可靠的情况下,WebNN也允许Web应用程序和框架在本地运行神经网络模型。
- 低成本:在客户端设备上进行计算意味着不需要服务器,这有助于Web应用程序减少在云端运行AI/ML服务的操作和维护成本。
WebNN的编程模型:
WebNN遵循一个简单的编程模型,允许开发者以最小的复杂性执行推理任务。API专注于定义执行机器学习模型所需的操作和基础设施,而不是处理模型加载、解析或管理等高级功能。WebNN设计为与模型格式无关,将加载和解析模型的责任留给其他库(如ONNX.js或Tensorflow.js)或Web应用程序本身。
WebNN的使用示例:
以下是使用WebNN进行模型构建和执行的示例伪代码:
/* 创建上下文和MLGraphBuilder */
const context = await navigator.ml.createContext(/* 执行参数 */);
const builder = new MLGraphBuilder(context);
/* 构建模型 */
// WebNN支持一系列核心ML操作符 - 完整列表可在以下网址找到
// https://www.w3.org/TR/webnn/#api-mlgraphbuilder
/* 构建可执行图 */
const graph = await builder.build({'output': output});
/* 安排输入和输出缓冲区 */
const inputBuffer = new Float32Array(TENSOR_SIZE);
const outputBuffer = new Float32Array(TENSOR_SIZE);
const inputs = {'input': inputBuffer};
const outputs = {'output': outputBuffer};
/* 使用指定的输入执行编译后的图 */
const results = await context.compute(graph, inputs, outputs);
console.log('输出值: ' + results.outputs.output);
WebNN API仍在开发中,目前GPU和NPU支持处于预览状态,不建议在生产环境中使用。开发者可以通过GitHub上的WebNN API samples仓库来获取更多示例和学习如何使用WebNN。