模型简介
模型特点
模型能力
使用案例
🚀 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. 适用法律和管辖权
本协议受加利福尼亚州法律管辖和解释,不考虑法律选择原则,《联合国国际货物销售合同公约》不适用于本协议。加利福尼亚州的法院对因本协议引起的任何争议具有专属管辖权。



