LLM 推論指南

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

立即試用!

這項工作內建支援多種 LLM。LiteRT 社群頁面代管的模型採用 MediaPipe 友善格式,不需額外轉換或編譯步驟。

您可以使用 AI Edge Torch 將 PyTorch 模型匯出為多重簽章 LiteRT (tflite) 模型,並與權杖化工具參數一併封裝,建立工作套件。使用 AI Edge Torch 轉換的模型與 LLM 推論 API 相容,且可在 CPU 後端執行,因此適合用於 Android 和 iOS 應用程式。

開始使用

如要開始使用這項工作,請按照目標平台的其中一份導入指南操作。這些平台專屬指南會逐步說明這項工作的基本實作方式,並提供使用可用模型和建議設定選項的程式碼範例:

任務詳細資料

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

功能

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

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

設定選項

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

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

模型

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

初始化 LLM Inference API 前,請先下載模型,並將檔案儲存在專案目錄中。您可以從 LiteRT 社群 HuggingFace 存放區使用預先轉換的模型,也可以使用 AI Edge Torch Generative Converter 將模型轉換為 MediaPipe 相容格式。

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

Gemma-3n

Gemma-3n E2B 和 E4B 是 Gemma 系列的最新模型,這是一系列先進的輕量級開放式模型,採用與建立 Gemini 模型時相同的研究成果和技術。Gemma 3n 模型專為在低資源裝置上有效執行而設計。這類模型支援多模態輸入,可處理文字、圖像和音訊輸入內容,並生成文字輸出內容。

Gemma 3n 模型採用選擇性參數啟動技術,可減少資源需求。這項技術可讓模型以 20 億和 40 億個有效參數運作,低於模型包含的參數總數

下載 Gemma-3n E2B

下載 Gemma-3n E4B

HuggingFace 的 Gemma-3n E2B 和 E4B 模型採用 .litertlm 格式,可搭配 Android 適用的 LLM 推論 API 使用。

Gemma-3 1B

Gemma-3 1B 是 Gemma 系列中最輕巧的模型,這個系列包含多款先進的輕量級開放式模型,採用與建立 Gemini 模型時相同的研究成果和技術。這個模型包含 10 億個參數和開放權重。

下載 Gemma-3 1B

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

使用 LLM Inference 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

這個模型包含 20 億個參數和開放權重。Gemma-2 2B 以同類模型中頂尖的推理能力而聞名。

PyTorch 模型轉換

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

使用 AI Edge Torch Generative API 轉換 PyTorch 模型時,請按照下列步驟操作:

  1. 下載 PyTorch 模型檢查點。
  2. 使用 AI Edge Torch Generative API 製作、轉換模型,並將模型量化為 MediaPipe 相容的檔案格式 (.tflite)。
  3. 從 tflite 檔案和模型權杖化工具建立工作套件 (.task/.litertlm)。

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 Inference API 的 LoRA 支援功能適用於 GPU 後端的各個 Gemma 變體和 Phi-2 模型,且 LoRA 權重僅適用於注意力層。這項初始實作是實驗性 API,未來將支援更多模型和各種層,敬請期待後續更新。

準備 LoRA 模型

按照 HuggingFace 上的說明,使用支援的模型類型 (Gemma 或 Phi-2) 和自己的資料集,訓練微調的 LoRA 模型。Gemma-2 2BGemma 2BPhi-2 模型均以 safetensors 格式在 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 Inference API。例如,Gemma-2B 的 monsterapi/gemma-2b-lora-maths-orca-200k,以及 Phi-2 的 lole25/phi-2-sft-ultrachat-lora

以準備好的資料集訓練模型並儲存後,您會取得 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 模型推論。

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() 方法。