他正在盯著監控後台,看每一通客服對話從使用者送出問題到 AI 打完整段回覆要花幾秒鐘
你跟 AI 聊天時,它「回答」你的這個動作,叫做 推理AI模型拿來產生答案的過程,跟「訓練模型」是兩件完全不同的事,推理發生在你我實際使用AI的當下。傳統做法裡,AI 是「一個字一個字」把答案擠出來的,術語叫 自迴歸一次只能生成一個字,而且必須先生出前一個字,才能想下一個字,跟人打字一樣一個接一個。字數越多、句子越長,AI 就要「想」越多輪,速度自然被拖慢——這正是文章一開頭就強調『推理是 agent 時代瓶頸』的原因:像客服機器人這種要長時間讀資料、規劃、呼叫工具的 AI 代理人,吃掉的字數遠比一般聊天多得多。
為了加速,工程師想出一招叫「投機解碼先讓一個小的AI快速『亂猜』一串答案,再讓大模型一次檢查,猜對就省時間,猜錯就丟掉重來」。負責亂猜的小 AI 叫做 草稿模型專門用來『先猜』的小又快的AI,猜完之後才輪到真正負責『把關』的大模型出場,而大模型負責的動作叫 驗證大模型把草稿模型猜的整串答案一次看過(一次forward pass),合理的部分保留、不合理的直接砍掉並補上正確答案。過去多年,草稿模型雖然小,卻還是得「一個字一個字」慢慢猜——直到 DFlash 出現,把草稿這一步也變成「一次全部平行猜完」,才真正打開加速空間,也讓 NVIDIA、Google TPU、Meta 等大廠實測拿到 3~15 倍的加速。
這次的 DFlash 2,是在「平行猜」的基礎上再進化。既然每個位置都是「各自平行猜」,猜出來的字彼此可能兜不起來(比方前半猜出「我要去公司」、後半猜出「我要去公園」,拼在一起就變怪句子),驗證時整串就容易被砍斷、等於白猜一場。DFlash 2 想辦法讓每個位置的猜測「互相校準」,卻不必像其他方法一樣多加一個「依序修正」的步驟——換句話說,多賺了 吞吐量單位時間內AI能產出的token(字)數量,數字越高代表同樣時間能服務越多請求、或讓使用者等越少,卻幾乎沒多花時間:每次驗證能多產出超過 20% 的內容,只多花大約 1% 的延遲。搭配 量化把模型內部原本很精細的數字,簡化成佔用空間更小的表示法,用來換取速度與省記憶體,代價是些微精確度損失 過的草稿模型,Qwen3.8-27B 在 SGLang 上的吞吐量能到傳統做法的 2.7~3.4 倍。
| 做法 | 每一輪「想」幾個字 | 相對速度 | 誰在用 |
|---|---|---|---|
| 傳統自迴歸 | 1 個字 | 1 倍(基準) | 早期絕大多數 LLM 服務 |
| DFlash(第一代) | 一次平行猜一整串 | 最高約 15 倍(NVIDIA Blackwell 實測) | NVIDIA、Google TPU、Meta、Poolside 等 |
| DFlash 2 | 一次平行猜一整串,且互相校準更準確 | 在 DFlash 基礎上再多賺 16~25% 產出,延遲只多約 1% | 2026 年 8 月最新發布,Qwen3.8-27B 首發示範 |
這段程式碼是幫助理解概念用的簡化模擬(不是 DFlash 的真實原始碼),示範「草稿模型先猜、大模型再驗證」這個核心迴圈到底在做什麼。
import randomdef draft_model(block_size): return [random.randint(0, 99) for _ in range(block_size)]def target_model_verify(draft_tokens, true_next_fn): accepted = [] for guess in draft_tokens: correct = true_next_fn(accepted) if guess == correct: accepted.append(guess) else: accepted.append(correct) break return accepteddef generate(total_length, block_size, true_next_fn): output = [] rounds = 0 while len(output) < total_length: draft = draft_model(min(block_size, total_length - len(output))) accepted = target_model_verify(draft, true_next_fn) output.extend(accepted) rounds += 1 return output, rounds