Skip to content
目录

核心架构与分层

1. 产品定位

Transformers.js 把 Python transformers 的使用体验(尤其是 pipeline)搬到 JavaScript,运行时 不依赖 PyTorch/TF,而是:

  • 模型以 ONNX 形式分发(Hub 上常见 onnx/ 子目录);
  • 推理由 ONNX Runtime 执行,浏览器侧通过 WASM / WebGPU / WebNN 等 Execution Provider(EP)落地。

这样可以在 纯前端、Extension、Electron、Node 服务 等环境复用同一套 JS API,代价是 模型需预先转换 且受 ORT 算子与图优化约束。

2. 源码分层(从用户 API 到硬件)

由下往上可以理解为:

层次职责典型模块
环境探测与配置识别 Node/Browser/Worker/Deno,配置 Hub 地址、缓存、WASM 路径、日志env.jsapis
资源获取本地路径 vs HF Hub URL、缓存读写、进度回调utils/hub.jsutils/cache.js
模型文件解析按 dtype 后缀选 *_quantized.onnx、external data 分片utils/model-loader.jssession.js
ONNX 会话创建 InferenceSession、选择 EP、Web 端串行推理backends/onnx.js
模型类from_pretrained、多 session 组装、forward/generatemodels/modeling_utils.jsmodels/session_config.js
Pipeline任务默认模型、Tokenizer/Processor 与 Model 并行加载、后处理pipelines.jspipelines/*.js
统一导出对外 API 边界transformers.js

入口文件 transformers.js 明确声明:只导出该文件中的符号,便于控制公共 API 面积与 semver:

1:13:packages/transformers/src/transformers.js
/**
 * @file Entry point for the Transformers.js library. Only the exports from this file
 * are available to the end user, and are grouped as follows:
 *
 * 1. [Environment variables](./env)
 * 2. [Pipelines](./pipelines)
 * 3. [Models](./models)
 * 4. [Tokenizers](./tokenizers)
 * 5. [Processors](./processors)
 * 6. [Configs](./configs)
 *
 * @module transformers
 */

3. 与 Python 库「功能等价」的含义

  • API 形状对齐:pipeline(task)AutoModel.from_pretrained 等;
  • 实现路径不同:Python 多为 PyTorch 动态图;JS 侧是 静态 ONNX 图 + ORT
  • 创新点在于:把 tokenizer(@huggingface/tokenizers图像/音频预处理生成循环(logits 处理、停止条件) 全部用 JS 复刻,使 端到端任务可在浏览器完成。

4. Monorepo 与包边界

根目录 package.json 为 pnpm monorepo(private: true),核心 npm 包为 packages/transformers。分析推理链路时,应 packages/transformers/src 为准

5. 小结

理解 Transformers.js,关键是 三条线

  1. 数据平面:Hub → 缓存 → 带 dtype 后缀的 ONNX → optional external data;
  2. 计算平面:ORT 会话 + EP(wasm/webgpu/…)+ Web 端 全局推理链(见下一篇文档);
  3. 任务平面SUPPORTED_TASKS → Pipeline 类 → PreTrainedModel 子类与 generate

下一篇:Pipeline 与任务注册系统

MIT License.