模型概述
模型特點
模型能力
使用案例
🚀 Meta大語言模型編譯器(LLM Compiler)
Meta大語言模型編譯器(LLM Compiler)是一款基於Code Llama構建的先進大語言模型,在代碼優化和編譯器推理方面表現出色。它不僅免費供研究和商業使用,還提供了基礎模型和針對代碼大小優化及反彙編任務進一步微調的版本,能有效提升代碼性能和開發體驗。
🚀 快速開始
若要使用此模型,請確保安裝transformers
:
pip install transformers accelerate
使用模型編譯器功能的示例代碼可在 llm_compiler_demo.py 中找到。
以下代碼展示了默認功能。你可能需要設置HuggingFace訪問令牌 - 詳情見(https://huggingface.co/docs/hub/security-tokens)。
from transformers import AutoTokenizer
import transformers
import torch
model = "facebook/llm-compiler-7b"
tokenizer = AutoTokenizer.from_pretrained(model)
pipeline = transformers.pipeline(
"text-generation",
model=model,
torch_dtype=torch.float16,
device_map="auto",
)
sequences = pipeline(
'%3 = alloca i32, align 4',
do_sample=True,
top_k=10,
temperature=0.1,
top_p=0.95,
num_return_sequences=1,
eos_token_id=tokenizer.eos_token_id,
max_length=200,
)
for seq in sequences:
print(f"Result: {seq['generated_text']}")
✨ 主要特性
- 性能卓越:基於Code Llama構建,在代碼優化和編譯器推理方面性能提升顯著。
- 免費使用:研究和商業用途均可免費使用。
- 版本多樣:提供基礎模型 LLM Compiler 和進一步微調的 LLM Compiler FTD 版本。
- 理解深刻:對編譯器優化的理解遠超現有公開可用的大語言模型,20%的時間能完美模擬編譯器。
- 效果出色:在代碼大小優化和反彙編任務上取得了最先進的成果。
📦 安裝指南
使用此模型需安裝transformers
和accelerate
庫,可通過以下命令進行安裝:
pip install transformers accelerate
💻 使用示例
基礎用法
from transformers import AutoTokenizer
import transformers
import torch
model = "facebook/llm-compiler-7b"
tokenizer = AutoTokenizer.from_pretrained(model)
pipeline = transformers.pipeline(
"text-generation",
model=model,
torch_dtype=torch.float16,
device_map="auto",
)
sequences = pipeline(
'%3 = alloca i32, align 4',
do_sample=True,
top_k=10,
temperature=0.1,
top_p=0.95,
num_return_sequences=1,
eos_token_id=tokenizer.eos_token_id,
max_length=200,
)
for seq in sequences:
print(f"Result: {seq['generated_text']}")
📚 詳細文檔
LLM Compiler工作原理
LLM Compiler是Code Llama的專業化版本,是一款利用深度學習優化代碼的前沿工具。它在大量的LLVM彙編(IR)、x86_64、ARM和CUDA彙編代碼上進行了預訓練,能夠預測給定LLVM彙編代碼和opt
優化器的優化序列後,代碼大小的變化以及應用這些優化後的輸出代碼。它對優化編譯器行為的理解程度很高,在許多情況下能完美複製其輸出。
此外,為了展示其解決複雜編譯器優化問題的能力,LLM Compiler針對兩個特定的下游任務進行了微調:
- 代碼大小優化:給定一段LLVM彙編代碼,預測
opt
使用的最佳優化序列以最小化代碼大小。 - 反彙編:從一段x86_64或ARM彙編代碼生成LLVM IR。
我們發佈了7B和13B參數兩種大小的LLM Compiler模型,模型在16,000個標記的上下文窗口上進行訓練。這兩種模型滿足不同的服務和延遲要求,例如7B模型可以在單個GPU上服務,更適合低延遲要求的任務,而13B模型則能返回最佳結果。
LLM Compiler性能
我們在保留測試集上測試了LLM Compiler模型在模擬編譯器轉換、預測最佳優化序列和反彙編中間表示方面的性能,並與Code Llama和GPT - 4進行了比較。
在模擬編譯器優化方面,我們給模型提供未優化的中間表示樣本和隨機生成的優化列表,然後讓模型生成應用優化後的相應IR。結果顯示,Code Llama由於對IR瞭解甚少,無法達到較高的準確率,而LLM Compiler在20%的情況下能逐字符匹配預期的彙編代碼。
在代碼大小優化任務中,我們讓模型為opt
預測最佳優化序列以最小化代碼大小。只有LLM Compiler FTD模型在 -Oz 基礎上實現了代碼大小的改進,13B參數模型在61%的情況下生成的目標文件比 -Oz 更小。
在反彙編任務中,我們給模型提供x86_64或ARM彙編代碼,讓其生成相應的LLVM IR,然後將生成的反彙編IR再轉換回彙編代碼,通過比較原始彙編代碼和往返結果的BLEU分數來評估反彙編的準確性。LLM Compiler FTD 13B模型在往返彙編的準確性(往返BLEU分數)方面表現最佳,並且最常產生完美的反彙編結果。
模型發佈
Meta堅信AI模型,尤其是用於編碼的模型,採用開放策略能促進創新和安全。通過發佈LLM Compiler等模型,整個社區可以探索其潛力,發現問題並修復漏洞。模型權重可在Hugging Face上獲取。
負責任使用
我們的研究論文深入探討了LLM Compiler的開發過程、基準測試方法以及模型的侷限性,同時討論了面臨的問題和採取的緩解措施。建議開發者使用特定於編譯器的評估基準來評估模型,由於編譯器並非無缺陷,任何建議的編譯器優化都必須經過嚴格測試。當模型進行反彙編時,應確認其準確性。
生成式AI優化的未來
LLM Compiler旨在支持編譯器研究人員和工程師,但仍有許多用例有待支持。我們希望LLM Compiler能啟發他人利用大語言模型為研究和商業產品創建新的創新工具。
模型卡
LLM Compiler是一系列預訓練和微調的生成式文本模型,參數規模從70億到130億不等。這是Hugging Face Transformers格式下70億參數基礎模型版本的倉庫,該模型專為代碼優化設計。其他模型的鏈接可在底部索引中找到。
參數數量 | 基礎模型 | 針對代碼大小和反彙編微調的模型 |
---|---|---|
7B | [facebook/llm - compiler - 7b](https://huggingface.co/facebook/llm - compiler - 7b) | [facebook/llm - compiler - 7b - ftd](https://huggingface.co/facebook/llm - compiler - 7b - ftd) |
13B | [facebook/llm - compiler - 13b](https://huggingface.co/facebook/llm - compiler - 13b) | [facebook/llm - compiler - 13b - ftd](https://huggingface.co/facebook/llm - compiler - 13b - ftd) |
模型詳情
- 模型開發者:Meta
- 模型變體:LLM Compiler有7B和13B參數兩種模型大小,提供基礎模型和針對代碼大小和反彙編進行指令微調的版本。
- 本倉庫包含:70億參數的基礎模型。
- 輸入:模型僅接受文本輸入。
- 示例提示:不同用例的示例見倉庫中的
llm_compiler_demo.py
。 - 輸出:模型僅生成文本輸出。
- 模型架構:LLM Compiler是一種使用優化變壓器架構的自迴歸語言模型。
- 模型訓練時間:2024年1月至6月。
- 模型狀態:這是一個基於離線數據集訓練的靜態模型。
- 許可證:可在 [https://ai.meta.com/resources/models - and - libraries/llama - downloads/](https://ai.meta.com/resources/models - and - libraries/llama - downloads/) 獲取自定義商業許可證。
- 研究論文:更多信息可在論文 "[Meta大語言模型編譯器:編譯器優化的基礎模型](https://ai.meta.com/research/publications/meta - large - language - model - compiler - foundation - models - of - compiler - optimization/)" 中找到。
預期用途
- 預期用例:LLM Compiler旨在用於英語、相關編程語言、LLVM IR、x86_64彙編和ARM彙編的商業和研究用途。
- 非預期用途:以任何違反適用法律法規(包括貿易合規法律)的方式使用;使用英語以外的語言;以任何違反 [可接受使用政策](https://llama.meta.com/llama3/use - policy) 和LLM Compiler及其變體許可協議的方式使用。
硬件和軟件
- 訓練因素:我們使用了自定義訓練庫,發佈模型的訓練和微調在Meta的研究超級集群上進行。
- 碳足跡:總體而言,訓練所有LLM Compiler模型需要在A100 - 80GB(TDP為350 - 400W)類型的硬件上進行14,000 GPU小時的計算,不包括Code Llama的訓練。估計的tCO2eq排放的100%由Meta的可持續發展計劃抵消。
訓練數據
此處報告的所有實驗和發佈的模型均使用與Code Llama相同的數據進行訓練和微調,但權重不同(詳情見 [研究論文](https://ai.meta.com/research/publications/llm - compiler - foundation - models - for - compiler - optimization/) 第2節和表1)。
評估結果
研究論文第3節提供了主要模型的評估和詳細消融實驗結果,第4節提供了安全評估結果。
倫理考慮和侷限性
LLM Compiler及其變體是一項新技術,使用時存在風險。到目前為止的測試僅在英語環境中進行,無法涵蓋所有場景。因此,與所有大語言模型一樣,LLM Compiler的潛在輸出無法提前預測,模型在某些情況下可能會對用戶提示產生不準確或令人反感的響應。因此,在部署LLM Compiler的任何應用程序之前,開發者應針對模型的特定應用進行安全測試和調整。請參閱 [負責任使用指南](https://ai.meta.com/llama/responsible - use - guide)。
🔧 技術細節
LLM Compiler基於Code Llama構建,在大量的LLVM彙編(IR)、x86_64、ARM和CUDA彙編代碼上進行預訓練,學習編譯器的行為和優化規則。它使用優化的變壓器架構,是一種自迴歸語言模型。
在訓練過程中,模型使用自定義訓練庫,在Meta的研究超級集群上進行訓練和微調。訓練數據與Code Llama相同,但權重不同,以適應編譯器優化的特定任務。
模型在16,000個標記的上下文窗口上進行訓練,以處理較長的代碼序列。通過預訓練和針對特定下游任務的微調,LLM Compiler能夠準確預測編譯器優化的效果,為代碼優化和反彙編任務提供高質量的解決方案。
📄 許可證
使用此模型需遵守 LLM Compiler許可協議,該協議納入了 [Llama材料可接受使用政策](https://llama.meta.com/llama3/use - policy)。
模型使用許可協議詳情
1. 許可權利和再分發
a. 權利授予:您被授予在Meta的知識產權或其他權利下,對LLM Compiler材料進行非排他性、全球性、不可轉讓和免版稅的有限許可,以使用、複製、分發、拷貝、創建衍生作品並對LLM Compiler材料進行修改。 b. 再分發和使用: i. 如果您分發或提供LLM Compiler材料(或其任何衍生作品),或使用其中任何內容的產品或服務(包括另一個AI模型),您應(A)隨任何此類LLM Compiler材料提供本協議的副本;(B)在相關網站、用戶界面、博客文章、關於頁面或產品文檔上顯著顯示 “Built with LLM Compiler”。如果您使用LLM Compiler材料創建、訓練、微調或以其他方式改進一個AI模型並進行分發或提供,您還應在任何此類AI模型名稱的開頭包含 “LLM Compiler”。 ii. 如果您作為集成最終用戶產品的一部分從被許可方處接收LLM Compiler材料或其任何衍生作品,則本協議第2條不適用於您。 iii. 您必須在分發的所有LLM Compiler材料副本中,在作為此類副本一部分分發的 “Notice” 文本文件中保留以下歸屬聲明:“LLM Compiler is licensed under the LLM Compiler License, Copyright © Meta Platforms, Inc. All Rights Reserved.” iv. 您對LLM Compiler材料的使用必須遵守適用的法律法規(包括貿易合規法律法規),並遵守 [Llama材料可接受使用政策](https://llama.meta.com/llama3/use - policy),該政策特此通過引用併入本協議。 v. 您不得使用LLM Compiler材料或其任何輸出或結果來改進任何其他大語言模型。
2. 額外商業條款
如果在LLM Compiler發佈日期,被許可方或其關聯方提供的產品或服務的月活躍用戶在前一個日曆月超過7億,則您必須向Meta請求許可,Meta可自行決定是否授予您許可。在Meta明確授予您此類權利之前,您無權行使本協議下的任何權利。
3. 保修免責聲明
除非適用法律要求,LLM Compiler材料及其任何輸出和結果按 “現狀” 提供,不提供任何形式的保修。Meta明確放棄所有形式的明示或暗示保修,包括但不限於所有權、不侵權、適銷性或特定用途適用性的保修。您獨自負責確定使用或再分發LLM Compiler材料的適當性,並承擔使用LLM Compiler材料及其任何輸出和結果的相關風險。
4. 責任限制
在任何情況下,Meta或其關聯方均不對因本協議引起的任何利潤損失或任何間接、特殊、後果性、偶然、懲戒性或懲罰性損害承擔責任,無論責任理論是合同、侵權、疏忽、產品責任還是其他。即使Meta或其關聯方已被告知此類損害的可能性。
5. 知識產權
a. 本協議未授予商標許可,在與LLM Compiler材料相關的情況下,除非為合理和慣常描述和再分發LLM Compiler材料所需,或如本節5(a)所述,Meta和被許可方均不得使用對方或其關聯方擁有或關聯的任何名稱或標記。Meta特此授予您僅為遵守第1.b.i條最後一句所需使用 “LLM Compiler” (“標記”)的許可。您應遵守Meta的品牌指南(目前可在 [https://about.meta.com/brand/resources/meta/company - brand/](https://about.meta.com/brand/resources/meta/company - brand/) 訪問)。因您使用標記產生的所有商譽歸Meta所有。 b. 鑑於Meta對LLM Compiler材料及其衍生作品的所有權,就您對LLM Compiler材料所做的任何衍生作品和修改而言,在您和Meta之間,您是並將是此類衍生作品和修改的所有者。 c. 如果您對Meta或任何實體提起訴訟或其他法律程序(包括訴訟中的交叉索賠或反訴),聲稱LLM Compiler材料或LLM Compiler的輸出或結果,或上述任何部分構成侵犯您擁有或可許可的知識產權或其他權利,則本協議授予您的任何許可自提起此類訴訟或索賠之日起終止。您應賠償並使Meta免受因您使用或分發LLM Compiler材料引起的任何第三方索賠。
6. 期限和終止
本協議自您接受本協議或訪問LLM Compiler材料之日起生效,並將持續有效,直至根據本協議的條款和條件終止。如果您違反本協議的任何條款和條件,Meta可終止本協議。協議終止後,您應刪除並停止使用LLM Compiler材料。第3、4和7條在協議終止後仍然有效。
7. 適用法律和管轄權
本協議受加利福尼亞州法律管轄和解釋,不考慮法律選擇原則,《聯合國國際貨物銷售合同公約》不適用於本協議。加利福尼亞州的法院對因本協議引起的任何爭議具有專屬管轄權。



