跳到主要內容

【2026 最新】Qwen PLE 精度怎麼測?固定主模型,只換 N-gram 表的繁中 A/B 教學

最後更新: ·
Qwen PLE 精度教學:固定主模型,只替換同源 N-gram 表

你下載兩份標著 Q4 的檔案,繁中回答卻不一樣,該升級主模型,還是換另一份查表資料?Qwen PLE 精度要另外看:主模型的量化名稱,未必交代 N-gram 表裡的數字用了什麼格式。

這篇寫給剛開始接觸本機模型、想學會公平比較的讀者。先用三個抽屜搞懂權重、PLE 與 KV Cache,再做一份「只換表」的繁中考卷。操作段從已有可運作的 Strata 配置開始;尚未部署的人,可以先完成考卷與版本紀錄,不必為了看懂原理下載巨型模型。

本文核對至 2026 年 10 月 18 日,提供評估方法與可核對的程式路徑;AlphaLab 這次未執行完整模型推論,因此不提供繁中品質提升百分比。

先說結論:Qwen PLE 精度,用「固定主機,只換字典」來比較

  • 主模型、PLE 表、KV Cache 分開記。PLE 本身也是學習得到的模型參數;為了實驗,把它與其餘權重分成兩欄。
  • 第一輪固定其餘權重,只換同源 PLE。先做 A→A 的重複對照,再比較 IQ4_NL、FP8;有可信 BF16 表才加入第三組。
  • 誤差變小與答對更多分開判。數值距離、任務通過率、延遲與容量,各留一張紀錄。

只換 PLE 的實驗=同一套主模型與執行條件+不同格式的同源查表。像同一位廚師、同一份食譜,只替換速查手冊的印刷精細度;換掉廚師或食譜,就很難把成品差別歸因於手冊。

原理:先打開三個抽屜,再談 Qwen PLE 精度

第一格是其餘模型權重,包括專家網路與投影等。第二格是PLE/N-gram Embedding:N-gram 是連續幾個 token 的短片段,token 是模型讀取的文字單位;短片段經索引取回學習過的向量,再送回模型處理。它像速查手冊,裡面卻不是可逐條閱讀的百科文章。Qwen 官方模型卡列出額外 51B N-gram 參數,與主模型分列。

第三格是KV Cache,保存這次推論過程的注意力狀態。可以把前兩格想成訓練好的教材,把第三格想成當次作答的工作筆記。改 KV 格式與改 PLE,是不同實驗;Engram 查表原理與GGUF 量化指南能補上這兩條資料路徑。

Qwen PLE 精度:其餘權重、N-gram 表與 KV Cache 分工
將 PLE 獨立列欄,是為了隔離變因;PLE 仍屬於訓練得到的模型參數。

為什麼 Q4 之外還要查表?Strata 的 Unsloth 配方文件記錄一組混合格式:多種 tensor 用不同精度,PLE 表是 IQ4_NL。這是指定配方的事實,不能推成所有 Q4 都如此。先看 tensor 與載入紀錄,檔名只當入口。

①「先查支援」:能讀 BF16,與能把 BF16 打包是兩件事

截至本次固定的 Strata commit,PLE 格式清單包含 IQ4_NL、F8_E4M3 與 BF16。可是同版 ple_fp8_pack.py 原始碼會檢查輸入必須是 F8_E4M3,並要求對應 scale;不能把 BF16 資料夾塞進去,就期待得到 BF16 表。這個落差是開始前最值得抓出的錯誤。

先在你的 Strata 原始碼目錄記錄版本;下列是本篇核對的快照,不代表你安裝的執行檔已自動對應它。自行編譯的執行檔要來自同版原始碼;安裝版則另留發布版本、檔案雜湊與實際載入 log。

git rev-parse HEAD
# 本篇核對快照:
# 477ac13cbe8e582c20484871ce459d20d82df09d
git status --short

把主模型 checkpoint、量化供應者的 revision、所有分片 SHA-256、pack、tokenizer 與聊天模板一起記下。已有部署可沿用;從零開始則按Strata 官方安裝說明建立基線。先前的本機部署教學提供驗收思路,其中舊版指令與門檻應按當前引擎重新核對。

②「先算行李」:表格精度影響什麼容量?

依本篇固定的 列數與每列大小定義,表有 320,001,536 列,每列 160 個值。下圖按列數乘每列 bytes 算表資料本體;使用十進位 GB,不是 GiB,也不含 GGUF 標頭、來源 checkpoint 或主模型。

PLE 表容量比較:IQ4_NL、FP8 與 BF16 的資料本體
容量由固定版本的列數與列寬計算;這張圖沒有品質排名或速度結果。

