LLM 推論指南

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

試試看吧!

此任務支援以下 Gemma 變體:Gemma-3 1B、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-3 1B 不需要轉換 Android、網頁 .task
Gemma 2B、Gemma 7B、Gemma-2 2B 不需要轉換 Android、iOS、網頁 .bin
Phi-2、StableLM、Falcon MediaPipe 轉換指令碼 Android、iOS、網頁 .bin
所有 PyTorch LLM 模型 AI Edge Torch 生成式程式庫 Android、iOS 裝置 .task

如要瞭解如何轉換其他模型,請參閱「模型轉換」一節。

Gemma-3 1B

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

下載 Gemma-3 1B

HuggingFace 提供的 Gemma-3 1B 模型採用 .task 格式,可搭配 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 系列中的模型,這一系列先進的輕量級開放式模型採用與建立 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 億的解碼器專用語言模型,在 4 個 epoch 中,以 1 兆個符號的多樣化英文和程式碼資料集預先訓練。

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