Perplexity 開源輕量多模態決策模型 pplx-decider-flash-v1.2:以七分之一體積保留 27B 核心決策能力
摘要:Perplexity AI 在 Hugging Face 釋出輕量級多模態決策模型 pplx-decider-flash-v1.2,基於 Qwen3.5-4B 架構,透過知識蒸餾與模型權重平均(Model Souping)技術,從 27B 規模的 pplx-decider-v1.2 蒸餾而成。該模型支援文字與最高 1.6 MP 的圖像輸入,僅需約 9 GiB 的 BF16 顯示記憶體即可部署,適合對延遲與推論成本高度敏感的分類、路由與評分場景。
模型定位與核心架構
在實際生產環境中,將龐大的生成式語言模型用於分類、客服工單路由、工具檢索或內容審核,往往面臨延遲過高與算力成本昂貴的問題。Perplexity AI 推出的 pplx-decider-flash-v1.2 專為結構化決策任務設計,採用 Apache 2.0 授權條款開放權重。
pplx-decider-flash-v1.2 是 pplx-decider-v1.2(基於 Qwen3.8-27B)的小型化版本,參數規模約為 5B(基於 Qwen3.5-4B-Base 與 Qwen3.5-4B 微調),體積僅為 27B 版本的七分之一左右。模型具備以下四項核心設計特點:
- 全機率分佈知識蒸餾:學生模型在訓練過程中直接學習 27B 教師模型在訓練請求上的完整機率分佈,而非僅學習單一正確答案標籤,使小模型在未見過的決策任務(Held-out Tasks)上也具備良好的泛化能力。
- 權重平均(Model Souping):模型結合了多次訓練運行的權重進行平均,在各項基準測試之間取得穩健的平衡。
- 分離式決策讀取頭(Readout Head):模型不使用傳統的完整詞表語言模型頭(
lm_head),而是配置一個 BF16 格式、維度為[255, 2560]的專屬決策讀取頭(readout.safetensors),並在每個問題結尾的<|fim_suffix|>標記位置直接讀取最多 255 個選項的 Logits。 - 混合注意力機制:完整注意力層(Full-attention layers)在整個請求序列上採用非因果(Noncausal)雙向注意力,而線性注意力層(Linear-attention layers)則維持原生因果行為。因此,一般預設的因果推論框架無法直接重現該模型的結果,需搭配官方提供的
pplx_decider套件執行。
基準測試表現:Decision Index 0.3 與視覺能力
根據官方公布的 Decision Index 0.3 公開基準測試與視覺決策測試結果,pplx-decider-flash-v1.2 在大幅縮減參數量的同時,保留了 27B 模型大部分的分類與多模態判斷能力,在工具調用(Tools)與檢索(Retrieval)項目上表現尤為接近。
| 評估類別 (Decision Index 0.3) | pplx-decider-flash-v1.2 (合併請求) | pplx-decider-flash-v1.2 (單題獨立請求) | pplx-decider-v1.2 27B (合併請求) |
|---|---|---|---|
| Knowledge (知識) | 42.0 | 41.4 | 56.3 |
| Language (語言) | 63.3 | 65.0 | 72.8 |
| Retrieval (檢索) | 64.8 | 65.2 | 68.4 |
| Tools (工具) | 76.7 | 80.9 | 84.4 |
| Arts (藝術與人文) | 46.8 | 46.8 | 56.2 |
| Overall Decision Index (總分) | 58.88 | 60.05 | 68.09 |
| Vision Decision Index 0.3 (最高 1.6 MP 圖像) | 72.53 | 72.53 | 77.43 |
官方同時在致謝中提及,模型有相當比例的效能提升來自於 tasksource 資料集框架(LREC-COLING 2024)。
三種結構化問題類型與 API 介面
pplx-decider-flash-v1.2 與 27B 版本共用相同的 API 與請求結構。每個請求包含一段上下文狀態(state,支援字串、字典或列表,非字串會自動序列化為 JSON)、選填的圖片列表(images),以及一個或多個問題(questions)。模型支援三種決策題型:
問題類型 (type) | 條件設定 (criteria) | 回傳結果 (Answer) | 典型應用場景 |
|---|---|---|---|
choice (單選/多類別) | {選項名稱: 描述或 None},支援 1 至 255 個選項 | 最優選項 (choice)、各選項機率分佈 (probabilities)、信心度 (confidence) | 客服工單分派、意圖識別、多選一路由 |
noul (二元是非題) | 選填 {"true": 描述, "false": 描述} | 為真機率 noul = P(true)(排序時建議使用 true - false 的 Logit 差值以避免機率飽和) | 緊急程度判斷、合規過濾、垃圾訊息偵測 |
score (等級評分) | 2 至 255 個由低至高的等級描述列表 | 期望等級指標 (score)、各等級機率 (probabilities)、圖例 (legend)、信心度 (confidence) | 客戶情緒評估、內容品質打分、風險分級 |
關鍵實務建議:何時該合併問題(Joint Requests)?
雖然模型支援將同一個 state 下的多個問題打包進同一個序列中一次讀取(Joint Requests),但官方測試顯示,對於輕量版的 pplx-decider-flash-v1.2 而言,預設每次請求只發送一個問題(One question per request)是更安全的做法。
由於完整注意力層是非因果的,同一個請求中的所有問題都會互相注意(Attend)到彼此。只有當多個問題屬於同一個決策的緊密耦合面向時,合併請求才會帶來正面效益;若將相互獨立的候選項目放在同一個請求中評分,準確率反而會明顯下降:
| 測試任務 | 問題性質 | 合併請求 vs. 單題獨立請求得分差異 |
|---|---|---|
| SATA-Bench (多選題) | 每個選項作為一個問題 | +6.6 |
| Home appliance simulator | 同一任務的多個步驟 | +3.4 |
| FinEntity (金融實體識別) | 同一文本中的各個實體 | +2.9 |
| PhishNChips (釣魚郵件檢測) | 同一封訊息的多個特徵面向 | +2.0 |
| BRIGHT (推理密集型檢索) | 每個候選文件一個問題 | -4.2 |
| ToolRet (工具檢索) | 每個候選工具一個問題 | -7.5 |
| BFCL (函式調用) | 每個候選調用一個問題 | -15.4 |
| ACOS (面向類別情感分析) | 每個類別一個問題 | -20.1 |
因此,在實務部署上建議遵循兩個原則:
- 獨立候選項目分開請求:對檢索文件、工具候選或函式調用進行排序時,請將每個候選項目拆分為獨立請求。搭配官方的 Fast Path(
fast=True)無填充序列打包(Padding-free packing)機制,大量小型獨立請求依然能維持極低的運算成本。 - 僅在多標籤或單一路由步驟時合併:只有在處理「選出所有符合項目(Select all that apply)」或單一決策的多個子步驟時,才將問題合併於同一請求。
硬體需求、Fast Path 加速與長文本限制
根據 pplx-decider-flash-v1.2 官方文件,部署與推論的關鍵技術規格如下:
- 硬體與環境需求:需要 Python 3.12 以上版本,以及具備約 9 GiB BF16 權重空間加上工作記憶體的 CUDA GPU(相較之下,27B 版本需要約 52 GiB 顯示記憶體)。該儲存庫為 Private 狀態,下載時需設定具備存取權限的 Hugging Face Access Token。
- 溫度校準(Temperature Calibration):
decision_config.json內建在保留校準集上擬合的溫度參數(此檢查點為1.554)。在 1,497 題開發集上,套用溫度校準後的準確率為 88.8%,預期校準誤差(ECE)由 0.057 降至 0.021,Brier Score 由 0.173 優化至 0.163。 - 圖像處理規格:圖片會置於文字請求之前,所有問題皆可讀取圖片內容。每張圖片會維持長寬比縮放至最高
1,638,400像素(1.6 MP,約佔用 1,600 個序列位置),小於此尺寸的圖片則維持原狀(下限為 65,536 像素)。 - 上下文長度與自動切分:骨幹網路的位置上限(
max_length)預設為 262,144 tokens,實際訓練序列長度約為 32k tokens。官方抽樣測試顯示,在單張 NVIDIA GB200 上從長達 243k tokens 的日誌中檢索單一事實,正確率P(correct)超過 0.999,峰值顯示記憶體約為 39 GiB(Reference Path,耗時約 1 分鐘)或 54 GiB(Fast Path,耗時約 20 秒)。當請求超過max_length時,系統不會截斷輸入,而是自動將問題列表遞迴對半切分,並保留完整的state與圖片。 - Fast Path 編譯加速:啟用
Decider.from_pretrained(..., fast=True)後,系統會將多個請求打包為無填充序列、編譯 Decoder 層並重播 CUDA Graphs(需安裝requirements-fast.txt與flash-linear-attention)。建議在服務啟動時呼叫decider.warmup()預先完成編譯。
快速上手程式碼範例
安裝官方儲存庫中的相依套件後,即可透過以下 Python 程式碼載入模型並同時執行單選分派(choice)、是非判斷(noul)與情緒評分(score):
import sys
from pathlib import Path
from huggingface_hub import snapshot_download
checkpoint = Path(snapshot_download("perplexity-ai/pplx-decider-flash-v1.2"))
sys.path.insert(0, str(checkpoint / "source" / "src"))
from pplx_decider import Decider
decider = Decider.from_pretrained(checkpoint, device="cuda")
response = decider.decide({
"state": "My integration keeps failing with a 401 since we rotated our API key. Please help.",
"questions": {
"team": {
"type": "choice",
"instructions": "Which team should handle this request?",
"criteria": {
"billing": "Charges and refunds",
"support": "Technical integration errors",
"sales": "Questions about buying a product",
},
},
"urgent": {
"type": "noul",
"instructions": "Is the customer blocked right now?"
},
"frustration": {
"type": "score",
"criteria": ["calm", "mildly annoyed", "frustrated", "angry"]
},
},
})
print(response["answers"]["team"]["choice"], response["answers"]["urgent"]["noul"])
常見問題(FAQ)
1. pplx-decider-flash-v1.2 與 pplx-decider-v1.2 (27B) 該如何選擇?
當應用場景對推論延遲、吞吐量或 GPU 顯示記憶體成本(9 GiB vs. 52 GiB)有嚴格限制時,優先選擇 pplx-decider-flash-v1.2。它在工具檢索(單題請求得分 80.9 vs. 27B 的 84.4)與視覺決策(72.53 vs. 77.43)上保留了絕大多數的準確度;若任務需要較複雜的跨領域知識推理(Knowledge 類別 42.0 vs. 56.3),則建議使用 27B 版本的 pplx-decider-v1.2。
2. 為什麼直接使用 Hugging Face Transformers 的預設因果推論無法重現模型表現?
因為 pplx-decider-flash-v1.2 的完整注意力層採用非因果(Noncausal)注意力機制,且輸出並非透過標準 lm_head 在最後一個 token 生成,而是在每個 <|fim_suffix|> 標記位置透過專屬的 [255, 2560] 讀取頭(readout.safetensors)提取機率。部署時必須使用內附的 pplx_decider 套件或支援非因果注意力與標記讀取的推論系統。
3. 可以使用 v1.1 版本的單題 Prompt 格式嗎?
不行。pplx-decider-flash-v1.2 採用 joint-question-inline-readout-v1(Version 3)協議,必須透過 pplx_decider 建構請求格式,直接沿用 pplx-decider-v1.1-27b 的舊版 Prompt 會產生不一致的結果。