AboutPosts

Transformers.js 的基本使用

Zhanghao,5 min read

使用背景

目前 WebApp 使用 AI 模型一般是调用后台接口(模型的云服务或者在自己的服务器上使用模型),这样的方案存在服务器成本、网络稳定性、用户隐私等问题。所以,在这种情况下就可以使用 Transformers.js 在本地进行 AI 推理。

什么是 Transformers.js

Transformers.js 是由 Hugging Face 开发的一个 JavaScript 库,旨在让用户能够直接在浏览器中运行最先进的机器学习模型,而无需服务器支持。该库与 Hugging Face 的 Python 版 transformers 库功能等效,支持多种预训练模型,涵盖自然语言处理、计算机视觉和语音识别等任务。

Transformers.js 使用 ONNX Runtime 运行模型,支持在 CPU 和 WebGPU 上执行,提供了高效的模型转换和量化工具,方便用户将 PyTorch、TensorFlow 或 JAX 模型转换为 ONNX 格式并在浏览器中运行。

功能列表

Transformers.js 在 v3 版本可以利用 WebGPU 进行高性能推理,速度相比 wasm 方案有了极大的提升。https://huggingface.co/blog/transformersjs-v3

使用

线上 DEMO:https://transformers-js-basic-use.vercel.app/

快速安装

# npm npm i @huggingface/transformers # pnpm pnpm add @huggingface/transformers

接口使用

import { pipeline } from "@huggingface/transformers"; const generator = await pipeline('summarization', 'Xenova/distilbart-cnn-6-6', config); const text = 'xxx'; const output = await generator(text, { max_new_tokens: 100, }); // [{ summary_text: 'xxx' }]

使用 pipeline 接口(pipeline 简化了模型的下载、加载和使用)加载模型,第一个参数传递的是 task 类型,这里使用的是 ‘summarization’,第二个参数是模型名字(如果忽略的话会使用默认模型),第三个参数是配置信息(包含进度、缓存、设置等),这里主要了解下 config.progress_callbackconfig.deviceconfig.dtype 的使用。

如果使用的模型没有在内置的 pipeline 中,那么需要自己手动处理模型的逻辑

// 使用 pipline await pipeline("summarization", "Xenova/distilbart-cnn-6-6"); const summary = await generatorRef.current(input); const output = summary[0].summary_text; // 不适用 pipline const model = await AutoModelForSeq2SeqLM.from_pretrained("Xenova/distilbart-cnn-6-6"); const tokenizer = await AutoTokenizer.from_pretrained("Xenova/distilbart-cnn-6-6"); const inputs = await tokenizerRef.current([input], { truncation: true, return_tensors: true, }); const modelOutputs = await model .generate(inputs); const summary = await tokenizer .batch_decode(modelOutputs, { skip_special_tokens: true, }); const output = summary[0];

参考

  1. https://www.aisharenet.com/transformersjs/
  2. https://blog.csdn.net/shebao3333/article/details/134132190
  3. https://blog.csdn.net/m0_38015699/article/details/143933322
Twitter · GitHub · Email
© Zhang Hao.