你正在參加 OpenAI 的研究科學家面試。 面試官問: 「你會如何將 LLM 的上下文長度從 2K 擴展到 128K 令牌?」 你:「我會在長文檔上進行微調,使用 128K 的上下文」 面試結束。 這是你錯過的內容:
擴展上下文窗口不僅僅是關於更大的矩陣。 在傳統的變壓器中,將標記擴展8倍會因為注意力的平方複雜性而使內存需求增加64倍。請參考下面的圖片! 那麼,我們該如何管理呢? 繼續...👇
1) 稀疏注意力 它通過以下方式限制注意力計算到一部分標記: - 使用局部注意力(標記僅關注其鄰近標記)。 - 讓模型學習應該關注哪些標記。 但這在計算複雜性和性能之間存在權衡。
在 ModernBERT 中使用了類似的想法。 → 每第三層進行全局注意力 → 否則進行局部注意力(128 個標記) 結果: - 16 倍更長的序列長度 - 性能大幅提升 - 最具記憶體效率的編碼器 簡單卻強大。👇
這裡有一個來自論文的直觀解釋: 想像一下你在讀一本書。對於你所讀的每一句話,你是否需要完全了解整個情節才能理解大部分內容(全局注意)? 還是說,對當前章節的了解就足夠了(局部注意),只要你偶爾回想一下它對主要情節的重要性(全局注意)? 在絕大多數情況下,答案是後者。
2) 快速注意力 這是一種快速且節省記憶體的方法,保留了傳統注意力機制的精確性,即它使用全局注意力,但效率更高。 整個想法圍繞著優化GPU記憶體內的數據移動。 讓我們來了解一下!
一些背景細節: - 線程是最小的執行單位。 - 幾個線程形成一個區塊。 另外: - 區塊中的線程共享一種稱為 SRAM 的快速(但稀缺)記憶體。 - 所有區塊共享一種稱為 HBM 的全局記憶體(豐富但緩慢)。 查看這個 👇
注意將大型矩陣在 SRAM 和 HBM 之間移動: 計算 QK: - 將矩陣分配給線程 - 計算,然後 - 將產品發送到 HBM 計算 softmax: - 將產品分配給線程 - 計算,然後 - 將輸出發送到 HBM 對所有層重複此操作。 查看這個 👇
閃電注意力涉及硬體級的優化,利用 SRAM 來快取中間結果。 這樣可以減少冗餘的移動,提供高達 7.6 倍於標準注意力方法的速度提升。 查看這個 👇
98.93K