API

运行管道 API

只要模型在我们的模型中心,您就可以直接使用 Transformer.js 的 pipeline API 执行推理。

Transformers.js 文档 提供了许多示例,您可以在 Firefox 中运行时稍微调整一下。

在下面的示例中,使用 summarization 任务执行文本摘要任务

const { createEngine } = ChromeUtils.importESModule("chrome://global/content/ml/EngineProcess.sys.mjs");
const options = {
  taskName: "summarization",
  modelId: "mozilla/text_summarization",
  modelRevision: "main"
};

const engine = await createEngine(options);

const text = 'The tower is 324 metres (1,063 ft) tall, about the same height as an 81-storey building, ' +
'and the tallest structure in Paris. Its base is square, measuring 125 metres (410 ft) on each side. ' +
'During its construction, the Eiffel Tower surpassed the Washington Monument to become the tallest ' +
'man-made structure in the world, a title it held for 41 years until the Chrysler Building in New ' +
'York City was finished in 1930. It was the first structure to reach a height of 300 metres. Due to ' +
'the addition of a broadcasting aerial at the top of the tower in 1957, it is now taller than the ' +
'Chrysler Building by 5.2 metres (17 ft). Excluding transmitters, the Eiffel Tower is the second ' +
'tallest free-standing structure in France after the Millau Viaduct.';

const request = { args:  [text], options: { max_new_tokens: 100 } };
const res = await engine.run(request);
console.log(res[0]["summary_text"]);

您可以使用浏览器控制台或工具箱来运行此示例。要启用浏览器控制台,请在 about:config 中切换以下选项:devtools.chrome.enabled。要访问完整的工具箱,请设置 devtools.debugger.remote-enabled 选项。我们建议使用工具箱来访问更多工具。当工具箱连接到浏览器时,您将在启动时收到安全警告。

运行此代码时,Firefox 将在位于 https://model-hub.mozilla.org 的 Mozilla 模型中心中查找模型,该中心包含一个精选的模型列表。

可用选项

传递给 createEngine 函数的选项将被验证并转换为 PipelineOptions 对象。

以下是可用的选项

  • taskName:管道配置的任务名称。

  • featureId:管道将使用的功能的标识符。

  • engineId:管道将使用的引擎的标识符。

  • timeoutMS:工作程序运行的最大时间(以毫秒为单位)(-1 表示永不过期)。

  • modelHub:要使用的模型中心,可以是 huggingfacemozilla。使用时,将忽略 modelHubRootUrlmodelHubUrlTemplate

  • modelHubRootUrl:托管模型的模型中心的根 URL。

  • modelHubUrlTemplate:用于构建模型完整 URL 的模板 URL。

  • modelId:管道将使用的特定模型的标识符。

  • modelRevision:管道将使用的特定模型的修订版本。

  • tokenizerId:与模型关联的分词器的标识符,用于预处理输入。

  • tokenizerRevision:与模型关联的分词器的修订版本,用于预处理输入。

  • processorId:模型所需的任何处理器的标识符,用于额外的输入处理。

  • processorRevision:模型所需的任何处理器的修订版本,用于额外的输入处理。

  • logLevel:工作程序中使用的日志级别

  • runtimeFilename:运行时 wasm 文件的名称。

taskNamemodelId 是必需的,其他选项是可选的,并在识别任务 ID 时使用从远程设置中提取的值自动填充。

要了解不同的推理任务,请参阅此 Hugging Face 文档:任务

featureId 用于唯一标识管道将使用的功能并在远程设置中存储相应的选项 - 请参阅 ml-inference-options 集合

engineId 用于管理引擎的生命周期。如果未提供,则默认为 default-engine。每次使用 createEngine 创建新引擎时,API 都会确保只有一个具有给定 ID 的引擎。如果现有引擎的选项没有不同,则会重用该实例。如果它们不同,则引擎将使用新选项重新初始化。这确保我们不会同时运行太多引擎,因为这需要大量资源。要确保您的引擎不会在其他地方被销毁或重用,请使用与您的组件匹配的唯一 ID 设置该值。

创建引擎时,如果推理进程尚不存在,则会创建一个推理进程,并为该引擎启动一个新的工作程序。推理进程是唯一的,并由所有引擎共享。

某些值也从首选项(在 about:config 中设置)中设置

  • browser.ml.logLevel:设置为“All”以查看所有日志,这些日志对调试很有用。

  • browser.ml.modelHubRootUrl:用于下载模型的模型中心根 URL

  • browser.ml.modelHubUrlTemplate:模型 URL 模板

  • browser.ml.modelCacheTimeout:工作程序超时时间(以毫秒为单位)。用于 timeoutMS 的默认值

  • browser.ml.modelCacheMaxSize:ML 模型缓存的最大磁盘大小(以 GiB 为单位)

