LLM 推論指南

LLM 推論 API 可讓您在裝置上完全執行大型語言模型 (LLM),用於執行各種工作,例如產生文字、以自然語言形式擷取資訊,以及摘要文件。這項工作會為多個文字轉文字大型語言模型提供內建支援,讓您將最新的裝置端生成式 AI 模型套用至應用程式和產品。

試試看吧!

此工作可支援以下 Gemma 變體:Gemma-2 2B、Gemma 2B 和 Gemma 7B。Gemma 是一系列先進的輕量級開放式模型,採用與建立 Gemini 模型時相同的研究成果和技術。它也支援以下外部模型:Phi-2Falcon-RW-1BStableLM-3B

除了支援的模型之外,您還可以使用 Google 的 AI Edge Torch,將 PyTorch 模型匯出至多簽名 LiteRT (tflite) 模型,這些模型會與剖析器參數一起套用,以便建立與 LLM 推論 API 相容的工作套件。使用 AI Edge Torch 轉換的模型只能在 CPU 後端執行,因此僅限於 Android 和 iOS。

開始使用

請按照下列目標平台的導入指南操作,開始使用此工作。這些平台專屬指南會逐步引導您完成這項工作的基本實作,並提供使用可用模型的程式碼範例,以及建議的設定選項:

任務詳細資料

本節說明此工作的功能、輸入內容、輸出內容和設定選項。

功能

LLM 推論 API 包含下列主要功能:

  1. 文字轉文字生成:根據輸入的文字提示生成文字。
  2. LLM 選取:套用多個模型,針對特定用途調整應用程式。您也可以重新訓練模型,並套用自訂權重。
  3. LoRA 支援:使用 LoRA 模型擴充及自訂 LLM 功能,方法是訓練所有資料集,或從開放原始碼社群取得已準備好的預先建構 LoRA 模型 (與使用 AI Edge Torch 生成式 API 轉換的模型不相容)。
工作輸入內容 任務輸出
LLM Inference API 可接受下列輸入內容:
  • 文字提示 (例如問題、電子郵件主旨、要摘要的文件)
LLM Inference API 會輸出以下結果:
  • 根據輸入提示產生的文字 (例如問題的答案、電子郵件草稿、文件摘要)

設定選項

此工作提供下列設定選項:

選項名稱 說明 值範圍 預設值
modelPath 模型在專案目錄中的儲存路徑。 路徑 不適用
maxTokens 模型處理的符記數量上限 (輸入符記 + 輸出符記)。 整數 512
topK 模型在產生過程的每個步驟中會考慮的符記數量。將預測結果限制在機率最高的符記前 k 個。 整數 40
temperature 產生期間引入的隨機程度。溫度越高,產生的文字就越有創意;溫度越低,產生的文字就越容易預測。 浮點值 0.8
randomSeed 文字產生期間使用的隨機種子。 整數 0
loraPath 裝置本機上 LoRA 模型的絕對路徑。注意:這項功能僅適用於 GPU 型號。 路徑 不適用
resultListener 將結果事件監聽器設為以非同步方式接收結果。僅適用於使用非同步產生方法時。 不適用 不適用
errorListener 設定選用的錯誤事件監聽器。 不適用 不適用

模型

LLM 推論 API 支援許多文字轉文字大型語言模型,包括針對在瀏覽器和行動裝置上執行而最佳化的多個模型內建支援功能。這些輕量模型可用於在裝置上完全執行推論。

在初始化 LLM Inference API 之前,請下載模型並將檔案儲存在專案目錄中。您可以使用預先轉換的模型,或將模型轉換為 MediaPipe 相容的格式。

LLM 推論 API 支援兩種類型的模型,其中部分模型需要轉換。請使用下表找出模型的必要步驟方法。

模型 轉換方法 相容的平台 檔案類型
支援的型號 Gemma 2B、Gemma 7B、Gemma-2 2B、Phi-2、StableLM、Falcon MediaPipe Android、iOS、網頁 .bin
其他 PyTorch 模型 所有 PyTorch 大型語言模型 AI Edge Torch 生成式程式庫 Android、iOS 裝置 .task

我們在 Kaggle 上託管 Gemma 2B、Gemma 7B 和 Gemma-2 2B 的轉換後 .bin 檔案。您可以使用 LLM 推論 API 直接部署這些模型。如要瞭解如何轉換其他模型,請參閱「模型轉換」一節。

