通过模型蒸馏优化 AI 函数费用

本文档介绍了如何在 BigQuery 中使用 托管 AI 函数的优化模式。与标准的逐行 LLM 推理相比,您可以使用优化模式处理包含数千甚至数十亿行的大规模数据集,同时显著减少大语言模型 (LLM) 词元消耗和查询延迟时间。此优化仅适用于 AI.IFAI.CLASSIFY 函数。

为了更好地了解词元消耗情况,您可以在控制台中查看查询使用的词元数。Google Cloud 如需在运行查询之前估算此用量,请使用 AI.COUNT_TOKENS 函数

以下示例演示了如何使用 AI.IF 函数 和优化模式来识别有关自然灾害的新闻报道,并使用 text-embedding-005 作为嵌入模型:

SELECT
  title,
  body,
  AI.IF(
    ('The following news story is about a natural disaster: ', body),
    embeddings => AI.EMBED(body, endpoint => 'text-embedding-005', task_type => 'CLASSIFICATION').result,
    -- Optional, 'MINIMIZE_COST' is the default when embeddings are provided.
    optimization_mode => 'MINIMIZE_COST'
   ) AS is_natural_disaster
FROM
  `bigquery-public-data.bbc_news.fulltext`;

optimization_mode => 'MINIMIZE_COST' 实参可启用优化 模式。这是提供嵌入时的默认设置,因此您可以省略此实参。

在此示例中,嵌入是即时生成的。在实践中,我们 建议您实现嵌入,以便重复使用。

优化模式的工作原理

托管 AI 函数 AI.IFAI.CLASSIFY 通常会针对数据集中的每一行调用 远程 LLM。当您使用优化模式时,BigQuery 会在查询执行期间自动训练轻量级蒸馏模型。

该过程的工作原理如下:

启用优化模式时的 AI 函数工作流程

  • 抽样和标签:BigQuery 会选择一小部分 代表性样本数据,并调用 Gemini 来提供 标签。
  • 蒸馏模型训练:使用 LLM 标签和数据嵌入作为特征,及时训练本地蒸馏模型。
  • 质量检查:BigQuery 会根据 LLM 的结果评估蒸馏模型的 准确率。默认情况下,如果蒸馏模型未能达到所需的质量阈值,查询将失败,并显示一条错误消息,说明模型被舍弃的原因。如果模型的质量可接受,BigQuery 仍可能会针对特定行回退到远程 LLM,以保持质量一致性,或者针对缺少有效嵌入的行回退到远程 LLM。
  • 推理:蒸馏模型会处理大部分行, 从而显著减少 Gemini 调用次数。

限制

优化模式具有以下限制:

  • 最少行数:AI 函数的输入必须包含 大约 3,000 行,以确保有足够的数据用于模型训练。
  • 数据类型:对于引用多个列的提示,只有字符串 列支持优化。
  • 多标签分类:优化模式不支持使用 output_mode => 'multi'AI.CLASSIFY
  • 函数支持:只有 AI.IFAI.CLASSIFY 函数支持 优化模式;但是,如果将优化模式与 AI.CLASSIFY 搭配使用,当蒸馏模型质量不足时,查询可能会失败。
  • 错误率:优化模式不支持 max_error_ratio 实参。

准备工作

如需获得在 BigQuery 中运行托管 AI 函数所需的权限,请参阅为调用 Gemini Enterprise Agent Platform LLM 的生成式 AI 函数设置权限

选择嵌入模型

如需使用优化模式,您必须计算 嵌入数据的嵌入,并将其提供给 AI 函数。如需让输入列具有关联的嵌入,所有行都必须具有一致的嵌入维度,并且由同一嵌入模型生成。

为了获得最佳的费用-质量和可伸缩性,我们建议您使用嵌入模型(例如 text-embedding-005或 Gemini 嵌入 ,用于英语或多语言任务)计算 您数据的嵌入。对于多模态数据(文本和图片),请使用多模态嵌入模型,例如 multimodalembedding@001

生成嵌入

您可以使用由 BigQuery 管理的自主生成功能计算数据的嵌入,也可以手动创建嵌入列。 以下部分介绍了如何将这两种方法与 AI.CLASSIFYAI.IF 函数搭配使用。

自主嵌入生成

如果您使用 自主嵌入生成功能, BigQuery 会在调用 AI.IFAI.CLASSIFY 时自动使用嵌入。这是推荐的方法,但每张表只能有一个嵌入列。

以下示例使用 text-embedding-005 作为嵌入模型,创建一个具有自主生成的嵌入列的表,然后使用 AI.CLASSIFY 函数对数据进行分类:

-- Create a table with an autonomously generated embedding column
CREATE TABLE my_dataset.bbc_news (
  title STRING,
  body STRING,
  body_embedding STRUCT<result ARRAY<FLOAT64>, status STRING>
    GENERATED ALWAYS