LLM 推断指南

<ph type="x-smartling-placeholder">

借助 LLM Inference API,您可以完整运行大型语言模型 (LLM) 可用于执行各种任务,例如 生成文本、检索自然语言形式的信息,以及 汇总文档。任务为多个 文本到文本大语言模型,以便在大语言模型中应用最新的 生成式 AI 模型。

<ph type="x-smartling-placeholder"></ph> 试试看!

该任务支持 Gemma 2B 和 7B, 一系列先进的轻量级开放模型, 用于打造 Gemini 的研究和技术 模型。它还支持以下外部模型: Phi-2Falcon-RW-1BStableLM-3B

除了原生支持的模型外,用户还可以将其他模型 使用 Google 的 AI Edge (包括 映射 PyTorch 模型)。 这样,用户就可以将映射的模型导出到多重签名 TensorFlow Lite 模型,这些模型与分词器参数捆绑在一起, 创建一个任务包

开始使用

使用此任务时,请先按照以下某个实施指南操作 目标平台这些针对具体平台的指南将向您介绍 该任务的实现,并提供了使用可用模型和 推荐的配置选项:

任务详情

本部分介绍功能、输入、输出和配置 此任务的选项。

功能

LLM Inference API 包含以下主要功能:

  1. 文本到文本生成 - 根据输入的文本提示生成文本。
  2. LLM 选择 - 应用多个模型,根据您的需求量身打造应用 应用场景。您还可以重新训练自定义权重, 模型。
  3. LoRA 支持 - 使用 LoRA 模型扩展和自定义 LLM 功能 方法是利用所有数据集进行训练,或采用准备好的预构建 LoRA 开源社区中的模型(仅限原生模型)。
任务输入 任务输出
LLM Inference API 接受以下输入:
<ph type="x-smartling-placeholder">
    </ph>
  • 文本提示(例如问题、电子邮件主题、要总结的文档)
LLM Inference API 输出以下结果:
<ph type="x-smartling-placeholder">
    </ph>
  • 根据输入提示生成的文本(例如问题的答案、电子邮件草稿、文档摘要)

配置选项

此任务具有以下配置选项:

选项名称 说明 值范围 默认值
modelPath 指向模型存储在项目目录中的路径。 路径 不适用
maxTokens 模型处理的词元(输入词元 + 输出词元)数量上限。 整数 512
topK 模型在生成过程的每个步骤中考虑的词元数量。 将预测范围限制为前 k 个概率最高的词元。 整数 40
temperature 生成期间引入的随机性程度。较高 温度可以使生成的文本更具创造性,而 较低的温度会产生更具可预测性的生成。 浮点数 0.8
randomSeed 文本生成期间使用的随机种子。 整数 0
loraPath 设备本地本地 LoRA 模型的绝对路径。注意:这仅与 GPU 模型兼容。 路径 不适用
resultListener 设置结果监听器以异步接收结果。 仅在使用异步生成方法时适用。 不适用 不适用
errorListener 设置一个可选的错误监听器。 不适用 不适用

模型

LLM Inference API 包含对可分割的大文本转换的内置支持 这些语言模型经过优化,可在浏览器和移动设备上运行。这些 轻量级模型,以便完全在设备端运行推断。

在初始化 LLM Inference API 之前,请下载一个受支持的模型并 请将该文件存储在项目目录中。

Gemma 2B

Gemma 2B 是 基于相同研究成果构建的轻量级、先进的开放模型, Gemini 模型所使用的技术。通过 包含 2B 参数和开放权重。此模型非常适合处理 各种文本生成任务,包括问题解答、摘要 和推理。

<ph type="x-smartling-placeholder"></ph> 下载 Gemma 2B

Gemma 2B 模型有四种变体:

您还可以对模型进行调参和添加新权重,然后再将其添加到应用。对于 如需详细了解如何调整和自定义 Gemma,请参阅调整 Gemma。 从Kaggle Models中下载 Gemma 后 模型已采用适合与 MediaPipe 搭配使用的格式。

