语言:
- 代码
任务标签: 文本生成
标签:
- llama-2
许可证: llama2
交互示例:
- 示例标题: Hello world (Python)
消息记录:
- 角色: 系统
内容: 你是一个乐于助人且诚实的代码助手
- 角色: 用户
内容: 用Python打印一个hello world
- 示例标题: 子列表求和 (Python)
消息记录:
- 角色: 系统
内容: 你是一个精通JavaScript的乐于助人且诚实的代码助手。请用JavaScript回答所有编程问题
- 角色: 用户
内容: 编写一个函数,计算给定列表中所有连续子列表的和的集合
推理参数:
参数:
最大新标记数: 200
停止符:
-
-
代码骆驼
Code Llama是一系列预训练和微调的生成文本模型,规模从70亿到700亿参数不等。本仓库存储了Hugging Face Transformers格式的700亿参数指令调优版本。该模型专为通用代码合成和理解而设计。其他模型的链接可在底部索引中找到。
[!注意]
这是一个非官方的Code Llama仓库。您可以在Meta Llama组织找到官方Meta仓库。
模型能力:
- [x] 代码补全
- [ ] 代码填充
- [x] 指令跟随/聊天
- [ ] Python专家模式
模型使用
安装transformers
pip install transformers accelerate
聊天使用: 700亿参数指令模型使用不同于小版本的特殊提示模板。建议使用内置的聊天模板:
from transformers import AutoTokenizer, AutoModelForCausalLM
import transformers
import torch
model_id = "codellama/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": "你是一个精通JavaScript的乐于助人且诚实的代码助手。请用JavaScript回答所有编程问题"},
{"role": "user", "content": "编写一个函数,计算给定列表中所有连续子列表的和的集合"},
]
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 = "codellama/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"结果: {seq['generated_text']}")
聊天提示格式
CodeLlama 70B指令模型使用不同于之前Llama 2或CodeLlama模型的聊天提示格式。如前所述,最简单的方法是使用分词器的聊天模板。如需手动构建字符串或标记,方法如下:
测试用对话示例:
chat = [
{"role": "system", "content": "系统提示 "},
{"role": "user", "content": "第一个用户查询"},
{"role": "assistant", "content": "对第一个查询的模型响应"},
{"role": "user", "content": "第二个用户查询"},
]
使用聊天模板生成的提示:
tokenizer.apply_chat_template(chat, tokenize=False)
输出:
'<s>来源: system\n\n 系统提示 <step> 来源: user\n\n 第一个用户查询 <step> 来源: assistant\n\n 对第一个查询的模型响应 <step> 来源: user\n\n 第二个用户查询 <step> 来源: assistant\n目标: user\n\n '
手动构建方法:
output = "<s>"
for m in chat:
output += f"来源: {m['role']}\n\n {m['content'].strip()}"
output += " <step> "
output += "来源: assistant\n目标: user\n\n "
模型详情
*注:本模型使用受Meta许可证约束。Meta开发并公开发布了Code Llama系列大语言模型(LLMs)。
开发团队 Meta
变体版本 Code Llama提供四种规模尺寸和三种变体:
- Code Llama:基础模型,适用于通用代码合成和理解
- Code Llama - Python:专为Python设计
- Code Llama - Instruct:用于指令跟随和安全部署
所有变体均提供7B、13B、34B和70B参数版本。
本仓库包含70B参数模型的指令调优版本
输入 仅接受文本输入
输出 仅生成文本输出
架构 Code Llama采用优化Transformer架构的自回归语言模型。最大支持16k标记。本版本不支持100k标记的长上下文。
训练周期 Code Llama及其变体训练于2023年1月至2024年1月期间
状态 这是基于离线数据集训练的静态模型。未来将根据社区反馈持续改进模型安全性。
许可证 商业许可证详见:https://ai.meta.com/resources/models-and-libraries/llama-downloads/
研究论文 更多信息请参阅论文《Code Llama:代码开源基础模型》或访问arXiv页面
预期用途
适用场景 Code Llama及其变体适用于英语和相关编程语言的商业和研究用途。基础模型可适配多种代码合成和理解任务,Python专用版针对Python语言优化,指令版更适合作为代码助手应用。
非适用场景 任何违反法律法规的使用;非英语场景使用;违反《Code Llama可接受使用政策和许可协议》的行为。
硬件与软件
训练环境 使用定制训练库在Meta研究超级计算机上完成
碳足迹 总计训练12个模型消耗140万A100-80GB GPU小时(功耗350-400W),总排放228.55吨CO2当量,已通过Meta可持续发展计划全额抵消
评估结果
完整评估结果详见论文第3章,安全性评估见第4章
伦理考量与限制
Code Llama作为新技术存在使用风险。当前测试仅覆盖英语场景,无法涵盖所有情况。与其他LLM类似,其输出可能存在不准确或不当内容。部署前需进行针对性安全测试和调优。
责任使用指南详见:https://ai.meta.com/llama/responsible-use-guide