三種表若都另存,純資料約需 182.4GB,還要加來源檔、既有主模型與暫存空間。若 IQ4_NL 表已內嵌於原 GGUF,另加 FP8/BF16 sidecar(獨立旁掛檔)時,原本的檔案仍留在磁碟。磁碟不夠,就先完成紙上設計;別把這個表容量當成整機最低記憶體。

精度提高也會加大每列與快取占用。Strata 的資料分層說明區分 direct、mmap 與 RAM 路徑。比較時固定讀取模式和快取設定,另記實際常駐記憶體與磁碟讀取;若更大表迫使另一組改成不同路徑,就把結果稱為整套配置比較。

③「只換字典」:準備同源表,複製配置再改一個參數

先用原本能運作的配置當 A。要建 FP8 表,準備官方 FP8 checkpoint 的指定 revision、索引與索引列出的 N-gram 所在分片,確認下載取得的是實際檔案,再執行同版腳本。此步可能涉及數十 GB 來源資料;先算磁碟,不要對整個模型庫盲目全下載。

# 在 Strata 根目錄;路徑換成已核對的官方 FP8 snapshot
.venv/bin/python tools/ple_fp8_pack.py \
  --model /path/to/official-fp8-snapshot \
  --out /path/to/ple-fp8.gguf

本篇查到的官方 FP8 revision 為 236dfdf285828023ca3bcd3f37366c58a3469b13;完整精度來源為 de4b8e4d43b917e7706784d8bb445c9af86a3540。兩者分別指向官方 FP8 檔案庫及官方完整精度檔案庫,不是同一種數值表示。轉檔後仍要驗證列順序、形狀與來源;把 FP8 擴成 BF16 容器,不會找回量化前捨去的資訊。

BF16 參考組的條件是從同一模型的原始 BF16 表無損取得,且被固定引擎辨認為 BF16。BF16 實作討論附有另一個打包器提案;不要把 PR 的檔名當成主分支已存在的指令。本篇操作先完成 A/FP8 兩組,有驗證過的 BF16 成品再加入 C;BF16 只形容表,主模型仍維持原量化。

對已有的 strata-base.json,可用以下小程式複製一份 B,只修改引擎 args 的 --ple-gguf。它不安裝模型、不改原檔;配置需是 Strata 文件所示的 JSON 形狀。

import json
from pathlib import Path

config = json.loads(Path("strata-base.json").read_text())
args = config["args"]
flag = "--ple-gguf"
if args.count(flag) > 1:
    raise ValueError("duplicate --ple-gguf")
if flag in args:
    index = args.index(flag)
    if index + 1 == len(args) or args[index + 1].startswith("--"):
        raise ValueError("missing PLE path")
    del args[index:index + 2]
args += [flag, "/path/to/ple-fp8.gguf"]
Path("strata-ple-fp8.json").write_text(
    json.dumps(config, ensure_ascii=False, indent=2) + "\n"
)

其他 args、環境變數、服務端模板與採樣參數全部沿用。同版服務配置範例使用 python -m serve.server --engine strata --config 配置檔 --port 8080。兩組依序啟動於本機,重開後讀 log 確認表路徑與格式真的改了;只看 JSON 改成功還不算通過。另把自動更新停在測試之外。

④「先驗 A 對 A」:排除引擎本身的變動

先讓 A 用同題跑兩次,觀察輸出與時間本來會差多少。Strata 的 tail-skip 說明指出部分配置會略過低權重專家,並提供 STRATA_ROUTE_TAIL_SKIP=0。要排查精度影響,可在兩組同時固定這個設定,並核對啟動 log;不能只關其中一組。

Context、KV 格式、prefill 分塊、MTP/推測解碼、GPU/CPU 分工、專家常駐與 cache 行為也一起記錄。相同 seed 與溫度是控制項,不是跨裝置逐字相同的保證。若 A 對 A 就常變,先處理這個噪音,避免把所有差別都記到 PLE 身上。

⑤「先寫答案」:三種繁中題,怎麼判通過?

先自訂一組小考,每類例如五題,這是起步配方而非統計代表性樣本。在看輸出之前寫好答案與判分方式,測試後新增的題另開一輪,避免為了讓某組勝出才修改考規。

  • 繁中理解:給「只有已付款且未取消者可出貨;甲已付款但已取消」;要求只回是否出貨及對應依據。正解是不出貨,兩項條件都要判對。再加入未知狀態、否定句與同義改寫。
  • 程式修補:提供一個自有小函式與失敗測試,例如把購物數量乘單價誤寫成相加。兩組用相同輸入與允許修改範圍;在隔離的測試環境檢查一般值、零值與邊界值,另驗沒有修改禁止檔案。
  • 長文取證:自製帶行號的繁中紀錄,讓早期提案與最後核准值不同,例如 L003 擬定 17 箱、L040 撤回、L080 核准 23 箱。要求交回 23 箱與 L080 的逐字證據,再加入一題文件未提供答案,正解是指出資訊不足。

