LLM 推論 API 可讓您完全在裝置上執行大型語言模型 (LLM),並用於執行各種工作,例如生成文字、以自然語言形式檢索資訊,以及產生文件摘要。這項工作內建支援多個文字轉文字大型語言模型,因此您可以在應用程式和產品中套用最新的裝置端生成式 AI 模型。
這項工作內建支援多種 LLM。LiteRT 社群頁面代管的模型採用 MediaPipe 友善格式,不需額外轉換或編譯步驟。
您可以使用 AI Edge Torch 將 PyTorch 模型匯出為多重簽章 LiteRT (tflite
) 模型,並與權杖化工具參數一併封裝,建立工作套件。使用 AI Edge Torch 轉換的模型與 LLM 推論 API 相容,且可在 CPU 後端執行,因此適合用於 Android 和 iOS 應用程式。
開始使用
如要開始使用這項工作,請按照目標平台的其中一份導入指南操作。這些平台專屬指南會逐步說明這項工作的基本實作方式,並提供使用可用模型和建議設定選項的程式碼範例:
任務詳細資料
本節說明這項工作的能力、輸入內容、輸出內容和設定選項。
功能
LLM Inference API 包含下列主要功能:
- 文字生成:根據輸入的文字提示生成文字。
- 選取 LLM - 套用多個模型,根據特定用途調整應用程式。您也可以重新訓練模型,並套用自訂權重。
- 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 億個有效參數運作,低於模型包含的參數總數
HuggingFace 的 Gemma-3n E2B 和 E4B 模型採用 .litertlm
格式,可搭配 Android 適用的 LLM 推論 API 使用。
Gemma-3 1B
Gemma-3 1B 是 Gemma 系列中最輕巧的模型,這個系列包含多款先進的輕量級開放式模型,採用與建立 Gemini 模型時相同的研究成果和技術。這個模型包含 10 億個參數和開放權重。
HuggingFace 的 Gemma-3 1B 模型採用 .task
/.litertlm
格式,可搭配 Android 和網頁應用程式的 LLM 推論 API 使用。
使用 LLM Inference API 執行 Gemma-3 1B 時,請相應設定下列選項:
preferredBackend
:使用這個選項選擇CPU
或GPU
後端。這個選項僅適用於 Android。supportedLoraRanks
:LLM 推論 API 無法設定為支援 Gemma-3 1B 模型,且無法使用低秩調整 (LoRA)。請勿使用supportedLoraRanks
或loraRanks
選項。maxTokens
:maxTokens
的值必須與模型內建的內容大小相符。這也稱為鍵/值 (KV) 快取或脈絡長度。numResponses
:一律為 1。這個選項僅適用於網頁版。
在網頁應用程式上執行 Gemma-3 1B 時,初始化可能會導致目前執行緒長時間遭到封鎖。如有可能,請一律從工作人員執行緒執行模型。
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 模型時,請按照下列步驟操作:
- 下載 PyTorch 模型檢查點。
- 使用 AI Edge Torch Generative API 製作、轉換模型,並將模型量化為 MediaPipe 相容的檔案格式 (
.tflite
)。 - 從 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 2B、Gemma 2B 和 Phi-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()
方法。