硬體感知的動態投機解碼(DSD)| Cohere
Cohere提出了動態投機解碼(DSD),根據硬體約束動態調整草稿令牌數量,以提升LLM推理速度。該方法解決了固定K投機解碼在高批次大小時效能下降的問題,並在密集和MoE模型上驗證了有效性,同時相容vLLM的非同步排程和CUDA圖最佳化。
投機解碼(Speculative Decoding, SD)是一種流行的技術,可以在不降低質量的情況下加速大型語言模型(LLM)的推理。標準LLM推理一次生成一個令牌,而SD使用一個較小的草稿模型提出多個令牌,然後由大型目標模型在一個時間步內進行驗證。由於每個步驟可以接受多個令牌,這加速了生成過程。
SD透過利用GPU計算與記憶體頻寬之間的權衡來實現加速。批處理多個請求可以提高GPU利用率,但操作模式取決於批處理大小(BS):在小型批處理中,推理受記憶體頻寬限制;在大型批處理中,推理變為計算受限。SD的時間主要由草稿時間(小型草稿模型)和驗證時間(大型目標模型)組成。
然而,SD面臨一些挑戰。在生產環境中,批處理大小動態變化,當批處理大小較大時,普通LLM推理變為計算受限,沒有空閒計算供SD利用,此時SD可能比普通推理更慢。在強化學習(RL)中,滾動階段是主要瓶頸,SD可以幫助處理長尾生成,但在高批處理大小時吞吐量受損,限制了其整體效用。
為此,Cohere提出了硬體感知的動態投機解碼(DSD)。DSD改進標準SD之處在於使草稿令牌數量自適應。它根據模型與硬體之間的互動選擇最優K:當推理受記憶體頻寬限制時增加K,當受計算限制時減少K。對於密集模型,K隨批處理大小單調遞減;對於MoE模型,K在批處理大小變化時呈現非單調性:低BS時K較低,中BS時K升高,高BS時再次降低。
為了找到最優草稿令牌數,DSD使用良好度(goodput)指標:goodput = 接受長度(AL)/ 令牌間延遲(ITL)。該指標捕捉了增加草稿令牌的邊際貢獻與牆鍾成本之間的權衡。透過離線分析測量AL和ITL,DSD找到最優K並儲存為查詢表,執行時使用。這解決了冷啟動問題,並且可以透過引擎的執行時指標進行擴充套件。
實驗結果表明,DSD在不同批處理大小下均優於固定K的SD和普通推理。在MT-Bench資料集上,對於Cohere的Command A(密集模型),DSD在低BS時匹配SD的加速,在高BS(64/128)時比SD和普通模型更快,在極高BS(256)時匹配普通模型效能。具體而言,DSD在BS 128和256時比SD快約23%,比普通模型快7.5%(BS 128)和1.82%(BS 256)。對於Command A+(MoE模型),DSD選擇了與固定K(K=3)相近的K值,因此加速效果類似,但期望未來方法能顯示更明顯的增益。
Cohere已將DSD貢獻到vLLM推理框架中。實現DSD面臨兩個主要挑戰:與非同步排程相容以及與全CUDA圖相容。在非同步排程中,排程器與模型執行器並行執行,DSD打破了每時間步生成與驗證相同數量草稿令牌的假設,需要調整排程器和執行器中的簿記。對於全CUDA圖,DSD擴充套件了捕獲的元組,使其包括不同的K值,從而在執行時改變K時仍能命中已捕獲的CUDA圖。這些貢獻確保了DSD能與vLLM的高效最佳化協同工作。