保留 prompt 的 UTF-8 原檔與 SHA-256;同一題在所有組保持相同位元組。長文加長時另開測試組,記錄實際 token 數與截斷情況,避免 A 看完整份、B 只收到尾段。程式答案先當文字保存,再在隔離環境執行;考題使用自有或有權使用的內容。

可以先做 A→B→B→A,再交換下一輪順序,每題每組記成功、失敗、逾時與完整輸出。分開標記首次啟動和暖機後的請求;重開程序也不等於作業系統快取已清空。不要為了清 cache 任意重設整台共用主機。

⑥「分開成績單」:數值接近、品質提高與更快,各自驗收

任務品質用事先定義的通過數/總題數,並列各題哪一項錯;延遲分首 token 與完整交卷時間,逾時不能從分母消失;容量分表檔、整套檔案與執行時峰值。輸出較短可能更早結束,卻漏了證據,因此時間要和交付條件一起看。

KL divergence(兩個機率分布的差異)與 top-1 agreement(最高機率 token 是否一致)適合診斷數值路徑。比較時必須餵完全相同的前文;兩邊自由生成一旦分岔,後面的機率差也包含不同語境的影響。把同一段指定文字逐 token 餵入的 teacher forcing,才較能隔離這個問題。

Strata 的當前實作說明有表誤差與 teacher-forced 觀察;那些是維護者在指定配置的結果,不是繁中任務通過率。本篇不把「較貼近 BF16」改寫成「繁中一定更好」,也不把別人的速度複製到你的硬體。

怎麼選?若兩組都未達你的必要條件,先修模板、考題或模型選擇;若都過關,再依完整工作延遲與容量挑選。若只有某幾題改善,把題目類型與差異留下,擴大同類與未見題再驗。這比看一段較流暢的回答,就宣布高精度全面獲勝更有用。

FAQ:Qwen PLE 精度的八個直接答案

1. Q4 主模型的 PLE 一定也是四位元?

要讀實際 tensor。混合格式配方可以把不同部位存成不同型別,主模型檔名不等於整套規格。

2. FP8 表就是原始 BF16 表?

不是。原始來源與量化表示要分列;FP8 擴成 BF16 容器也不會恢復捨去的資訊。

3. 把 PLE 改 BF16,整個模型就成 BF16?

不會。這一輪刻意固定其他權重,只替換表。

4. 讀取器列出 BF16,就能直接照 FP8 指令轉?

要另查 packer。本篇固定版的 ple_fp8_pack.py 明確要求 F8_E4M3 輸入。

5. 表檔變大,RAM 一定同幅增加?

要看資料路徑。direct、mmap、RAM 常駐與列快取有不同成本,實際載入配置要留證據。

6. KL 較小就證明繁中更準?

還要考任務。它描述分布距離,需另看理解、修補與取證的通過條件。

7. 只有聊天感覺比較順,可以先宣布結果嗎?

先保留觀察。用盲標籤與固定答案重評,區分表達偏好、正確率與抽樣差異。

8. 硬體不夠,今天還能做什麼?

先準備考卷、答案、版本表與記錄欄位,再用已有環境驗一題。先完成可檢查的設計,就是有效的第一步。

給新手的三個重點

  • 把主模型、PLE 與 KV 分成三欄;每一欄都保留格式、來源與版本。
  • 先驗 A 對 A,再只換同源 PLE;BF16 表參考組不等於全 BF16 模型。
  • 先寫通過條件,再看品質、完整交卷延遲與容量的交換。

接著閱讀

左右滑動查看更多推薦

下一步:今天先留下第一題的正解

先把「付款但取消」那題寫進檔案,固定正解與判分方式,再記下你已有配置的主模型、PLE 與 KV。能跑的人先做 A 對 A,接著只換表;還沒準備好的人先完成考卷。回到開頭那句話:同一位廚師、同一份食譜,只換速查手冊。這就是把 Qwen PLE 精度從下載檔名,變成可查證實驗的方法。想繼續建立模型與工作流的判讀能力,可以到AI 文章專區與AlphaLab 課程選下一步。

ALPHALAB 社群

有問題?來 Telegram 聊

和 Terry、編輯、其他網友一起討論這篇文章。提問、分享觀點,回覆更即時。

加入 Telegram 討論

📩 訂閱 AlphaLab 電子報

每週最多三封:一封 Weekly 週報與最多兩封關鍵 Alpha Signal。

我們不會 spam,隨時可退訂。已訂閱?管理主題偏好(會寄登入連結到你的信箱)