Skip to Content
💡WebNN Origin Trial 即将到来!开发者很快将可以注册试用密钥进行体验 →

MLGraph

实验性: 这是一项实验性技术。在生产环境中使用前,请仔细检查浏览器兼容性表格。

Web 神经网络(WebNN)API 的 MLGraph 接口表示一个已编译的计算图。图一旦构建完成就是不可变的:其算子、输入、输出和常量权重都无法更改。

MLGraph 通过 MLGraphBuilder.build() 获得,并通过 MLContext.dispatch() 执行。图与创建它的构建器所属的 MLContext 绑定,只能在该上下文上分派。

此特性仅在安全上下文 (HTTPS 或 localhost)中可用,并且在主线程和 Web Worker  中均可使用。

Web IDL

web-idl
[SecureContext, Exposed=(Window, Worker)] interface MLGraph { undefined destroy(); };

构造函数

无。请使用 MLGraphBuilder.build() 创建 MLGraph。

实例属性

无。图的输入和输出的名称及描述符与构建时使用的相同;dispatch() 会据此验证你传入的张量。

实例方法

destroy()

destroy() 方法释放与该图关联的资源。调用之后,该图不能再被分派:MLContext.dispatch() 会抛出 InvalidStateError DOMException。

已经使用该图分派的工作仍会完成;实现会在这些工作结束后释放图的资源。多次调用 destroy() 不会产生额外效果。当图所属的上下文丢失或被销毁时,图也会被自动销毁。

语法

syntax.js
destroy()

参数

无。

返回值

无(undefined)。

示例

构建、运行和销毁图

graph-lifecycle.js
const context = await navigator.ml.createContext(); const builder = new MLGraphBuilder(context); const desc = { dataType: 'float32', shape: [2, 3] }; const x = builder.input('x', desc); const graph = await builder.build({ y: builder.relu(x) }); const input = await context.createTensor({ ...desc, writable: true }); const output = await context.createTensor({ ...desc, readable: true }); context.writeTensor(input, new Float32Array([-1, 2, -3, 4, -5, 6])); context.dispatch(graph, { x: input }, { y: output }); console.log(new Float32Array(await context.readTensor(output))); // [0, 2, 0, 4, 0, 6] // 不再需要时释放已编译的图。 graph.destroy();

注意事项

  • 只要数据类型和形状匹配,图就可以被分派任意多次,每次使用不同的输入和输出张量。
  • build() 中的编译可能包含权重预处理:常量数据会被转换并以设备特定的格式缓存。请重用图,而不是为每次推理重新构建。
  • 对于不再需要的图,尤其是大型模型,请调用 destroy(),以便及时释放设备内存,而不是等待垃圾回收。

规范

规范状态
Web 神经网络 API — MLGraph 接口候选推荐草案

最新的编辑草案可在 webmachinelearning.github.io/webnn  查看。

浏览器兼容性

WebNN 正在积极开发中,不同浏览器、操作系统和硬件的支持情况各不相同。

参见浏览器兼容性:WebNN API。

参见

Last updated on