模型简介
模型特点
模型能力
使用案例
🚀 Code Llama
Code Llama是一系列预训练和微调的生成式文本模型,参数规模从70亿到700亿不等。本仓库是Hugging Face Transformers格式的700亿参数指令微调版本。该模型专为通用代码合成和理解而设计。其他模型的链接可在底部索引中找到。
🚀 快速开始
要使用此模型,请确保安装transformers
:
pip install transformers accelerate
聊天使用
700亿参数的指令模型与较小版本使用不同的提示模板。若要在transformers
中使用它,建议使用内置的聊天模板:
from transformers import AutoTokenizer, AutoModelForCausalLM
import transformers
import torch
model_id = "meta-llama/CodeLlama-70b-Instruct-hf"
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(
model_id,
torch_dtype=torch.float16,
device_map="auto",
)
chat = [
{"role": "system", "content": "You are a helpful and honest code assistant expert in JavaScript. Please, provide all answers to programming questions in JavaScript"},
{"role": "user", "content": "Write a function that computes the set of sums of all contiguous sublists of a given list."},
]
inputs = tokenizer.apply_chat_template(chat, return_tensors="pt").to("cuda")
output = model.generate(input_ids=inputs, max_new_tokens=200)
output = output[0].to("cpu")
print(tokenizer.decode(output))
也可以将该模型用于文本或代码补全。此示例使用transformers
的pipeline
接口:
from transformers import AutoTokenizer
import transformers
import torch
model_id = "meta-llama/CodeLlama-70b-hf"
tokenizer = AutoTokenizer.from_pretrained(model_id)
pipeline = transformers.pipeline(
"text-generation",
model=model_id,
torch_dtype=torch.float16,
device_map="auto",
)
sequences = pipeline(
'def fibonacci(',
do_sample=True,
temperature=0.2,
top_p=0.9,
num_return_sequences=1,
eos_token_id=tokenizer.eos_token_id,
max_length=100,
)
for seq in sequences:
print(f"Result: {seq['generated_text']}")
✨ 主要特性
- [x] 代码补全。
- [ ] 代码填充。
- [x] 指令/聊天。
- [ ] Python专业支持。
📚 详细文档
聊天提示
Code Llama 70B Instruct的聊天提示格式与之前的Llama 2或Code Llama模型不同。如前所述,使用它的最简单方法是借助分词器的聊天模板。如果需要手动构建字符串或标记,可按以下方法操作。
我们将使用以下虚构对话进行测试:
chat = [
{"role": "system", "content": "System prompt "},
{"role": "user", "content": "First user query"},
{"role": "assistant", "content": "Model response to first query"},
{"role": "user", "content": "Second user query"},
]
首先,让我们看看使用聊天模板时提示的样子:
tokenizer.apply_chat_template(chat, tokenize=False)
'<s>Source: system\n\n System prompt <step> Source: user\n\n First user query <step> Source: assistant\n\n Model response to first query <step> Source: user\n\n Second user query <step> Source: assistant\nDestination: user\n\n '
因此,对话的每一回合都有一个Source
(system
、user
或assistant
),然后内容会在两个换行符和一个空格后出现。回合之间用特殊标记<step>
分隔。在最后一回合(必须来自user
)之后,我们使用特殊语法Source: assistant\nDestination: user\n\n
邀请模型进行回复。让我们看看如何使用Python循环构建相同的字符串:
output = "<s>"
for m in chat:
output += f"Source: {m['role']}\n\n {m['content'].strip()}"
output += " <step> "
output += "Source: assistant\nDestination: user\n\n "
output
'<s>Source: system\n\n System prompt <step> Source: user\n\n First user query <step> Source: assistant\n\n Model response to first query <step> Source: user\n\n Second user query <step> Source: assistant\nDestination: user\n\n '
为了验证我们的操作是否正确,我们将与原始GitHub仓库中的参考代码进行比较。我们使用相同的对话,并使用dialog_prompt_tokens
函数对其进行分词,得到以下标记:
reference_tokens = [1, 7562, 29901, 1788, 13, 13, 2184, 9508, 32015, 7562, 29901, 1404, 13, 13, 3824, 1404, 2346, 32015, 7562, 29901, 20255, 13, 13, 8125, 2933, 304, 937, 2346, 32015, 7562, 29901, 1404, 13, 13, 6440, 1404, 2346, 32015, 7562, 29901, 20255, 13, 14994, 3381, 29901, 1404, 13, 13, 29871]
让我们看看使用Python循环构建的字符串会得到什么结果。请注意,我们不添加“特殊标记”,因为字符串已经以<s>
(句子开始标记)开头:
tokens = tokenizer.encode(output, add_special_tokens=False)
assert reference_tokens == tokens
同样,让我们验证聊天模板是否生成相同的标记序列:
assert reference_tokens == tokenizer.apply_chat_template(chat)
最后需要注意的是,如果对话不是以system
回合开始,原始代码会插入一个内容为空的system
回合。
模型详情
注意:此模型的使用受Meta许可证的约束。Meta开发并公开发布了Code Llama系列大语言模型(LLM)。
属性 | 详情 |
---|---|
模型开发者 | Meta |
变体 | Code Llama有四种模型规模和三种变体: - Code Llama:用于通用代码合成和理解的基础模型 - Code Llama - Python:专门为Python设计 - Code Llama - Instruct:用于遵循指令和更安全的部署 所有变体都有70亿、130亿、340亿和700亿参数的版本。 |
本仓库包含 | 700亿参数模型的指令版本。 |
输入 | 模型仅接受文本输入。 |
输出 | 模型仅生成文本输出。 |
模型架构 | Code Llama是一种自回归语言模型,使用优化的Transformer架构。它经过了最多16k标记的微调。此变体不支持长达100k标记的长上下文。 |
模型日期 | Code Llama及其变体于2023年1月至2024年1月期间进行训练。 |
状态 | 这是一个在离线数据集上训练的静态模型。随着我们根据社区反馈改进模型安全性,未来将发布Code Llama - Instruct的新版本。 |
许可证 | 可在此处获取自定义商业许可证。 |
研究论文 | 更多信息可在论文“Code Llama: Open Foundation Models for Code”或其arXiv页面中找到。 |
预期用途
预期用例
Code Llama及其变体旨在用于英语和相关编程语言的商业和研究用途。基础模型Code Llama可适用于各种代码合成和理解任务,Code Llama - Python专门用于处理Python编程语言,Code Llama - Instruct则更安全地用于代码助手和生成应用程序。
超出范围的用途
- 以任何违反适用法律法规(包括贸易合规法律)的方式使用。
- 使用英语以外的语言。
- 以Code Llama及其变体的可接受使用政策和许可协议所禁止的任何其他方式使用。
硬件和软件
训练因素
我们使用了自定义训练库。已发布模型的训练和微调是在Meta的研究超级集群上进行的。
碳足迹
总体而言,训练所有12个Code Llama模型需要在A100 - 80GB(TDP为350 - 400W)类型的硬件上进行1400K GPU小时的计算。估计总排放量为228.55 tCO2eq,其中100%由Meta的可持续发展计划抵消。
评估结果
请参阅研究论文第3节中主要模型的评估和详细消融研究,以及第4节中的安全评估。
伦理考虑和局限性
Code Llama及其变体是一种新技术,使用时存在风险。迄今为止进行的测试均使用英语,且未涵盖也不可能涵盖所有场景。因此,与所有大语言模型一样,Code Llama的潜在输出无法提前预测,在某些情况下,模型可能会对用户提示产生不准确或令人反感的响应。因此,在部署Code Llama的任何应用程序之前,开发者应针对其特定应用对模型进行安全测试和调整。
请参阅此处提供的负责任使用指南。
模型访问许可说明
⚠️ 重要提示
你需要与Meta共享联系信息才能访问此模型。点击下方的“提交”按钮,即表示你同意遵守《LLAMA 2社区许可协议》。
LLAMA 2社区许可协议
“协议”指本协议中规定的使用、复制、分发和修改Llama材料的条款和条件。 “文档”指Meta在此处分发的Llama 2随附的规范、手册和文档。 “被许可方”或“你”指你,或你的雇主,或任何其他人或实体(如果你代表该人或实体签订本协议),且你已达到适用法律、规则或法规要求的提供法律同意的年龄,并且如果你代表你的雇主或其他人员或实体签订本协议,你具有约束他们的合法权力。 “Llama 2”指Meta在此处分发的基础大语言模型、软件和算法,包括机器学习模型代码、训练好的模型权重、推理启用代码、训练启用代码、微调启用代码以及上述内容的其他元素。 “Llama材料”指根据本协议提供的Meta专有的Llama 2和文档(及其任何部分)。 “Meta”或“我们”指Meta Platforms Ireland Limited(如果你位于欧洲经济区(EEA)或瑞士,或者如果你是一个实体,你的主要营业地位于欧洲经济区或瑞士)和Meta Platforms, Inc.(如果你位于欧洲经济区或瑞士以外)。
通过点击下方的“我接受”,或使用或分发Llama材料的任何部分或元素,你同意受本协议的约束。
-
许可权利和再分发
- 权利授予:你被授予在Meta体现在Llama材料中的知识产权或其他权利下的非排他性、全球性、不可转让且免版税的有限许可,以使用、复制、分发、拷贝、创作衍生作品并对Llama材料进行修改。
- 再分发和使用
- 如果你将Llama材料或其任何衍生作品分发给第三方,你应向该第三方提供本协议的副本。
- 如果你作为集成最终用户产品的一部分从被许可方处接收Llama材料或其任何衍生作品,则本协议第2条不适用于你。
- 你必须在分发的所有Llama材料副本中,在作为此类副本一部分分发的“通知”文本文件中保留以下归属声明:“Llama 2根据LLAMA 2社区许可获得许可,版权所有 (c) Meta Platforms, Inc. 保留所有权利。”
- 你对Llama材料的使用必须遵守适用的法律法规(包括贸易合规法律法规),并遵守Llama材料的可接受使用政策(可在此处获取),该政策特此并入本协议。
- 你不得使用Llama材料或Llama材料的任何输出或结果来改进任何其他大语言模型(不包括Llama 2或其衍生作品)。
-
额外商业条款:如果在Llama 2版本发布日期,被许可方或被许可方的关联公司提供的产品或服务的月活跃用户在前一个日历月超过7亿,则你必须向Meta请求许可,Meta可自行决定是否授予你许可。在Meta明确授予你此类权利之前,你无权行使本协议下的任何权利。
-
保修免责声明:除非适用法律要求,否则Llama材料及其任何输出和结果均按“原样”提供,不提供任何形式的保证,无论是明示的还是暗示的,包括但不限于所有权、不侵权、适销性或特定用途适用性的保证。你独自负责确定使用或再分发Llama材料的适当性,并承担与你使用Llama材料及其任何输出和结果相关的任何风险。
-
责任限制:在任何情况下,Meta或其关联公司均不对因本协议引起的任何利润损失或任何间接、特殊、后果性、附带性、惩戒性或惩罚性损害承担责任,无论责任理论如何,包括合同、侵权、疏忽、产品责任或其他方面,即使Meta或其关联公司已被告知此类损害的可能性。
-
知识产权
- 本协议未授予商标许可,并且在与Llama材料相关的情况下,除非在描述和再分发Llama材料时进行合理和惯常使用所需,否则Meta和被许可方均不得使用对方或其任何关联公司拥有或与之相关的任何名称或标记。
- 鉴于Meta对Llama材料及其为Meta制作的衍生作品的所有权,就你制作的Llama材料的任何衍生作品和修改而言,在你和Meta之间,你是且将是此类衍生作品和修改的所有者。
- 如果你对Meta或任何实体提起诉讼或其他法律程序(包括在诉讼中的交叉索赔或反诉),声称Llama材料或Llama 2的输出或结果,或上述任何部分构成侵犯你拥有或可许可的知识产权或其他权利,则本协议授予你的任何许可将自此类诉讼或索赔提起之日起终止。你将赔偿并使Meta免受任何第三方因你使用或分发Llama材料而产生或与之相关的任何索赔。
-
期限和终止:本协议的期限将自你接受本协议或访问Llama材料时开始,并将持续有效,直至根据本协议的条款和条件终止。如果你违反本协议的任何条款或条件,Meta可终止本协议。本协议终止后,你应删除并停止使用Llama材料。第3、4和7条在本协议终止后仍然有效。
-
适用法律和管辖权:本协议将受加利福尼亚州法律管辖并依其解释,不考虑法律选择原则,并且《联合国国际货物销售合同公约》不适用于本协议。加利福尼亚州的法院对因本协议引起的任何争议具有专属管辖权。
Llama 2可接受使用政策
Meta致力于促进其工具和功能(包括Llama 2)的安全和公平使用。如果你访问或使用Llama 2,即表示你同意本可接受使用政策(“政策”)。本政策的最新版本可在此处找到。
禁止使用情况
我们希望每个人都能安全、负责任地使用Llama 2。你同意不会使用或允许他人使用Llama 2进行以下行为:
- 违反法律或他人权利
- 从事、促进、生成、促成、鼓励、策划、煽动或进一步推动非法或违法活动或内容,例如:
- 暴力或恐怖主义
- 对儿童的剥削或伤害,包括招揽、创建、获取或传播儿童剥削内容或未报告儿童性虐待材料
- 人口贩运、剥削和性暴力
- 向未成年人非法分发信息或材料,包括淫秽材料,或未对此类信息或材料采用法律要求的年龄限制
- 性招揽
- 任何其他犯罪活动
- 从事、促进、煽动或便利对个人或群体的骚扰、虐待、威胁或欺凌
- 从事、促进、煽动或便利在就业、就业福利、信贷、住房、其他经济福利或其他基本商品和服务的提供方面的歧视或其他非法或有害行为
- 从事未经授权或无执照的任何专业实践,包括但不限于金融、法律、医疗/健康或相关专业实践
- 在未获得适用法律要求的权利和同意的情况下,收集、处理、披露、生成或推断个人的健康、人口统计或其他敏感个人或私人信息
- 从事或便利任何侵犯、盗用或以其他方式侵犯任何第三方权利的行为或生成任何内容,包括使用Llama 2材料的任何产品或服务的输出或结果
- 创建、生成或便利创建恶意代码、恶意软件、计算机病毒或进行任何可能禁用、负担过重、干扰或损害网站或计算机系统的正常运行、完整性、操作或外观的其他操作
- 从事、促进、生成、促成、鼓励、策划、煽动或进一步推动非法或违法活动或内容,例如:
- 从事、促进、煽动、便利或协助策划或开展对个人造成死亡或身体伤害风险的活动,包括与以下方面相关的Llama 2使用:
- 军事、战争、核工业或应用、间谍活动、使用受美国国务院维护的《国际武器贸易条例》(ITAR)管制的材料或活动
- 枪支和非法武器(包括武器开发)
- 非法药物和受管制/受控物质
- 关键基础设施、运输技术或重型机械的操作
- 自我伤害或伤害他人,包括自杀、自残和饮食失调
- 任何旨在煽动或促进暴力、虐待或对个人造成身体伤害的内容
- 故意欺骗或误导他人,包括与以下方面相关的Llama 2使用:
- 生成、促进或进一步推动欺诈或创建或推广虚假信息
- 生成、促进或进一步推动诽谤性内容,包括创建诽谤性声明、图像或其他内容
- 生成、促进或进一步分发垃圾邮件
- 在未经同意、授权或合法权利的情况下冒充他人
- 声称使用Llama 2或其输出是人类生成的
- 生成或便利虚假的在线互动,包括虚假评论和其他虚假在线互动方式
- 未能向最终用户适当披露你的AI系统的任何已知危险
请通过以下方式之一报告任何违反本政策、软件“漏洞”或其他可能导致违反本政策的问题:
- 报告模型问题:github.com/facebookresearch/llama
- 报告模型生成的风险内容:developers.facebook.com/llama_output_feedback
- 报告漏洞和安全问题:facebook.com/whitehat/info
- 报告违反可接受使用政策或未经授权使用Llama的情况:LlamaUseReport@meta.com
模型访问所需信息
信息 | 类型 |
---|---|
名字 | 文本框 |
姓氏 | 文本框 |
出生日期 | 日期选择器 |
国家 | 国家选择 |
所属机构 | 文本框 |
地理位置 | IP定位 |
点击下方的“提交”按钮,即表示你接受许可条款,并确认你提供的信息将根据Meta隐私政策进行收集、存储、处理和共享。
模型变体链接



