在2025年5月,來自斯坦福大學(xué)、伊利諾伊大學(xué)香檳分校、卡內(nèi)基梅隆大學(xué)和Visa研究院的研究團隊發(fā)表了一篇引人注目的論文。這篇由Anjiang Wei、Tarun Suresh、Huanmi Tan、Yinglun Xu、Gagandeep Singh、Ke Wang和Alex Aiken共同完成的研究,探討了如何利用大語言模型(LLM)優(yōu)化匯編代碼性能。該論文題為《通過強化學(xué)習(xí)改進大語言模型的匯編代碼性能》(Improving Assembly Code Performance with Large Language Models via Reinforcement Learning),發(fā)表于arXiv預(yù)印本平臺(arXiv:2505.11480v1)。
近幾年來,大語言模型在編程領(lǐng)域展現(xiàn)出了驚人的能力,從代碼生成到程序修復(fù),表現(xiàn)都相當(dāng)出色。然而,在代碼優(yōu)化特別是底層代碼優(yōu)化方面的潛力卻尚未被充分挖掘。想象一下,如果你擁有一個智能助手,它不僅能幫你寫代碼,還能自動讓這些代碼運行得更快、更高效,那將會是多么便利的體驗。這正是這項研究想要實現(xiàn)的目標。
傳統(tǒng)上,優(yōu)化匯編代碼的工作主要由編譯器完成。就像廚師按照固定的菜譜制作料理一樣,現(xiàn)代編譯器如GCC會按照預(yù)設(shè)的規(guī)則對代碼進行一系列優(yōu)化轉(zhuǎn)換。但這種方法面臨一個經(jīng)典問題:優(yōu)化步驟的順序會大大影響最終生成代碼的性能,就像烹飪步驟的順序會影響菜肴的口感一樣。由于優(yōu)化空間異常龐大,編譯器經(jīng)常無法找到最優(yōu)解,留下了很大的性能提升空間。
另一種方法是所謂的"超級優(yōu)化"(superoptimization),它會在所有可能的等價程序中搜索性能最佳的版本。這有點像不按食譜烹飪,而是嘗試所有可能的烹飪方法,直到找到最美味的那一個。理論上,這種方法可以產(chǎn)生最優(yōu)的代碼。但實際上,隨著程序大小的增加,搜索空間呈指數(shù)級增長,使得窮舉搜索在實際應(yīng)用中變得不可行。而且,以往的超級優(yōu)化工作主要針對沒有循環(huán)的直線代碼,因為這類代碼更容易進行形式化驗證,確保優(yōu)化后的代碼與原始代碼在功能上完全等價。
面對這些挑戰(zhàn),研究團隊提出了一個創(chuàng)新性的思路:利用大語言模型的強大能力來優(yōu)化匯編代碼。與高級語言相比,匯編代碼更接近硬件,提供了對執(zhí)行過程的精細控制,能夠?qū)崿F(xiàn)高級語言難以表達的優(yōu)化。然而,這種設(shè)置也帶來了新的挑戰(zhàn)。匯編代碼在預(yù)訓(xùn)練語料庫中相對稀少,可能導(dǎo)致大語言模型難以有效推理其行為。此外,GCC等工業(yè)級編譯器經(jīng)過了數(shù)十年的精心調(diào)校,要在其最高優(yōu)化級別(-O3)的基礎(chǔ)上進一步提升性能,無疑是一項技術(shù)挑戰(zhàn)。
研究團隊巧妙地將強化學(xué)習(xí)技術(shù)應(yīng)用到大語言模型的訓(xùn)練中,以解決低級代碼優(yōu)化的挑戰(zhàn)。如圖1所示,他們使用了近端策略優(yōu)化(Proximal Policy Optimization, PPO)來訓(xùn)練大語言模型,并設(shè)計了同時考慮正確性和性能的獎勵函數(shù)。正確性通過程序特定的測試用例來評估,而性能則通過與gcc -O3基線相比的加速比來衡量。
為了支持這個設(shè)定,研究團隊構(gòu)建了一個包含8,072個真實世界匯編程序的新數(shù)據(jù)集,這些程序源自競爭性編程提交。每個實例包括輸入-輸出測試用例和由編譯器在最高優(yōu)化級別生成的基準匯編代碼,作為進一步優(yōu)化的起點。
在這項研究中,他們評估了包括開源和商業(yè)模型在內(nèi)的21個最先進的語言模型。從基礎(chǔ)模型Qwen2.5-Coder-7B-Instruct開始,經(jīng)過PPO訓(xùn)練后,他們的模型Qwen2.5-Coder-7B-PPO在編譯通過率和測試通過率上都達到了96.0%,平均加速比達到1.47倍,遠超所有其他評估模型,包括Claude-3.7-sonnet。
下面,讓我們一起深入了解這項研究的細節(jié),探索它如何突破傳統(tǒng)編譯優(yōu)化的限制,為代碼性能提升開辟新的可能性。
一、研究背景與問題定義
想象一下你正在開發(fā)一個需要處理海量數(shù)據(jù)的應(yīng)用程序。即使是程序執(zhí)行速度提升1%,也能在長時間運行中節(jié)省大量計算資源和等待時間。在這個場景下,代碼優(yōu)化變得尤為重要。
傳統(tǒng)上,編譯器負責(zé)將我們寫的高級語言代碼(如C語言)轉(zhuǎn)換成計算機能直接執(zhí)行的匯編代碼。在這個過程中,編譯器會應(yīng)用各種優(yōu)化技術(shù)來提高代碼效率。就像一位經(jīng)驗豐富的廚師知道如何在不改變菜肴口味的前提下,通過調(diào)整烹飪步驟來縮短烹飪時間一樣,編譯器會在保持程序功能不變的前提下,使程序運行得更快。
研究團隊關(guān)注的問題是:盡管現(xiàn)代編譯器如GCC已經(jīng)相當(dāng)強大,但它們?nèi)匀灰蕾囉陬A(yù)設(shè)的規(guī)則和轉(zhuǎn)換序列,這使得它們在面對復(fù)雜程序時往往無法找到最優(yōu)解。這就像一位只按照固定菜譜烹飪的廚師,雖然能做出美味佳肴,但可能錯過了更高效的烹飪方法。
研究團隊提出的任務(wù)可以定義為:給定一個用高級語言(如C)編寫的程序C和由gcc -O3編譯生成的匯編程序P,目標是生成一個新的匯編程序P',使得P'在保持與P功能等價的前提下,運行速度更快。
在理想情況下,我們希望新生成的程序P'在整個輸入空間中都與原程序P功能等價。但這個屬性的驗證在一般情況下是不可判定的。因此,研究團隊采用了一種實用的近似方法:使用有限的測試集T = {(xi, yi)}來驗證程序的行為,其中每個輸入-輸出對(xi, yi)都捕捉了程序C預(yù)期的行為。
一個匯編程序P'被認為是有效的,如果它能成功地組裝和鏈接成可執(zhí)行二進制文件。研究團隊用valid(P') ∈ {True, False}來表示這個屬性。而正確程序的集合則被定義為:
S(P) = {P' | valid(P') ∧ ?(xi, yi) ∈ T, P'(xi) = yi}
這表示所有既能成功編譯又能通過所有測試用例的程序集合。
對于性能評估,研究團隊測量了程序P和P'在測試集T上的執(zhí)行時間,分別記為t(P)和t(P')。P'相對于P的加速比被定義為:
Speedup(P') = t(P) / t(P'),如果P'∈S(P)且t(P') < t(P) 1,其他情況
這意味著只有當(dāng)新程序正確且比原程序快時,才會計算實際的加速比;否則,加速比默認為1。
優(yōu)化目標是生成一個候選程序P',使其加速比Speedup(P')最大化。只有S(P)中的程序才有資格獲得加速;任何無法編譯成二進制文件或產(chǎn)生錯誤輸出的候選程序都被賦予默認加速比1。這反映了一種實用的回退策略:當(dāng)生成的程序無效時,系統(tǒng)可以退回到基準P(由gcc -O3編譯),從而確保至少獲得1倍的參考性能。
二、數(shù)據(jù)集構(gòu)建與研究方法
要訓(xùn)練一個能夠優(yōu)化匯編代碼的模型,首先需要高質(zhì)量的數(shù)據(jù)。研究團隊利用CodeNet,這個包含大量競爭性編程提交的龐大語料庫,構(gòu)建了自己的數(shù)據(jù)集。就像建造一座房子需要優(yōu)質(zhì)的建材一樣,構(gòu)建良好的機器學(xué)習(xí)模型同樣需要精心準備的數(shù)據(jù)。
研究團隊的數(shù)據(jù)集由三部分組成:原始C源代碼(C)、使用gcc -O3優(yōu)化級別編譯生成的對應(yīng)x86-64匯編代碼(P),以及測試集(T)。這就像是給模型提供了一個"菜譜"(C源碼)、一個"初始成品"(gcc生成的匯編),以及一套"品鑒標準"(測試集),讓模型學(xué)習(xí)如何在保持食物原味(功能正確性)的前提下,使烹飪過程更加高效(代碼更快)。
由于CodeNet包含超過800萬個C和C++提交,研究團隊無法全部使用。他們采用了一種聰明的抽樣策略:選擇那些從gcc -O0(無優(yōu)化)到gcc -O3(最高優(yōu)化)能獲得最高相對加速比的程序。這種策略有兩個好處:一是傾向于選擇含有復(fù)雜邏輯的程序,這些程序在-O0下表現(xiàn)不佳,但能被-O3有效優(yōu)化;二是創(chuàng)造了更具挑戰(zhàn)性的環(huán)境,因為基準代碼已經(jīng)經(jīng)過編譯器的積極優(yōu)化。
最終的數(shù)據(jù)集包含7,872個訓(xùn)練程序和200個保留用于評估的程序。這些程序平均包含約22行C代碼和130行匯編代碼,每個程序配有約9個測試用例。
接下來,研究團隊采用強化學(xué)習(xí)方法來優(yōu)化大語言模型。他們將任務(wù)概念化為一個標準的上下文多臂賭博機問題,由上下文空間S、動作空間A和獎勵函數(shù)r : S × A → R組成。
想象你在玩一個賭博機游戲,但每次拉動賭博機的手柄前,都會看到一些背景信息(上下文)。在這里,上下文s ∈ S代表一個問題實例,包括源程序C、基線匯編P和相關(guān)測試用例T。而動作a ∈ A對應(yīng)于生成候選匯編程序P~。獎勵函數(shù)r(s, a)根據(jù)生成程序的正確性和性能評估其質(zhì)量。
研究團隊使用近端策略優(yōu)化(PPO)來訓(xùn)練模型。PPO是一種一階策略梯度算法,通過約束每次策略更新與前一個保持接近,從而穩(wěn)定訓(xùn)練過程。具體來說,PPO最大化形式為Es,a[min(ρ(θ)A, clip(ρ(θ), 1 - ε, 1 + ε)A)]的裁剪替代目標,其中ρ(θ) = πθ(a | s)/πθold(a | s)是當(dāng)前策略與先前策略之間的概率比率,A是動作a在狀態(tài)s中的估計優(yōu)勢,ε是限制策略更新到小信任區(qū)域的裁剪系數(shù)。
研究團隊設(shè)計了兩種不同的獎勵函數(shù)變體來指導(dǎo)模型學(xué)習(xí)??梢詫ⅹ剟詈瘮?shù)想象成"教練"的反饋,告訴模型它的生成效果如何。
第一種是"正確性引導(dǎo)的加速比"(CGS),其定義為:
r(s, a) = -1,如果P~編譯失敗 pass(s, a),如果某些測試失敗 1 + α · speedup(s, a),如果所有測試通過
其中,pass(s, a)表示通過的測試用例比例,speedup(s, a)表示相對于基線P的加速比,α是一個控制全部正確情況下加速比相對重要性的常數(shù)。
第二種是"僅加速比"(SO),其定義為:
r(s, a) = 0,如果P~編譯失敗或任何測試失敗 speedup(s, a),其他情況
CGS獎勵函數(shù)提供了密集的信號,即使在最終目標未達成時也能指導(dǎo)策略。它就像是在學(xué)習(xí)烹飪過程中,教練不僅關(guān)注最終菜肴的口感,還會對準備食材、火候控制等中間步驟給予反饋。相比之下,SO定義了一個更直接、更稀疏的目標,只在程序既正確又高效時才給予非零獎勵,類似于教練只關(guān)注最終菜肴的質(zhì)量,不給中間過程任何反饋。
三、實驗設(shè)置與評估方法
為了全面評估大語言模型優(yōu)化匯編代碼的能力,研究團隊設(shè)計了一套嚴謹?shù)膶嶒灧桨?。就像科學(xué)家測試新藥效果需要精確的實驗設(shè)計一樣,評估AI模型的性能同樣需要周密的規(guī)劃。
首先,研究團隊為每個實例構(gòu)建了一個包含原始C程序和使用gcc -O3生成的匯編代碼的提示詞(prompt)。所有測試用例都對模型保密,這就像是給學(xué)生出題,但不提前告訴他們答案。模型被指示只生成優(yōu)化后的x86-64匯編代碼,不包含任何其他文本。
評估指標包括正確性和性能兩個方面。編譯通過率(Compile pass)是生成的匯編能成功編譯為二進制可執(zhí)行文件的問題百分比。測試通過率(Test pass)是編譯后的代碼通過所有測試用例的問題百分比。對于性能,研究團隊測量了相對于gcc -O3基線的加速比。如前所述,任何無法編譯、測試失敗或比基線慢的候選程序都被賦予默認加速比1倍。這反映了實際應(yīng)用中的情況:當(dāng)新方法不起作用時,系統(tǒng)可以回退到gcc -O3輸出,不會造成性能損失。為了捕捉分布行為,研究團隊報告了加速比的25、50(中位數(shù))和75百分位數(shù),以及整個評估集的平均加速比。
研究團隊評估了21個最先進的語言模型,涵蓋了多種架構(gòu)。他們的評估包括頂尖的專有模型,如gpt-4o、o4-mini、gemini-2.0-flash-001和claude-3.7-sonnet,以及開源模型家族,如Llama、DeepSeek和Qwen。此外,他們還評估了基于DeepSeek-R1蒸餾的Qwen和Llama模型,以及基于Code Llama并專為編譯器相關(guān)任務(wù)設(shè)計的最新編譯器基礎(chǔ)模型。所有開源模型都經(jīng)過指令微調(diào)。
為了確保性能評估的準確性,研究團隊使用了hyperfine,這是一個基準測試工具,通過執(zhí)行預(yù)熱運行和多次計時執(zhí)行來減少測量噪聲。對于每個程序的執(zhí)行,他們丟棄前三次運行,并報告接下來十次運行的平均運行時間。
實驗是在配備四塊A100 GPU的單個節(jié)點上進行的。在所有評估模型中,他們選擇Qwen2.5-Coder-7B-Instruct進行訓(xùn)練,原因是它表現(xiàn)出最強的正確性結(jié)果,并且性能還有很大的提升空間。他們有意避免使用特定于編譯器的基礎(chǔ)模型,以保持通用性。
四、實驗結(jié)果與分析
經(jīng)過嚴謹?shù)膶嶒炘O(shè)計,研究團隊得到了一系列令人振奮的結(jié)果。就像美食評論家會從多個維度評價一道菜品一樣,研究團隊也從多個角度分析了各個模型的表現(xiàn)。
從表2可以看出,大多數(shù)模型在生成高性能匯編代碼方面面臨挑戰(zhàn):大部分只能達到1.00倍的加速比,編譯通過率和測試通過率較低。在基線模型中,claude-3.7-sonnet和DeepSeek-V3表現(xiàn)最佳,測試通過率超過40%,平均加速比分別達到1.22倍和1.21倍。值得注意的是,一些模型如DeepSeek-R1完全無法生成有效的匯編,而o4-mini的測試通過率僅為4.5%。這些結(jié)果凸顯了任務(wù)的難度,也說明了需要針對性方法的必要性。
編譯器基礎(chǔ)模型(以llm-compiler-為前綴)是在匯編代碼和編譯器中間表示上預(yù)訓(xùn)練的。其中,llm-compiler-13b在正確性和加速比方面都表現(xiàn)出較強的性能。相比之下,經(jīng)過微調(diào)的變體(-ftd)表現(xiàn)不佳,可能是因為它們適應(yīng)了將x86-64和ARM匯編反匯編為LLVM-IR等任務(wù),而非優(yōu)化匯編代碼以提高執(zhí)行性能。
研究團隊選擇Qwen2.5-Coder-7B-Instruct作為強化學(xué)習(xí)訓(xùn)練的起點,因為它具有較強的編譯通過率(79.0%)和最高的測試通過率(61.0%)。經(jīng)過PPO微調(diào)后,該模型在兩項指標上都達到了96.0%,并將平均加速比從1.10倍提高到1.47倍。值得注意的是,它是唯一一個在25百分位上展示出明顯加速的模型,并且在所有評估指標上都優(yōu)于其他所有模型,包括正確性、平均加速比和加速比百分位數(shù)。
研究團隊還對獎勵函數(shù)設(shè)計進行了深入分析。他們評估了兩種獎勵設(shè)計:正確性引導(dǎo)的加速比(CGS)和僅加速比(SO)。如表3所示,兩種變體都實現(xiàn)了較高的編譯通過率和測試通過率,但SO產(chǎn)生了更好的性能。去除中間的塑形信號似乎有助于模型專注于終端目標。這就像是學(xué)習(xí)一項復(fù)雜技能時,有時直接針對最終目標練習(xí),比分解成多個簡單步驟學(xué)習(xí)更有效。研究團隊還嘗試了不同的CGS縮放因子α(5或10),發(fā)現(xiàn)它對結(jié)果影響不大。
這些結(jié)果表明,稀疏的、終端的獎勵(SO)在這種情況下更有效。由于基礎(chǔ)模型已經(jīng)達到61.0%的測試通過率,正確性不是瓶頸;直接優(yōu)化加速比提供了更強的訓(xùn)練信號。
研究團隊還進行了一項關(guān)鍵的消融研究:大語言模型是否能直接從C代碼編譯出高性能匯編,而不依賴編譯器生成的基線匯編?為了調(diào)查這個問題,他們比較了兩種評估設(shè)置:(1)提供C源代碼和gcc -O3匯編(默認,表4中的"w/ O3"),(2)只提供C源代碼("w/o O3")。
表4顯示,移除基線匯編導(dǎo)致性能嚴重下降。例如,Qwen2.5-Coder-7B-PPO從96.0%的正確性和1.47倍的加速比降至0.0%和1.00倍。即使是強大的模型如Claude-3.7-sonnet也出現(xiàn)了顯著下降。
這些結(jié)果表明,當(dāng)前大語言模型直接從C編譯到優(yōu)化匯編的能力仍然有限。編譯器輸出為大語言模型提供了可靠的參考。這支持了研究框架的設(shè)計:使用gcc -O3作為強化學(xué)習(xí)的有效起點。雖然未來的工作可能會探索直接從C生成,但由于缺乏編譯器指導(dǎo),這可能會更加具有挑戰(zhàn)性。
五、案例分析與實際應(yīng)用
為了更直觀地理解大語言模型如何優(yōu)化匯編代碼,研究團隊展示了一個代表性例子,如圖2所示。這個例子清晰地展示了語言模型如何發(fā)現(xiàn)比先進編譯器更高效的優(yōu)化方案。
原始C函數(shù)計算"人口計數(shù)"(也稱為位計數(shù),即計算一個數(shù)二進制表示中有多少個1)。這個函數(shù)通過重復(fù)移位輸入并累加其最低有效位來計算結(jié)果。想象一下,這就像是你手動數(shù)一串燈泡中有多少個是亮著的,一個一個地檢查。
gcc -O3生成的匯編代碼保留了這個循環(huán)結(jié)構(gòu),依賴于顯式的位操作和條件分支來計算結(jié)果。這就像是編譯器按部就班地遵循了C代碼的邏輯,雖然做了一些基本優(yōu)化,但基本思路沒變。
而大語言模型生成的代碼則顯著不同:它用一條popcnt指令替換了整個循環(huán)。這條指令是現(xiàn)代x86-64架構(gòu)支持的,能在一次操作中執(zhí)行相同的計算,從而顯著減少了指令數(shù)量和運行時開銷。這就像是發(fā)現(xiàn)了一個專用的計數(shù)器,可以立即告訴你有多少燈泡是亮的,而不必一個一個地檢查。
這種轉(zhuǎn)換超出了gcc -O3的能力范圍,因為編譯器應(yīng)用的是預(yù)設(shè)的基于規(guī)則的優(yōu)化傳遞序列,而不進行這種語義級別的重寫。大語言模型能夠合成功能等價的代碼,利用編譯器未使用的硬件級指令。這個例子展示了語言模型通過探索更廣泛的語義保留程序轉(zhuǎn)換空間來優(yōu)化匯編的潛力。
這種優(yōu)化能力在實際應(yīng)用中有著廣泛的潛在價值。在性能敏感的領(lǐng)域,如高頻交易、實時圖像處理或游戲引擎,即使是微小的性能提升也能帶來顯著的實際好處。例如,在處理大量數(shù)據(jù)的服務(wù)器應(yīng)用中,1.47倍的平均加速可以直接轉(zhuǎn)化為能源成本的節(jié)約和服務(wù)容量的提升。
此外,這種方法還可以應(yīng)用于資源受限的環(huán)境,如嵌入式系統(tǒng)或移動設(shè)備,在這些環(huán)境中,計算資源和電池壽命都是寶貴的。通過生成更高效的代碼,可以延長設(shè)備使用時間或?qū)崿F(xiàn)更復(fù)雜的功能。
在教育方面,這項研究也提供了寶貴的見解。通過觀察大語言模型如何優(yōu)化代碼,開發(fā)者可以學(xué)習(xí)到新的優(yōu)化技術(shù)和模式,這些可能不在傳統(tǒng)編譯器教科書中。就像從大師的棋譜中學(xué)習(xí)一樣,開發(fā)者可以從AI生成的優(yōu)化中獲得啟發(fā),提升自己的編程技能。
六、局限性與未來工作
盡管這項研究取得了令人矚目的成果,研究團隊也坦誠地討論了當(dāng)前方法的幾點局限性。就像任何工具都有其適用范圍一樣,他們的方法也面臨一些挑戰(zhàn)。
一個關(guān)鍵的局限是缺乏形式化的正確性保證。雖然研究團隊通過輸入-輸出測試用例驗證生成的程序,但這種測試本質(zhì)上是不完整的,可能會忽略邊緣情況。就像用幾個樣本測試一道菜的口味,無法保證在所有情況下都美味一樣,測試無法涵蓋所有可能的輸入。因此,與Stoke等完全驗證的系統(tǒng)不同,大語言模型生成的匯編可能會在某些情況下產(chǎn)生錯誤結(jié)果或表現(xiàn)出未定義行為。這一局限反映了編程語言領(lǐng)域的一個更廣泛的挑戰(zhàn):在一般情況下,驗證兩個任意程序之間的語義等價性是不可判定的問題。
另一個局限是在實際硬件上測量性能的固有隨機性。盡管研究團隊通過重復(fù)測量來減少噪聲,但低級硬件波動仍可能導(dǎo)致加速比估計出現(xiàn)變異。這種不確定性在現(xiàn)實環(huán)境中很難完全消除。雖然前人工作采用了基于模擬器的評估,但模擬器可能無法忠實捕捉實際硬件性能。
最后,觀察到的性能提升可能無法跨機器泛化。模型可能隱式學(xué)習(xí)并利用特定硬件特性,如緩存大小。因此,在一臺機器上訓(xùn)練的模型在部署到不同機器時可能無法保持其有效性。這就像一道適合特定烹飪設(shè)備的食譜,在使用不同設(shè)備時可能需要調(diào)整。
展望未來,研究團隊提出了幾個有前途的研究方向。首先,雖然他們使用了近端策略優(yōu)化(PPO),未來可以探索替代的強化學(xué)習(xí)算法,如GRPO。其次,擴展到更大、更多樣化的數(shù)據(jù)集,特別是涉及競爭性編程之外的性能關(guān)鍵代碼,將使設(shè)置更加現(xiàn)實和適用。第三,結(jié)合強化學(xué)習(xí)和監(jiān)督微調(diào)可能會帶來額外收益,盡管目前尚不清楚在gcc -O3輸出上進行訓(xùn)練是否會提供額外價值。
另一個有趣的方向是融入交互式改進循環(huán),模型可以使用錯誤或性能測量的反饋迭代更新其輸出。最后,將這種方法從x86-64擴展到其他架構(gòu),如MIPS、ARM或GPU編程,可以擴大其適用性和影響力。
七、結(jié)論與總結(jié)
本研究探索了使用大語言模型優(yōu)化匯編代碼的潛力,這是一個能夠通過精細控制執(zhí)行過程實現(xiàn)性能提升的領(lǐng)域,而這些優(yōu)化在高級語言中難以表達。傳統(tǒng)編譯器依賴固定的基于規(guī)則的轉(zhuǎn)換,但由于優(yōu)化空間的復(fù)雜性,它們在生成最優(yōu)代碼方面面臨根本性挑戰(zhàn)。
為了解決這個問題,研究團隊?wèi)?yīng)用強化學(xué)習(xí)來微調(diào)大語言模型,使用近端策略優(yōu)化(PPO)和基于正確性和性能的獎勵函數(shù)。為了支持這項研究,他們引入了一個包含8,072個真實世界C程序的基準,這些程序配有編譯器生成的基線匯編和測試用例。
經(jīng)過訓(xùn)練的模型Qwen2.5-Coder-7B-PPO在編譯通過率和測試通過率上都達到了96.0%,平均加速比達到1.47倍,優(yōu)于所有其他評估模型。消融研究表明,強調(diào)最終加速比而非中間正確性信號的獎勵函數(shù)能夠更有效地指導(dǎo)訓(xùn)練。
這些結(jié)果表明,強化學(xué)習(xí)能夠釋放大語言模型作為匯編代碼性能的有效優(yōu)化器的潛力。通過學(xué)習(xí)識別和應(yīng)用編譯器可能錯過的優(yōu)化機會,經(jīng)過訓(xùn)練的模型能夠生成既正確又高效的代碼,為性能敏感的應(yīng)用提供了寶貴的工具。
雖然仍存在一些局限,如缺乏形式化正確性保證和性能測量的固有隨機性,但這項研究為未來探索打開了新的可能性。隨著這一領(lǐng)域的發(fā)展,我們可以期待大語言模型在代碼優(yōu)化方面發(fā)揮越來越重要的作用,與傳統(tǒng)編譯器形成互補,共同推動軟件性能的邊界。
在這個計算資源日益珍貴的時代,能夠自動生成更高效的代碼不僅具有學(xué)術(shù)價值,更有著廣泛的實際應(yīng)用前景。從高性能計算到資源受限的嵌入式系統(tǒng),這種技術(shù)都可能帶來顯著的效益,使軟件不僅能夠完成任務(wù),還能以最高效的方式完成。
好文章,需要你的鼓勵
騰訊ARC實驗室推出AudioStory系統(tǒng),首次實現(xiàn)AI根據(jù)復(fù)雜指令創(chuàng)作完整長篇音頻故事。該系統(tǒng)結(jié)合大語言模型的敘事推理能力與音頻生成技術(shù),通過交錯式推理生成、解耦橋接機制和漸進式訓(xùn)練,能夠?qū)?fù)雜指令分解為連續(xù)音頻場景并保持整體連貫性。在AudioStory-10K基準測試中表現(xiàn)優(yōu)異,為AI音頻創(chuàng)作開辟新方向。
Meta與特拉維夫大學(xué)聯(lián)合研發(fā)的VideoJAM技術(shù),通過讓AI同時學(xué)習(xí)外觀和運動信息,顯著解決了當(dāng)前視頻生成模型中動作不連貫、違反物理定律的核心問題。該技術(shù)僅需添加兩個線性層就能大幅提升運動質(zhì)量,在多項測試中超越包括Sora在內(nèi)的商業(yè)模型,為AI視頻生成的實用化應(yīng)用奠定了重要基礎(chǔ)。
上海AI實驗室發(fā)布OmniAlign-V研究,首次系統(tǒng)性解決多模態(tài)大語言模型人性化對話問題。該研究創(chuàng)建了包含20萬高質(zhì)量樣本的訓(xùn)練數(shù)據(jù)集和MM-AlignBench評測基準,通過創(chuàng)新的數(shù)據(jù)生成和質(zhì)量管控方法,讓AI在保持技術(shù)能力的同時顯著提升人性化交互水平,為AI價值觀對齊提供了可行技術(shù)路徑。
谷歌DeepMind團隊開發(fā)的GraphCast是一個革命性的AI天氣預(yù)測模型,能夠在不到一分鐘內(nèi)完成10天全球天氣預(yù)報,準確性超越傳統(tǒng)方法90%的指標。該模型采用圖神經(jīng)網(wǎng)絡(luò)技術(shù),通過學(xué)習(xí)40年歷史數(shù)據(jù)掌握天氣變化規(guī)律,在極端天氣預(yù)測方面表現(xiàn)卓越,能耗僅為傳統(tǒng)方法的千分之一,為氣象學(xué)領(lǐng)域帶來了效率和精度的雙重突破。