有了 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 的主要功能如下:
- 產生文字轉文字:根據輸入文字提示生成文字。
- 選擇大型語言模型:套用多個模型,根據您的需求打造應用程式 針對特定用途您也可以重新訓練及套用自訂權重 模型
- LoRA 支援:透過 LoRA 模型擴充和自訂大型語言模型功能 或是使用預先建構的 LoRA 開放原始碼社群中的模型 (僅限原生模型)。
工作輸入內容 | 工作輸出 |
---|---|
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 之前,請先下載其中一個支援的模型,然後 將檔案儲存在專案目錄中
Gemma 2B
Gemma 2B 已加入 使用相同的研究和 AI 技術,建構出最先進的開放式模型 Gemini 模型的部分技術 包含 20 億個參數和開放式權重這個模型非常適合用於 像是回答問題、摘要等 和推論
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 Models 下載 Gemma 之後, 模型已採用適當格式,可與 MediaPipe 搭配使用。
如果您從 Hugging 下載 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 推論 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
獵鷹 1B 號
Falcon-1B 是僅有 10 億個參數的因解碼器模型,並以 350B 億次訓練 符記 RefinedWeb。
您必須下載並儲存下列檔案,才能執行 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 邊緣匯出模型
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 。 |
路徑 |
ckpt_format |
模型檔案格式。 | {"安全張量", "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.json 和
tokenizer_config.json 個檔案。如果是 Gemma,請指向單一 tokenizer.model 檔案。 |
路徑 |
lora_ckpt |
儲存 LoRA 轉接器權重的 LoRA 安全張量檔案路徑。 | 路徑 |
lora_rank |
代表 LoRA ckpt 排名的整數。必須填寫此欄位,才能轉換 lora 權重。如未提供,則轉換器會假設沒有 LoRA 權重。注意:只有 GPU 後端支援 LoRA。 | 整數 |
lora_output_tflite_file |
LoRA 權重的輸出 tflite 檔案名稱。 | 路徑 |
AI Edge 模型轉換
如果您使用的 LLM 對應至透過 AI Edge 對應至 TFLite 模型,請使用 組合指令碼來建立工作套件。套裝程序會封裝 具備額外中繼資料 (例如Tokenizer 參數 執行端對端推論
模型組合程序需要 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 |
模型專屬的停止權杖。停止權杖必須在 提供的符記化模型 | 清單 [STRING] |
output_filename |
輸出工作套件檔案的名稱。 | 路徑 |
自訂 LoRA
您可以將 Mediapipe LLM 推論 API 設為支援低階調整 (LoRA) 這適合用於大型語言模型開發人員只要使用經過微調的 LoRA 模型 以符合成本效益的訓練程序,自訂 LLM 的行為。支援 LLM Inference API 的 LoRA 支援 Gemma-2B 和 Phi-2 模型 ,且 LoRA 權重僅適用於注意力層這個 初始實作的用意是供未來開發的實驗性 API 並計劃在未來支援更多模型和各種圖層類型 更新。
準備 LoRA 模型
按照 HuggingFace 的操作說明,在自己的資料集內使用支援的模型類型 Gemma-2B 或 Phi-2 訓練微調的 LoRA 模型。HuggingFace 同時提供 Gemma-2B 和 Phi-2 模型,並採用安全張量格式。由於 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 模型,這些模型與 LLM Inference API 相容。例如,Gemma-2B 的 monsterapi/gemma-2b-lora-maths-orca-200k,而 Phi-2 代表 lole25/phi-2-sft-ultrachat-lora。
在準備的資料集訓練及儲存模型後,您會取得一個 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 模型推論。網頁支援動態 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()
方法。