Gemma-2 2B

Gemma-2 2B 是 Gemma 系列的最新模型,這一系列先進的輕量級開放式模型採用與建立 Gemini 模型時相同的研究成果和技術打造而成。模型包含 2B 參數和開放權重。Gemma-2 2B 以其同類型模型中一流的推理技能而聞名。

下載 Gemma-2 2B

Gemma-2 2B 型號提供下列變化版本:

您也可以在將模型加入應用程式前,先調整模型並新增新的權重。如要進一步瞭解如何調整及自訂 Gemma,請參閱「調整 Gemma」。從 Kaggle 模型下載 Gemma-2 2B 後,模型就會以適當格式提供,可用於 MediaPipe 工作。

Gemma 2B

Gemma 2B 是一系列先進的輕量級開放式模型,採用與建立 Gemini 模型時相同的研究成果和技術打造而成。模型包含 2B 參數和開放權重。這個模型非常適合各種文字生成工作,包括回答問題、摘要和推理。

下載 Gemma 2B

Gemma 2B 型號提供下列變化版本:

您也可以在將模型加入應用程式前,先調整模型並新增新的權重。如要進一步瞭解如何調整及自訂 Gemma,請參閱「調整 Gemma」。從 Kaggle 模型下載 Gemma 2B 後,模型就會採用適當格式,可用於 MediaPipe 工作。

Gemma 7B

Gemma 7B 是較大的 Gemma 模型,包含 7B 個參數和開放權重。這個模型在各種文字生成工作 (包括回答問題、摘要和推理) 方面更為強大。Gemma 7B 僅支援網頁。

下載 Gemma 7B

Gemma 7B 型號有一個變化版本:

Kaggle 模型下載 Gemma 7B 後,模型就會以適合搭配 MediaPipe 使用的格式提供。

Falcon 1B

Falcon-1B 是 10 億個參數的因果解碼器專屬模型,訓練資料是 RefinedWeb 的 3500 億個符記。

下載 Falcon 1B

LLM Inference API 需要下載並在本機儲存下列檔案:

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

下載 Falcon 模型檔案後,即可使用轉換指令碼將模型轉換為 MediaPipe 格式。請按照「支援模式的轉換指令碼」一節中的步驟操作。

StableLM 3B

StableLM-3B 是一種 30 億參數的解碼器專用語言模型,已在 1 兆個不同英文和程式碼資料集的符記上預先訓練 4 個迴圈。

下載 StableLM 3B

LLM Inference API 需要下載並在本機儲存下列檔案:

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

下載 StableLM 模型檔案後,即可使用轉換指令碼將模型轉換為 MediaPipe 格式。請按照「支援模式的轉換指令碼」一節中的步驟操作。

Phi-2

Phi-2 是含有 27 億個參數的 Transformer 模型。這項模型是使用各種 NLP 合成文字和篩選過的網站訓練而成。這個模型最適合使用問答、即時通訊和程式碼格式的提示。

下載 Phi-2

LLM Inference API 需要下載並在本機儲存下列檔案:

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

下載 Phi-2 模型檔案後,即可使用轉換指令碼將模型轉換為 MediaPipe 格式。請按照「支援模式的轉換指令碼」一節中的步驟操作。

生成式 PyTorch 模型

您可以使用 AI Edge Torch 生成式 API,將 PyTorch 生成式模型轉換為與 MediaPipe 相容的格式。您可以使用 API 將 PyTorch 模型轉換為多簽名 LiteRT (TensorFlow Lite) 模型。如要進一步瞭解如何對應及匯出模型,請前往 AI Edge Torch 的 GitHub 頁面

如果您想使用 AI Edge Torch Generative API 轉換 PyTorch 模型,請按照「Torch Generative 轉換工具 (適用於 PyTorch 模型)」一節中的步驟操作。

模型轉換

您可以使用 MediaPipe LLM 推論 API,在裝置上執行各種大型語言模型。這包括已預先轉換為與 MediaPipe 相容格式的模型,以及可透過轉換指令碼或 AI Edge Torch 程式庫轉換的其他模型。

LLM Inference API 可接受 .bin.task 檔案格式的模型。預先轉換的模型和使用轉換指令碼轉換的模型會是 .bin 檔案,而使用 AI Edge Torch 程式庫轉換的模型會是 .task 檔案。請勿手動變更轉換模型的檔案格式。

