Transformers.js v4 发布说明 / 新功能

Hugging Face 已发布 Transformers.js v4,引入了全新用 C++ 重写的 WebGPU 运行时,使硬件加速的 AI 模型能够在浏览器、Node、Bun 和 Deno 上本地运行。此更新显著提升了性能,扩展了模型架构支持,并对库进行模块化,以实现更好的生产可扩展性。

WebGPU 运行时与性能提升

Transformers.js v4 采用了与 ONNX Runtime 团队合作重新用 C++ 编写的全新 WebGPU 运行时。该运行时使同一代码库能够在多种 JavaScript 环境中运行,包括桌面应用以及 Node、Bun、Deno 等服务器端运行时。

为在资源受限的环境中最大化性能,Hugging Face 通过专用的 ONNX Runtime Contrib Operators 将模型逐操作重新实现。关键优化包括:

  • 专用算子: 为大语言模型实现了 com.microsoft.GroupQueryAttentioncom.microsoft.MatMulNBitscom.microsoft.QMoE
  • BERT 加速: 使用 com.microsoft.MultiHeadAttention 算子,使基于 BERT 的嵌入模型提升约 4 倍。

扩展的模型支持与架构

全新的导出策略以及对 ONNX Runtime 算子的扩展支持,使 Transformers.js v4 能够支持更广泛的模型和高级架构模式,包括:

  • 支持的架构: Mamba(状态空间模型)、Multi-head Latent Attention(MLA)和 Mixture of Experts(MoE)。
  • 新模型: 支持 GPT-OSS、Chatterbox、GraniteMoeHybrid、LFM2-MoE、HunYuanDenseV1、Apertus、Olmo3、FalconH1 和 Youtu-LLM。
  • 大模型能力: 该库现已支持超过 8B 参数的模型;例如,GPT-OSS 20B(q4f16)在 M4 Pro Max 上实现约每秒 60 token 的推理速度。

库基础设施与构建系统

Transformers.js v4 进行了一次重要的结构性重构,以提升可维护性和开发者体验:

  • 构建系统迁移: 从 Webpack 迁移到 esbuild,将构建时间从 2 秒降至 200 毫秒(提升 10 倍),并将包体积平均缩小约 10%。transformers.web.js 的默认导出体积现在小了 53%。
  • Monorepo 转型: 项目现在使用 pnpm workspaces,能够发布依赖 @huggingface/transformers 核心的更小子包。
  • 代码重构:models.js 拆分为更小、更专注的模块,取代原先 8,000 行的单文件,提升可读性并简化新增模型的流程。
  • 示例仓库: 示例项目已迁移至专用的 examples repository

新的生产就绪特性

为支持稳健的应用部署,新增了多项 API 与设置:

ModelRegistry API

ModelRegistry 在加载前提供对 pipeline 资产的显式可视化。关键功能包括:

  • 通过 get_pipeline_files 列出所需文件。
  • 使用 get_file_metadata 检查文件元数据并计算下载大小。
  • 使用 is_pipeline_cached 检查缓存状态,使用 clear_pipeline_cache 清除制品。
  • 通过 get_available_dtypes 查询可用的精度类型。
  • 增强的 progress_callback 现在包含 progress_total 事件,用于端到端加载进度。

环境与日志控制

  • WASM 缓存: env.useWasmCache 允许缓存 WASM 运行时文件,以实现离线功能。
  • 自定义 Fetch: env.fetch 支持自定义 fetch 实现,用于认证模型访问或自定义请求头。
  • 日志: ONNX Runtime WebGPU 警告默认被隐藏,开发者现在可以使用 env.logLevel 设置显式的详细程度(例如 LogLevel.DEBUGLogLevel.INFOLogLevel.WARNINGLogLevel.ERRORLogLevel.NONE)。

独立的 Tokenizers.js 库

Hugging Face 已将分词逻辑抽离为独立、轻量的库:@huggingface/tokenizers。该独立库体积为 8.8kB(gzip 后),零依赖,完全类型安全,并可在浏览器和服务器端运行时使用。

Sources