核心概念
大型語言模型驅動的程式碼輔助工具,如 GitHub Copilot,雖然提升了開發效率,但也帶來了顯著的能源消耗。 本文旨在探討影響這些工具能源消耗的關鍵因素,並提出優化配置以實現節能的行動見解。
研究背景
近年來,大型語言模型(LLM)在程式碼生成方面取得了顯著進展,促使它們作為程式碼輔助工具被無縫整合到開發人員的整合開發環境(IDE)中。 這些輔助工具,例如 GitHub Copilot,可以提供即時程式碼建議,並極大地提高開發人員的生產力。 然而,這些工具對環境的影響,特別是其能源消耗,仍然是一個關鍵問題。
研究方法
本文通過模擬開發人員與 GitHub Copilot 的互動,並分析各種配置因素,來研究基於 LLM 的程式碼輔助工具的能源消耗。 研究人員收集了 20 名開發人員的開發軌跡數據集,並進行了廣泛的軟體專案開發模擬,以測量不同場景下的能源使用情況。
研究結果
研究結果表明,程式碼輔助工具的能源消耗和效能受多種因素影響,例如:
**同時使用輔助工具的開發人員數量:**隨著開發人員數量的增加,伺服器的平均功耗和延遲會增加到一定程度。 但是,由於 TGI 使用的連續批處理技術,添加更多開發人員只會略微增加伺服器的延遲和消耗,從而減少了每個開發人員的能源消耗。
**請求的串流傳輸:**啟用串流傳輸以發送請求(即在新請求到達時取消先前的生成請求)平均可將伺服器延遲減少 62%,並將功耗降低 7%。
**手動觸發程式碼輔助工具:**通過僅請求向開發人員提出的生成來手動觸發程式碼輔助工具,可將能源消耗降低 15%,並將延遲降低 35%。
**程式碼輔助工具模型:**使用參數較少的 LLM 可以降低能源消耗和延遲。 例如,從 StarCoder2-15B 切換到 StarCoder2-7B 可將能源消耗降低 15.6%,將延遲降低 10.0%。
**量化方法:**量化通常會增加延遲。 值得注意的是,與完全不使用量化相比,使用 EETQ 方法會使延遲增加 3.1%,而使用 BitsAndBytes-NF4 或 BitsAndBytes-FP4 則會使延遲分別增加 138.6% 和 156%。
**最大併發請求數:**增加 TGI 伺服器允許的最大併發請求數不會影響伺服器的能源消耗,但在併發開發人員過多時會大大增加延遲。
**GPU 的數量:**正如直覺預期的那樣,減少分配給推理伺服器的 GPU 數量會降低伺服器的能源消耗並增加延遲。
此外,研究發現 GitHub Copilot 發出的大量生成請求對最終用戶來說是沒有用的,這表明許多生成請求要么是不必要的,要么對用戶沒有幫助。
研究結論
影響程式碼輔助工具能源消耗和效能的因素有很多,需要仔細選擇和優化這些因素。
增加併發開發人員的數量可以提高能源效率,但有伺服器飽和的風險。
串流傳輸請求和手動觸發生成都可以顯著降低能源消耗和延遲。
量化方法和 LLM 的選擇也會影響效能,其中較小的模型顯示出更好的效率。
調整 GPU 的數量對於優化能源使用至關重要。
GitHub Copilot 發出的大量生成請求對最終用戶來說是沒有用的,這突出了通過更智能的觸發機制或更好的用戶互動設計來優化生成請求的時間和方式以節省大量能源的潛力。
對於小型團隊來說,使用專用伺服器可能會導致每個開發人員的能源消耗很高,而大型服務可以通過最大限度地提高伺服器負載來實現更低的消耗。
研究意義
這項研究呼籲從業者、工具供應商和研究人員關注使用程式碼輔助工具對環境的影響。 開發人員可以通過手動觸發生成並以更有意識的方式使用輔助工具來避免不必要的生成,從而顯著降低其能源使用量。 另一方面,輔助工具的供應商應最大限度地提高每個推理伺服器的用戶數量,並仔細選擇量化方法,以減少資源使用。 模型的選擇也至關重要,因為它決定了剩餘用於批處理請求的記憶體量,以及單個請求的計算成本。
統計資料
GitHub Copilot 發出的 9,634 個生成請求中,只有 2,944 個完成了生成並顯示給用戶(30%)。
在顯示給用戶的生成請求中,有 1,066 個被接受(佔所有請求的 11%),而 816 個(8.5%)在實驗結束時仍保留在程式碼中。
研究發現,參與者平均每分鐘發出 9 個請求。
研究人員發現,開發人員使用 GitHub Copilot 的次數越多(即發出的生成請求越多),功耗就越高(相關性為 0.93)。
在 GitHub Copilot 的最佳情況下,每個開發人員的功耗約為筆記型電腦功耗的 58%,而在最壞情況下,它大致相當於筆記型電腦的功耗。