如果您从 Hugging 下载 Gemma 2B 人脸,您必须转换 将模型转换成适用于 MediaPipe 的格式。LLM Inference API 要求下载并转换以下文件:

  • model-00001-of-00002.safetensors
  • model-00002-of-00002.safetensors
  • tokenizer.json
  • tokenizer_config.json

Gemma 7B

<ph type="x-smartling-placeholder">

Gemma 7B 是一个更大的 Gemma 模型,拥有 70 亿 参数和开放权重。该模型对多种文本的处理能力更强 包括问题解答、摘要和推理。 Gemma 7B 仅适用于网站。

<ph type="x-smartling-placeholder"></ph> 下载 Gemma 7B

Gemma 7B 型号有一个变体:

如果您从 Hugging Face 下载 Gemma 7B, 您必须将模型转换为适用于 MediaPipe 的格式。通过 LLM Inference API 需要下载并转换以下文件:

  • model-00001-of-00004.safetensors
  • model-00002-of-00004.safetensors
  • model-00003-of-00004.safetensors
  • model-00004-of-00004.safetensors
  • tokenizer.json
  • tokenizer_config.json

Falcon 1B

Falcon-1B 是一个使用 10 亿参数的纯因果解码器模型,使用 3500 亿的训练 词元 RefinedWeb

<ph type="x-smartling-placeholder"></ph> 下载 Falcon 1B

LLM Inference API 需要下载和存储以下文件 本地:

  • tokenizer.json
  • tokenizer_config.json
  • pytorch_model.bin

下载 Falcon 模型文件后,就可以将该模型转换为 MediaPipe 格式。请按照将模型转换为 MediaPipe 中的步骤操作 格式

StableLM 3B

StableLM-3B 是一个具有 30 亿参数的纯解码器语言模型, 1 万亿个词元的多元化英语和代码数据集,持续 4 个周期。

<ph type="x-smartling-placeholder"></ph> 下载 StableLM 3B

LLM Inference API 需要下载和存储以下文件 本地:

  • tokenizer.json
  • tokenizer_config.json
  • model.safetensors

下载 StableLM 模型文件后,模型就可以进行转换了 转换为 MediaPipe 格式。请按照将模型转换为 MediaPipe 中的步骤操作 格式

Phi-2

Phi-2 是一个具有 27 亿参数的 Transformer 模型。该模型是使用多种多样的 NLP 合成文本和过滤的网站。该模型最适合用于提示 回答问题、聊天和代码格式。

<ph type="x-smartling-placeholder"></ph> 下载 Phi-2

LLM Inference API 需要下载和存储以下文件 本地:

  • tokenizer.json
  • tokenizer_config.json
  • model-00001-of-00002.safetensors
  • model-00002-of-00002.safetensors

下载 Phi-2 模型文件后,模型就可以转换为 MediaPipe 格式。请按照将模型转换为 MediaPipe 中的步骤操作 格式

AI Edge 导出的模型

AI Edge 是 Google 推出的一款产品,可让您转换用户映射的模型 构建成多签名 TensorFlow Lite 模型。有关映射和 请访问 AI Edge Torch GitHub 页面

将模型导出为 TFLite 格式后,就可以 已转换为 MediaPipe 格式。有关详情,请参阅 将模型转换为 MediaPipe 格式

将模型转换为 MediaPipe 格式

原生模型转换

如果您使用的是外部 LLM(Phi-2、Falcon 或 StableLM)或非 Kaggle Gemma 版本,请使用我们的转换脚本来设置 与 MediaPipe 兼容。

模型转换过程需要 MediaPipe PyPI 软件包。转化 脚本在 0.10.11之后的所有 MediaPipe 软件包中都可用。

使用以下命令安装并导入依赖项:

$ python3 -m pip install mediapipe

使用 genai.converter 库转换模型:

import mediapipe as mp
from mediapipe.tasks.python.genai import converter