LLM 推論 API 包含三種模型轉換路徑:

預先轉換的模型

Gemma-2 2B、Gemma 2B 和 Gemma 7B 模型可做為 MediaPipe 格式的預先轉換模型使用。這些模型不需要使用者採取任何額外的轉換步驟,而且可以透過 LLM 推論 API 原樣執行。

您可以從 Kaggle 模型下載 Gemma-2 2B:

您可以從 Kaggle 模型下載 Gemma 2B 的變化版本:

您可以從 Kaggle 模型下載 Gemma 7B:

如要進一步瞭解 Gemma 機型,請參閱 Gemma-2 2BGemma 2BGemma 7B 的說明文件。

支援模式的轉換指令碼

MediaPipe 套件提供轉換指令碼,可將下列外部模型轉換為 MediaPipe 相容格式:

如要進一步瞭解支援的外部模型,請參閱 Falcon 1BStableLM 3BPhi-2 的說明文件。

模型轉換程序需要 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。 {"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.jsontokenizer_config.json 檔案的目錄路徑。針對 Gemma,請指向單一 tokenizer.model 檔案。 路徑
lora_ckpt 儲存 LoRA 轉換器權重的 safetensors 檔案 LoRA ckpt 路徑。 路徑
lora_rank 代表 LoRA ckpt 等級的整數。必須提供此值才能轉換 lora 權重。如果未提供,轉換工具會假設沒有 LoRA 權重。注意:只有 GPU 後端支援 LoRA。 整數
lora_output_tflite_file 輸出 LoRA 權重 tflite 檔案名稱。 路徑

適用於 PyTorch 模型的 Torch Generative 轉換工具

您可以使用 AI Edge Torch 生成式 API,將 PyTorch 生成式模型轉換為與 MediaPipe 相容的格式。您可以使用 API 編寫、轉換及量化 PyTorch LLM,以便與 LLM 推論 API 搭配使用。Torch Generative 轉換器只會針對 CPU 進行轉換,且需要至少 64 GB RAM 的 Linux 機器。

使用 AI Edge Torch Generative API 轉換 PyTorch 模型時,需要執行下列操作:

  1. 下載 PyTorch 模型查核點
  2. 使用 AI Edge Torch Generative API 將模型轉換為與 MediaPipe 相容的檔案格式 (.tflite)。
  3. 使用 tflite 檔案和模型區塊切割器建立工作包 (.task)。

如要建立工作包,請使用封裝指令碼建立工作包。封裝程序會將已對應的模型與其他中繼資料 (例如執行端對端推論所需的符號產生器參數。

模型封裝程序需要 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 模型專屬的停止符記。停用符記必須出現在提供的剖析器模型中。 LIST[STRING]
output_filename 輸出工作組合檔案的名稱。 路徑

LoRA 自訂

您可以設定 Mediapipe LLM 推論 API,以便支援大型語言模型的低秩調整 (LoRA)。開發人員可以利用經過微調的 LoRA 模型,透過經濟實惠的訓練程序自訂 LLM 行為。

LLM 推論 API 的 LoRA 支援功能適用於 GPU 後端的所有 Gemma 變化版本和 Phi-2 模型,且 LoRA 權重僅適用於注意力層。這個初始實作是實驗性 API,可用於日後的開發作業,我們預計在即將推出的更新中支援更多模型和各種圖層。

準備 LoRA 模型

請按照HuggingFace 上的操作說明,使用支援的模型類型 (Gemma 或 Phi-2) 訓練自己的資料集,以便精調 LoRA 模型。Gemma-2 2BGemma 2BPhi-2 模型皆可在 HuggingFace 上使用,格式為安全張量。由於 LLM Inference API 僅支援注意力層的 LoRA,因此請在建立 LoraConfig 時只指定注意力層,如下所示:

# For Gemma
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 上提供公開可用的微調 LoRA 模型,這些模型符合 LLM 推論 API 的規範。例如,Gemma-2B 的 monsterapi/gemma-2b-lora-maths-orca-200k 和 Phi-2 的 lole25/phi-2-sft-ultrachat-lora

在準備資料集並儲存模型後,您會取得包含精細調整 LoRA 模型權重的 adapter_model.safetensors 檔案。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 推論 API 已更新,以支援 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() 方法。