LLM 推論指南

,瞭解如何調查及移除這項存取權。

有了 LLM Inference API,您就能完全執行大型語言模型 (LLM) 功能,可用來執行多種工作,例如 生成文字、以自然語言格式擷取資訊 總結文件內容這項工作內建支援 文字轉文字大型語言模型,方便你在裝置上套用 建構生成式 AI 模型

試試看吧!

這項工作支援 Gemma 2B 和 7B, 一系列先進的開放式模型 用於打造 Gemini 的研究與技術 我們來看評估分類模型成效時 的喚回度和精確度指標也支援下列外部模型: Phi-2Falcon-RW-1BStableLM-3B

除了原生支援的模型外,使用者也能對應其他 使用 Google 的 AI Edge 模型 服務 (包括 對應 PyTorch 模型)。 這可讓使用者將對應的模型匯出至多特徵碼 TensorFlow Lite 模型,隨附權杖化工具參數 建立工作套件

開始使用

按照下列任一實作指南,開始使用這項工作: 目標廣告平台這些平台專屬指南將逐步說明 實作此工作的實作,包括使用可用模型和 建議的設定選項:

任務詳細資料

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

功能

這個 LLM Inference API 的主要功能如下:

  1. 產生文字轉文字:根據輸入文字提示生成文字。
  2. 選擇大型語言模型:套用多個模型,根據您的需求打造應用程式 針對特定用途您也可以重新訓練及套用自訂權重 模型
  3. 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 模型有四種變化版本:

您也可以先調整模型並新增權重,再將其新增至應用程式。適用對象 如要進一步瞭解如何調整及自訂 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 7B 模型只有一個變化版本:

如果您從 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

下載 Falcon 1B

您必須下載並儲存下列檔案,才能執行 LLM Inference API 本機:

  • tokenizer.json
  • tokenizer_config.json
  • pytorch_model.bin

下載 Falcon 模型檔案後,即可將模型轉換為 MediaPipe 格式按照將模型轉換為 MediaPipe 一文中的步驟操作 格式。

StableLM 3B

StableLM-3B 是 30 億個參數,僅限解碼器的語言模型 涵蓋 1 兆個英文符記、各種英文和程式碼資料集,總共 4 個訓練週期。

下載 StableLM 3B

您必須下載並儲存下列檔案,才能執行 LLM Inference API 本機:

  • tokenizer.json
  • tokenizer_config.json
  • model.safetensors

下載 StableLM 模型檔案後,就可以開始轉換模型 轉換為 MediaPipe 格式按照將模型轉換為 MediaPipe 一文中的步驟操作 格式。

Phi-2

Phi-2 是 27 億個參數 Transformer 模型。這個模型使用多種 自然語言處理的合成文字和經過篩選的網站。模型最適合用於提示 使用「問題回答」、「即時通訊」和「程式碼」格式

下載 Phi-2

您必須下載並儲存下列檔案,才能執行 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.safetensorspytorch.bin 檔案的路徑。請注意,模型安全張量格式有時會分割為多個檔案,例如model-00001-of-00003.safetensorsmodel-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.jsontokenizer_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() 方法。