config = converter.ConversionConfig(
  input_ckpt=INPUT_CKPT,
  ckpt_format=CKPT_FORMAT,
  model_type=MODEL_TYPE,
  backend=BACKEND,
  output_dir=OUTPUT_DIR,
  combine_file_only=False,
  vocab_model_file=VOCAB_MODEL_FILE,
  output_tflite_file=OUTPUT_TFLITE_FILE,
)

converter.convert_checkpoint(config)

如需转换 LoRA 模型,ConversionConfig 应指定基本模型 以及其他 LoRA 选项请注意,由于 API 支持通过 GPU 进行 LoRA 推理,后端必须设置为 'gpu'

import mediapipe as mp
from mediapipe.tasks.python.genai import converter

config = converter.ConversionConfig(
  # Other params related to base model
  ...
  # Must use gpu backend for LoRA conversion
  backend='gpu',
  # LoRA related params
  lora_ckpt=LORA_CKPT,
  lora_rank=LORA_RANK,
  lora_output_tflite_file=LORA_OUTPUT_TFLITE_FILE,
)

converter.convert_checkpoint(config)

转换器会输出两个 TFLite Flatbuffer 文件,一个用于基础模型 另一个用于 LoRA 模型。

参数 说明 接受的值
input_ckpt model.safetensorspytorch.bin 文件的路径。请注意,模型安全张量格式有时会拆分为多个文件,例如model-00001-of-00003.safetensorsmodel-00001-of-00003.safetensors。您可以指定文件格式,例如 model*.safetensors 路径
ckpt_format 模型文件格式。 {"safetensors", "pytorch"}
model_type 要转换的 LLM。 {&quot;PHI_2&quot;, &quot;FALCON_RW_1B&quot;, &quot;STABLELM_4E1T_3B&quot;, &quot;GEMMA_2B&quot;}
backend 用于运行模型的处理器(代理)。 {&quot;cpu&quot;, &quot;gpu&quot;}
output_dir 托管每层权重文件的输出目录的路径。 路径
output_tflite_file 输出文件的路径。例如,“model_cpu.bin”或“model_gpu.bin”。此文件仅与 LLM Inference API 兼容,不能用作常规“tflite”文件。 路径
vocab_model_file 用于存储 tokenizer.jsontokenizer_config.json 个文件。对于 Gemma,请指向单个 tokenizer.model 文件。 路径
lora_ckpt Safetensors 文件的 LoRA ckpt 的路径,该路径用于存储 LoRA 适配器权重。 路径
lora_rank 表示 LoRA ckpt 排名的整数。必需,才能转换 lora 权重。如果未提供,转换器会假定没有 LoRA 权重。注意:只有 GPU 后端支持 LoRA。 整数
lora_output_tflite_file LoRA 权重的输出 tflite 文件名。 路径

AI Edge 模型转换

如果您正在使用通过 AI Edge 映射到 TFLite 模型的 LLM,请使用我们的 捆绑脚本来创建任务包。捆绑流程会将 映射的模型与其他元数据(例如,分词器参数) 来运行端到端推理。

模型捆绑过程需要 MediaPipe PyPI 软件包。转化 脚本在 0.10.14之后的所有 MediaPipe 软件包中都可用。

使用以下命令安装并导入依赖项:

$ python3 -m pip install mediapipe

使用 genai.bundler 库捆绑模型:

import mediapipe as mp
from mediapipe.tasks.python.genai import bundler

config = bundler.BundleConfig(
    tflite_model=TFLITE_MODEL,
    tokenizer_model=TOKENIZER_MODEL,
    start_token=START_TOKEN,
    stop_tokens=STOP_TOKENS,
    output_filename=OUTPUT_FILENAME,
    enable_bytes_to_unicode_mapping=ENABLE_BYTES_TO_UNICODE_MAPPING,
)
bundler.create_bundle(config)
参数 说明 接受的值
tflite_model AI Edge 导出的 TFLite 模型的路径。 路径
tokenizer_model SentencePiece 标记生成器模型的路径。 路径
start_token 模型专用开始令牌。起始标记必须出现在 提供的标记生成器模型。 STRING
stop_tokens 特定于模型的停止令牌。停止令牌必须出现在 提供的标记生成器模型。 列表 [STRING]
output_filename 输出任务软件包文件的名称。 路径

