借助 LLM Inference API,您可以完整运行大型语言模型 (LLM) 可用于执行各种任务,例如 生成文本、检索自然语言形式的信息,以及 汇总文档。任务为多个 文本到文本大语言模型,以便在大语言模型中应用最新的 生成式 AI 模型。
<ph type="x-smartling-placeholder"></ph> 试试看!
该任务支持 Gemma 2B 和 7B, 一系列先进的轻量级开放模型, 用于打造 Gemini 的研究和技术 模型。它还支持以下外部模型: Phi-2、 Falcon-RW-1B 和 StableLM-3B。
除了原生支持的模型外,用户还可以将其他模型 使用 Google 的 AI Edge (包括 映射 PyTorch 模型)。 这样,用户就可以将映射的模型导出到多重签名 TensorFlow Lite 模型,这些模型与分词器参数捆绑在一起, 创建一个任务包
开始使用
使用此任务时,请先按照以下某个实施指南操作 目标平台这些针对具体平台的指南将向您介绍 该任务的实现,并提供了使用可用模型和 推荐的配置选项:
任务详情
本部分介绍功能、输入、输出和配置 此任务的选项。
功能
LLM Inference API 包含以下主要功能:
- 文本到文本生成 - 根据输入的文本提示生成文本。
- LLM 选择 - 应用多个模型,根据您的需求量身打造应用 应用场景。您还可以重新训练自定义权重, 模型。
- LoRA 支持 - 使用 LoRA 模型扩展和自定义 LLM 功能 方法是利用所有数据集进行训练,或采用准备好的预构建 LoRA 开源社区中的模型(仅限原生模型)。
任务输入 | 任务输出 |
---|---|
LLM Inference API 接受以下输入: <ph type="x-smartling-placeholder">
|
LLM Inference API 输出以下结果: <ph type="x-smartling-placeholder">
|
配置选项
此任务具有以下配置选项:
选项名称 | 说明 | 值范围 | 默认值 |
---|---|---|---|
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-2b-it-cpu-int4: Gemma 2B 4 位型号,具有 CPU 兼容性。
- gemma-2b-it-cpu-int8: Gemma 2B 8 位型号,具有 CPU 兼容性。
- gemma-2b-it-gpu-int4: Gemma 2B 4 位模型,兼容 GPU。
- gemma-2b-it-gpu-int8: Gemma 2B 8 位模型,兼容 GPU。
您还可以对模型进行调参和添加新权重,然后再将其添加到应用。对于 如需详细了解如何调整和自定义 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 型号有一个变体:
- gemma-1.1-7b-it-gpu-int8: 兼容 GPU 的 Gemma 7B 8 位模型。
如果您从 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.safetensors 或 pytorch.bin 文件的路径。请注意,模型安全张量格式有时会拆分为多个文件,例如model-00001-of-00003.safetensors 、model-00001-of-00003.safetensors 。您可以指定文件格式,例如 model*.safetensors 。 |
路径 |
ckpt_format |
模型文件格式。 | {"safetensors", "pytorch"} |
model_type |
要转换的 LLM。 | {"PHI_2", "FALCON_RW_1B", "STABLELM_4E1T_3B", "GEMMA_2B"} |
backend |
用于运行模型的处理器(代理)。 | {"cpu", "gpu"} |
output_dir |
托管每层权重文件的输出目录的路径。 | 路径 |
output_tflite_file |
输出文件的路径。例如,“model_cpu.bin”或“model_gpu.bin”。此文件仅与 LLM Inference API 兼容,不能用作常规“tflite”文件。 | 路径 |
vocab_model_file |
用于存储 tokenizer.json 和
tokenizer_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()
方法。