LLM Inference API 可讓您在裝置端完整執行大型語言模型 (LLM),以便執行多種工作,例如產生文字、擷取自然語言格式的資訊,以及總結文件內容。這項工作提供多種文字轉文字大型語言模型的內建支援,方便您將最新的裝置端生成式 AI 模型套用至應用程式和產品。
此工作支援 Gemma 2B 和 7B,這是一種輕量級開放式模型系列,兩者使用相同的研究和技術建構 Gemini 模型。此外,也支援下列外部模型:Phi-2、Falcon-RW-1B 和 StableLM-3B。
除了原生支援的模型之外,使用者也可以使用 Google 的 AI Edge 產品 (包括對應 PyTorch 模型) 對應其他模型。這可讓使用者將對應的模型匯出至多特徵碼 TensorFlow Lite 模型,這些模型會隨附權杖化工具參數,以建立工作套件。
開始使用
如要開始使用這項工作,請按照目標平台適用的任一實作指南操作。下列平台專用指南會引導您逐步完成這項工作的基本實作方式,並提供使用可用模型的程式碼範例和建議設定選項:
任務詳細資料
本節說明這項工作的功能、輸入、輸出和設定選項。
功能
LLM Inference API 包含下列主要功能:
- 產生文字轉文字:根據輸入文字提示產生文字。
- LLM 選擇:套用多個模型,依據特定用途量身打造應用程式。您也可以重新訓練和套用自訂權重至模型。
- LoRA 支援:在所有資料集上進行訓練,或使用開放原始碼社群預先建構的 LoRA 模型 (僅限原生模型),運用 LoRA 模型擴充及自訂 LLM 功能。
工作輸入內容 | 工作輸出內容 |
---|---|
LLM Inference API 接受下列輸入內容:
|
LLM Inference API 會輸出下列結果:
|
設定選項
這項工作有以下設定選項:
選項名稱 | 說明 | 值範圍 | 預設值 |
---|---|---|---|
modelPath |
專案目錄中儲存模型的路徑。 | PATH | 不適用 |
maxTokens |
模型處理的符記數量上限 (輸入符記 + 輸出符記)。 | 整數 | 512 |
topK |
模型在產生每個步驟時考量的符記數量。將預測範圍限制在機率最高的前 K 個符記。設定 topK 時,您也必須設定 randomSeed 的值。 |
整數 | 400 |
temperature |
在產生過程中引入的隨機量。隨機性參數越高,生成文字就能發揮更多創意,而低溫則能產生更準確的生成結果。設定 temperature 時,您也必須設定 randomSeed 的值。 |
浮點值 | 0.8 |
randomSeed |
用來產生文字的隨機種子值。 | 整數 | 0 |
loraPath |
在裝置上本機的 LoRA 模型絕對路徑。注意:這項功能僅與 GPU 型號相容。 | PATH | 不適用 |
resultListener |
設定結果監聽器,以非同步方式接收結果。 僅適用於使用非同步產生方法的情況。 | 不適用 | 不適用 |
errorListener |
設定選用的錯誤事件監聽器。 | 不適用 | 不適用 |
模型
LLM Inference API 內建支援可任意文字轉文字的大型語言模型,此模型經過最佳化調整,適合在瀏覽器和行動裝置上執行。這些輕量模型可下載,並在裝置端完整執行推論。
在初始化 LLM Inference API 之前,請先下載其中一種支援的模型,並將檔案儲存在專案目錄中。
Gemma 2B
Gemma 2B 是一系列最先進的輕量開放模型的一部分,兩者都以建立 Gemini 模型所用的研究和技術為基礎建構而成。這個模型包含 2B 參數和開放式權重。這個模型非常適合用於各種文字產生工作,包括回答問題、提供摘要和推理。
Gemma 2B 模型分為以下四種變化版本:
- gemma-2b-it-cpu-int4:具備 CPU 相容性的 Gemma 2B 4 位元模型。
- gemma-2b-it-cpu-int8:具備 CPU 相容性的 Gemma 2B 8 位元模型。
- gemma-2b-it-gpu-int4:具備 GPU 相容性的 Gemma 2B 4 位元模型。
- gemma-2b-it-gpu-int8:具備 GPU 相容性的 Gemma 2B 8 位元模型。
您也可以先調整模型並新增權重,然後再將模型加入應用程式。如要進一步瞭解如何調整及自訂 Gemma,請參閱 Tuning Gemma。從 Kaggle 模型下載 Gemma 後,該模型即採用適合與 MediaPipe 搭配使用的格式。
如果您從 Hugging Face 下載 Gemma 2B,必須將模型轉換為適合 MediaPipe 的格式。LLM Inference API 需要下載並轉換下列檔案:
model-00001-of-00002.safetensors
model-00002-of-00002.safetensors
tokenizer.json
tokenizer_config.json
Gemma 7B
Gemma 7B 是較大的 Gemma 模型,具有 7B 參數和開放式權重。這個模型已更強大的文字生成工作,包括回答問題、提供摘要和推理等。Gemma 7B 僅適用於網頁版。
Gemma 7B 模型有兩個變化版本:
- gemma-1.1-7b-it-gpu-int8:具備 GPU 相容性的 Gemma 7B 8 位元模型。
如果您從 Hugging Face 下載 Gemma 7B,必須將模型轉換為適用於 MediaPipe 的格式。LLM Inference API 需要下載並轉換下列檔案:
model-00001-of-00004.safetensors
model-00002-of-00004.safetensors
model-00003-of-00004.safetensors
model-00004-of-00004.safetensors
tokenizer.json
tokenizer_config.json
獵鷹 10 號星
Falcon-1B 是 10 億個參數純解碼器模型,使用 RefinedWeb 的 350B 符記訓練而成。
如要使用 LLM Inference API,您必須將下列檔案下載及儲存在本機:
tokenizer.json
tokenizer_config.json
pytorch_model.bin
下載 Falcon 模型檔案之後,模型即可轉換為 MediaPipe 格式。按照「將模型轉換為 MediaPipe 格式」一文中的步驟進行。
StableLM 3B
StableLM-3B 是 30 億個僅含解碼器的參數模型模型,並使用 1 兆個各種英文和程式碼資料集進行 4 個訓練週期的預先訓練。
如要使用 LLM Inference API,您必須將下列檔案下載及儲存在本機:
tokenizer.json
tokenizer_config.json
model.safetensors
下載 StableLM 模型檔案後,模型就可以轉換為 MediaPipe 格式。按照「將模型轉換為 MediaPipe 格式」一文中的步驟進行。
Phi-2
Phi-2 是 27 億個參數 Transformer 模型這個模型使用多種自然語言合成文字和篩選過的網站進行訓練。這個模型最適合使用問題答案、聊天功能和程式碼格式的提示。
如要使用 LLM Inference API,您必須將下列檔案下載及儲存在本機:
tokenizer.json
tokenizer_config.json
model-00001-of-00002.safetensors
model-00002-of-00002.safetensors
下載 Phi-2 模型檔案之後,模型即可轉換為 MediaPipe 格式。按照「將模型轉換為 MediaPipe 格式」一文中的步驟進行。
AI Edge 匯出的模型
AI Edge 是 Google 提供的服務,可讓您將使用者對應的模型轉換為多特徵碼的 TensorFlow Lite 模型。如要進一步瞭解如何對應及匯出模型,請造訪 AI Edge Torch GitHub 頁面。
將模型匯出成 TFLite 格式後,就可以將模型轉換為 MediaPipe 格式。詳情請參閱將模型轉換為 MediaPipe 格式。
將模型轉換為 MediaPipe 格式
原生模型轉換
如果使用外部 LLM (Phi-2、Falcon 或 StableLM) 或非 Kaggle 版本 Gemma,請使用我們的轉換指令碼將模型格式化,以便與 MediaPipe 相容。
模型轉換程序需要使用 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.safetensors 或 pytorch.bin 檔案的路徑。請注意,有時模型安全張量格式會分割為多個檔案,例如 model-00001-of-00003.safetensors 、model-00001-of-00003.safetensors 。您可以指定檔案模式,例如 model*.safetensors 。 |
PATH |
ckpt_format |
模型檔案格式。 | {"safetensors", "pytorch"} |
model_type |
要轉換的 LLM。 | {"PHI_2", "FALCON_RW_1B", "STABLELM_4E1T_3B", "GEMMA_2B"} |
backend |
用來執行模型的處理器 (委派)。 | {"cpu", "gpu"} |
output_dir |
託管個別圖層權重檔案的輸出目錄路徑。 | PATH |
output_tflite_file |
輸出檔案的路徑。例如「model_cpu.bin」或「model_gpu.bin」。這個檔案僅與 LLM Inference API 相容,無法做為一般的「tflite」檔案。 | PATH |
vocab_model_file |
儲存 tokenizer.json 和 tokenizer_config.json 檔案的目錄路徑。如為 Gemma,請指向單一 tokenizer.model 檔案。 |
PATH |
lora_ckpt |
用於儲存 LoRA 配接權重安全張量檔案的 LoRA 底座路徑。 | PATH |
lora_rank |
代表 LoRA 掛接位置的整數。如要轉換 lora 權重,此為必填屬性。如未提供,則轉換工具會假設沒有 LoRA 權重。注意:只有 GPU 後端支援 LoRA。 | 整數 |
lora_output_tflite_file |
輸出 LoRA 權重的 tflite 檔案名稱。 | PATH |
AI Edge 模型轉換
如果是透過 AI Edge 使用對應到 TFLite 模型的 LLM,請使用我們的套裝組合指令碼建立工作組合。組合程序會將對應的模型與其他中繼資料 (例如權杖化工具參數) 才能執行端對端推論
模型組合程序需要使用 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 模型的路徑。 | PATH |
tokenizer_model |
SentencePiece 權杖化工具模型的路徑。 | PATH |
start_token |
模型專屬起始權杖。啟動權杖必須存在於提供的權杖化工具模型中。 | STRING |
stop_tokens |
模型專屬的停止權杖。停止權杖必須存在於提供的權杖化工具模型中。 | 清單 [STRING] |
output_filename |
輸出工作組合檔案的名稱。 | PATH |
LoRA 自訂
您可以將 Mediapipe LLM 推論 API 設定為支援大型語言模型的低排名調整 (LoRA)。開發人員可以運用微調的 LoRA 模型,透過符合成本效益的訓練程序自訂 LLM 的行為。LLM Inference API 的 LoRA 支援適用於 GPU 後端的 Gemma-2B 和 Phi-2 模型,而 LoRA 權重僅適用於注意力層。這項初始實作可做為日後開發的實驗性 API,並計畫在未來的更新中支援更多模型和不同類型層。
準備 LoRA 模型
請按照 HuggingFace 中的操作說明,使用自己的資料集類型 (Gemma-2B 或 Phi-2) 訓練經過微調的 LoRA 模型。Gemma-2B 和 Phi-2 機型皆以安全張量格式在 HuggingFace 中提供。由於 LLM Inference API 僅支援注意力層的 LoRA,因此請在建立 LoraConfig
時指定注意力層,如下所示:
# For Gemma-2B
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 模型。例如 monsterapi/gemma-2b-lora-maths-orca-200k 代表 Gemma-2B,以及 lole25/phi-2-sft-ultrachat-lora 代表「Phi-2」。
使用準備好的資料集進行訓練並儲存模型後,您就會取得 adapter_model.safetensors
檔案,其中包含經過微調的 LoRA 模型權重。安全張量檔案是模型轉換中使用的 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 模型推論。Web 支援動態 LoRA,可在執行階段中切換不同的 LoRA 模型。Android 和 iOS 支援靜態 LoRA,在工作生命週期中使用相同的 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()
方法。