@ audio/ nural-runtime (英语)
一个推论适配器:装入ONNX模型,在节点或浏览器中运行,工作准备.
每个神经原子都需要相同的三件事——负载字节,通过一个模型运行变速器,释放会话——在两个不同的运行时间之上(onnxruntime-node 在服务器上, onnxruntime-web 在浏览器/工作/工作间。 这个包是一个适配器: asr, (中文(简体) ), align, (中文(简体) ), separate, (中文(简体) ), diarize, (中文(简体) ), tts, (中文(简体) ), denoise 以及车道上的其他东西 而不是每条接线ONNX 运行时本身.
npm install @audio/neural-runtime
import { load, tensor } from '@audio/neural-runtime'
let session = await load('https://example.com/model.onnx') // fetched, cached, progress-able
let out = await session.run({ input: tensor(new Float32Array(...), [1, 40, 1]) })
out.output.data // Float32Array | Int32Array | BigInt64Array | Uint8Array | string[]
session.free()
load 接受 URL 字符串, Uint8Array,或 ArrayBuffer。 。 。 . tensor(data, dims, type?) 构建平原 { data, dims, type } ——呼叫时不导入 ORT;适配器将其转换为 ort.Tensor 懒惰地,在里面 run(),一旦后端解决.
后端
opts.backend | 运行时间 | 环境 |
|---|---|---|
'auto' (默认) | 选择 'node' 在节点, 'wasm' 浏览器/ 工作/ 工作 | 无论是 |
'node' | onnxruntime-node | 只有节点 |
'wasm' | onnxruntime-web/wasm | 仅浏览器/工人/工作 |
'webgpu' | onnxruntime-web/webgpu在节点, onnxruntime-node'WebGPU' 提供者( 黎明) | 浏览器/工人/工作; 节点 |
'coreml' | onnxruntime-node核心ML 提供者 | MacOS 上的节点 |
'webgl' | onnxruntime-web/webgl | 仅浏览器/工人/工作 |
也没有 onnxruntime-node 也没有 onnxruntime-web (1.17或以后)是一种依赖性很强的依赖——两者都是可选的同龄人(peerDependenciesMeta.optional) (中文(简体) ). 每个后端的建筑都是文字 import(),一个捆绑器或像esm.sh这样的CDN解析器,在后端第一次被使用后被装入后被记住. 建筑的运行时间是包。 json的选择,而不是对环境的猜测: "imports": { "#ort": { "node": "./ort-node.js", "default": "./ort-web.js" } } 给节点( 和 Bun, Deno) onnxruntime-node 还有其他一切 onnxruntime-web,所以浏览器构建从未遇到过 onnxruntime-node,则a process 多填(sm.sh's, a bunder's)无法从节点路径下发一页. 请求后端, 您的环境无法运行('wasm' 在节点, 'node' 在浏览器中)立即抛出,命名所缺少的东西和它的工作地点;一个可解而未安装的软件包会抛出命名安装命令. backends() 报告哪些东西可以在这里使用: ['node'] 在节点中 'webgpu' 财务报告和审定财务报表 'coreml' 在那里,它的节点有它们, ['wasm'] 或者说 ['wasm', 'webgpu'] (当 navigator.gpu 给一个不倒置的适配器,而不是浏览器中的 SwiftShader .
run() 排队同步调用到每会话一个相继的链条上 – 无论基本的 ORT 是否容忍重叠 run() 打电话. free() 地图到 session.release(),是独能,和 run() 之后 free() 掷出.
inputs编号 :outputs 会议报告 { name, dims, type } 当安装的 ORT 版本曝光时 inputMetadata编号 :outputMetadata (自onnxruntime -- -- 常用增加形状/类型报告以来),其他 { name } 只是,从来没有猜到.
缓存
load(url, opts) 财务报告和审定财务报表 fetchModel(url, opts) (取取出原始的,也用于 fetchJson 默认的缓存( 默认)opts.cache = false 无法禁用 :
- 节点数字 :
~/.cache/audiojs/neural/<sha256(url)>,以$AUDIO_NEURAL_CACHE侧行车.size文件记录了预期的字节计数;不匹配(truncted或以其他方式被损坏的条目)被视为缓存错失并被重置. - 浏览器页:1 快取 API存储
'audio-neural',按 URL 键. file://URL直接从磁盘上读取(只有节点),绕过缓存——没有什么可以缓存的.opts.progress?.({ loaded, total })字节到来时起火;total实值null当服务器不发送时Content-Length。 。 。 .opts.fetch覆盖环境fetch(自定义客户端,认证头,测试中的模拟).
工作
onnxruntime-web 装入其 .wasm 二进制从它默认解决的 URL 相对于它自己的模块的二进制—— 一个分辨率 an AudioWorkletProcessor 不能这样做(没有相对的模块位置,没有) document) (中文(简体) ). 过 opts.wasmPaths (一个 URL 前缀字符串,或 { 'ort-wasm.wasm': url, ... } 地图)将它指向任何您正在服务 onnxruntime-web资产的地方;它成为 ort.env.wasm.wasmPaths 在会话创建前. opts.threads 套装 ort.env.wasm.numThreads (Shared ArrayBuffer + > 1 所需的跨原生隔离).
API 密码
| 导出 | |
|---|---|
load(model, opts?) | → Promise<Session> —— 说 model: URL 字符串 QQ Uint8Array | ArrayBuffer |
tensor(data, dims, type?) | - 简单 Tensor· ; type 从 data省略时的构造器 |
backends() | → Promise<string[]> 可在这种环境中使用的后端 |
fetchModel(url, opts?) | → Promise<Uint8Array> ——随着进度被缓存获取 |
fetchJson(url, opts?) | → Promise<unknown> 相同的缓存/进度路径, JSON.parsed. 国家 |
Session数字 : { run(feeds, outputNames?) → Promise<Record<string, Tensor>>, inputs, outputs, backend, free() }。 。 。 .
load(model, opts) —— 说 opts数字 : { backend = 'auto', threads?, cache = true, progress?, fetch?, executionProviders?, graphOptimizationLevel?: 'all' | 'basic' | 'disabled', sessionOptions?, logLevel?, wasmPaths? }。 。 。 . sessionOptions 过任何其他 ort.InferenceSession 选项通过; { enableCpuMemArena: false, enableMemPattern: false } 每次运行后返回激活内存,而不是将其集合(Hybrid Transformer Demucs,onnxruntime-node 1.30中一个7.8 s段:峰值RSS 2.7 GB对3.2 GB).
不是因为:选择或运输一个模型——这个包件没有模型动物园,没有捆绑的重量,也没有对建筑的看法. neural-amp 而车道的其余部分则带来了车型.
部分 @ audio/ 神经病 车道。 这里的重量超出了范围——参见伞式README的重量许可政策,适用于任何船只预先训练的参数.
麻省理工学院 音频