URL 允许和拒绝列表

我们保留了一个名为 ml-model-allow-deny-list 的远程设置集合,其中包含允许或拒绝的 URL 前缀。

每个记录包含以下字段

  • urlPrefix:要允许或拒绝的 URL 前缀

  • filter:设置为 ALLOW 以允许,设置为 DENY 以拒绝

  • description:可选描述

当 API 即将获取文件时,其 URL 会在允许/拒绝列表中进行控制。

模式示例

每个 URL 都经过测试,需要包含在允许列表中,并且不能包含在拒绝列表中

要绕过此检查并允许 Firefox 下载任何文件以运行模型,您需要使用 MOZ_ALLOW_EXTERNAL_ML_HUB 环境变量。

如果您想添加新的中心、组织或特定模型,请通过 提交工单 告知我们。

使用 Hugging Face 模型中心

默认情况下,引擎将使用 Mozilla 模型中心。您需要将 huggingface 作为 modelHub 传递。

然后,推理引擎将在 Hugging Face 模型中心中查找模型。如果 URL 不被允许(请参阅上一节),并且您仍想尝试使用该模型,请使用 MOZ_ALLOW_EXTERNAL_ML_HUB

要针对 Hugging Face 模型运行,请访问 此页面 并在左上角选择 tasks。您可以选择一个任务,然后选择一个模型。

例如,与我们的推理引擎兼容的 summarization 任务的模型列在 此处

假设您要选择 Xenova/distilbart-cnn-6-6 模型。您只需在调用我们的 createEngine 管道时使用 ID 即可

const { createEngine } = ChromeUtils.importESModule("chrome://global/content/ml/EngineProcess.sys.mjs");

const options = {
  taskName: "summarization",
  modelId: "Xenova/distilbart-cnn-6-6",
  modelHub: "huggingface"
};

const engine = await createEngine(options);

const text = 'The tower is 324 metres (1,063 ft) tall, about the same height as an 81-storey building, ' +
'and the tallest structure in Paris. Its base is square, measuring 125 metres (410 ft) on each side. ' +
'During its construction, the Eiffel Tower surpassed the Washington Monument to become the tallest ' +
'man-made structure in the world, a title it held for 41 years until the Chrysler Building in New ' +
'York City was finished in 1930. It was the first structure to reach a height of 300 metres. Due to ' +
'the addition of a broadcasting aerial at the top of the tower in 1957, it is now taller than the ' +
'Chrysler Building by 5.2 metres (17 ft). Excluding transmitters, the Eiffel Tower is the second ' +
'tallest free-standing structure in France after the Millau Viaduct.';

const request = { args:  [text], options: { max_new_tokens: 100 } };
const res = await engine.run(request);
console.log(res[0]["summary_text"]);

运行内部 API

一些推理任务在引擎中执行更复杂的操作,例如图像处理。对于这些任务,您可以使用内部 API 来运行推理。这些任务以 moz 为前缀。

在下面的示例中,使用 moz-image-to-text 任务将图像转换为文本。

const { createEngine } = ChromeUtils.importESModule("chrome://global/content/ml/EngineProcess.sys.mjs");

// options needed for the task
const options = {taskName: "moz-image-to-text" };

// We create the engine object, using the options
const engine = await createEngine(options);

// Preparing a request
const request = {url: "https://hugging-face.cn/datasets/mishig/sample_images/resolve/main/football-match.jpg"};

// At this point we are ready to do some inference.
const res = await engine.run(request);

// The result is a string containing the text extracted from the image
console.log(res);

机器学习引擎支持以下内部任务

imageToText(request, model, tokenizer, processor, _config)

使用机器学习模型将图像转换为文本。

参数:
  • request (object) – 包含图像数据的请求对象。

  • request.url (string) – 要处理的图像的 URL。如果未提供 url,则使用其他字段。

  • request.data (ArrayBuffer) – 要处理的原始图像数据。如果提供了 url,则忽略。

  • request.width (number) – 图像宽度。如果提供了 url,则忽略。

  • request.height (number) – 图像高度。如果提供了 url,则忽略。

  • request.channels (number) – 图像通道。可以是 1、2、3 或 4。默认为 4。如果提供了 url,则忽略。

  • model (object) – 用于推理的模型。

  • tokenizer (object) – 用于解码的分词器。

  • processor (object) – 用于准备图像数据的处理器。

  • _config (object) – 配置

返回值:

Promise.<object> – 包含已处理文本的结果对象。