Skip to content
目录

性能优化与工程最佳实践

1. 加载阶段

  • 并行加载pipeline() 已对 tokenizer、processor、model Promise.all;模型内部多 session 在 constructSessions 里并行 Promise.all(见 models/session.js)。
  • 只拉必要文件:依赖 get_pipeline_files + 多模态 text-only 过滤,减少无效下载。
  • 缓存:浏览器 Cache API / 自定义 env.customCache / Node FileCache;注意 iframe 与隐私模式下 Cache 可能不可用。

2. 推理阶段

  • WebGPU / WebNN:在支持的浏览器与模型上通常优于纯 WASM;需实测 fp16 / q4f16 是否可用。
  • KV cache:生成任务关注 past_key_values / present;WebGPU 下 preferredOutputLocation: gpu-buffer 可降低拷贝。
  • 全局推理串行backends/onnx.jswebInferenceChain 避免 Session already started,但会限制并发;高吞吐场景考虑 Worker 分区多页面实例

3. 资源与内存

  • 量化dtype: 'q4'q8 降低内存与带宽;注意精度损失。
  • dispose:长会话应用对 DynamicCacheModel.dispose() 显式释放,尤其 WebGPU。
  • 外部数据分片:超大模型用 external data;注意 MAX_EXTERNAL_DATA_CHUNKS 上限与加载时间。

4. 工程与部署

  • 静态资源:WASM 路径 env.backends.onnx.wasm.wasmPaths 可指向自有 CDN,减少 jsdelivr 依赖。
  • 安全:浏览器不使用 HF Token;私有模型用 后端签名 URL打包进应用资产
  • 版本锁定:生产锁定 @huggingface/transformers模型 revision,避免 main 漂移。

5. 调试

  • env.logLevel 控制日志;ORT 日志经 getOnnxLogSeverityLevel 映射,避免刷屏。
  • WebNN 动态 shape:若未配置 free_dimension_overrides,库会 warning(见 session.js)。

下一篇:版本演进、Issue/PR 线索与设计依据

MIT License.