LoRA 自定义

可配置 Mediapipe LLM 推理 API 以支持低排名自适应 (LoRA) 大型语言模型。利用经过微调的 LoRA 模型,开发者可以 通过经济有效的训练过程来自定义 LLM 的行为。

LLM Inference API 的 LoRA 支持适用于 Gemma-2B 和 Phi-2 模型, GPU 后端,LoRA 权重仅适用于注意力层。这个 初始实现可用作未来开发中的实验性 API 计划在不久的将来推出 更新。

准备 LoRA 模型

按照 HuggingFace 说明,使用你支持的模型类型(Gemma-2B 或 Phi-2)使用自己的数据集训练经过微调的 LoRA 模型。Gemma-2B 和 Phi-2 模型都可以以安全张量格式在 HuggingFace 上获得。由于 LLM Inference API 仅在注意力层上支持 LoRA,因此请在创建 LoraConfig 时仅指定注意力层,如下所示:

# For Gemma-2B
from peft import LoraConfig
config = LoraConfig(
    r=LORA_RANK,
    target_modules=["q_proj", "v_proj", "k_proj", "o_proj"],
)

# For Phi-2
config = LoraConfig(
    r=LORA_RANK,
    target_modules=["q_proj", "v_proj", "k_proj", "dense"],
)

为了进行测试,HuggingFace 上提供了可公开访问且经过微调且适合 LLM Inference API 的 LoRA 模型。例如,monsterapi/gemma-2b-lora-maths-orca-200k 对应 Gemma-2B,lole25/phi-2-sft-ultrachat-lora 对应 Phi-2。

在准备好的数据集上进行训练并保存模型后,您将获得一个 adapter_model.safetensors 文件,其中包含经过微调的 LoRA 模型权重。Safetensors 文件是在模型转换中使用的 LoRA 检查点。

接下来,您需要使用 MediaPipe Python 软件包将模型权重转换为 TensorFlow Lite Flatbuffer。ConversionConfig 应指定基本模型选项以及其他 LoRA 选项。请注意,由于 API 仅支持使用 GPU 进行 LoRA 推理,因此后端必须设置为 'gpu'

import mediapipe as mp
from mediapipe.tasks.python.genai import converter

config = converter.ConversionConfig(
  # Other params related to base model
  ...
  # Must use gpu backend for LoRA conversion
  backend='gpu',
  # LoRA related params
  lora_ckpt=LORA_CKPT,
  lora_rank=LORA_RANK,
  lora_output_tflite_file=LORA_OUTPUT_TFLITE_FILE,
)

converter.convert_checkpoint(config)

转换器会输出两个 TFLite Flatbuffer 文件,一个用于基础模型 另一个用于 LoRA 模型。

LoRA 模型推断

Web、Android 和 iOS LLM Inference API 已更新,以支持 LoRA 模型推断。Web 支持动态 LoRA,它可以在运行时切换不同的 LoRA 模型。Android 和 iOS 支持静态 LoRA,它在任务的生命周期内使用相同的 LoRA 权重。

Android 在初始化期间支持静态 LoRA。为了加载 LoRA 模型,用户需要指定 LoRA 模型路径以及基础 LLM。

// Set the configuration options for the LLM Inference task
val options = LlmInferenceOptions.builder()
        .setModelPath('<path to base model>')
        .setMaxTokens(1000)
        .setTopK(40)
        .setTemperature(0.8)
        .setRandomSeed(101)
        .setLoraPath('<path to LoRA model>')
        .build()

// Create an instance of the LLM Inference task
llmInference = LlmInference.createFromOptions(context, options)

如需使用 LoRA 运行 LLM 推断,请使用与基本模型相同的 generateResponse()generateResponseAsync() 方法。