LLM 推論指南

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

試試看吧!

這個工作會為各種 LLM 提供內建支援。在 LiteRT 社群頁面上代管的模型採用 MediaPipe 相容格式,因此不需要任何額外的轉換或編譯步驟。

您可以使用 AI Edge Torch,將 PyTorch 模型匯出至多簽名 LiteRT (tflite) 模型,並與剖析器參數一起組合,以建立工作包。使用 AI Edge Torch 轉換的模型與 LLM 推論 API 相容,且可在 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 之前,請下載模型並將檔案儲存在專案目錄中。您可以使用 LiteRT Community HuggingFace 存放區中的預先轉換模型,也可以使用 AI Edge Torch 產生轉換工具,將模型轉換為與 MediaPipe 相容的格式。

如果您還沒有要搭配 LLM Inference API 使用的 LLM,請先使用下列任一模型。

Gemma-3 1B

Gemma-3 1B 是 Gemma 系列的最新模型,這一系列先進的輕量級開放式模型採用與建立 Gemini 模型時相同的研究成果和技術打造而成。模型包含 10 億個參數和開放權重。1B 變體是 Gemma 系列中最輕量的模型,非常適合用於許多裝置端用途。

下載 Gemma-3 1B

HuggingFace 提供的 Gemma-3 1B 模型採用 .task 格式,可搭配 Android 和網頁應用程式的 LLM 推論 API 使用。

使用 LLM 推論 API 執行 Gemma-3 1B 時,請據此設定下列選項:

  • preferredBackend:使用這個選項選擇 CPUGPU 後端。這個選項僅適用於 Android。
  • supportedLoraRanks:無法設定 LLM 推論 API 以支援 Gemma-3 1B 模型的低秩調整 (LoRA)。請勿使用 supportedLoraRanksloraRanks 選項。
  • maxTokensmaxTokens 的值必須與模型中建構的內容大小相符。這也稱為鍵/值 (KV) 快取或內容長度。
  • numResponses:一律必須為 1。這個選項僅適用於網頁版。

在網頁應用程式上執行 Gemma-3 1B 時,初始化可能會導致目前執行緒長時間阻斷。盡可能從工作執行緒執行模型。

Gemma-2 2B

Gemma-2 2B 是 Gemma-2 的 2B 變體,適用於所有平台。

下載 Gemma-2 2B

模型包含 2B 參數和開放權重。Gemma-2 2B 以其在同類型模型中擁有的頂尖推理技能而聞名。

PyTorch 模型轉換

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

使用 AI Edge Torch 生成式 API 轉換 PyTorch 模型時,需要執行以下步驟:

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

Torch Generative 轉換器只會針對 CPU 進行轉換,且需要至少 64 GB RAM 的 Linux 機器。

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

模型封裝程序需要 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() 方法。