用途
Code Llama 是 Meta 推出的面向代码的大型语言模型系列,基于 Llama 2 开发,旨在为编程任务提供代码生成、代码补全和指令跟随能力。该仓库(github.com/facebookresearch/codellama)提供加载 Code Llama 模型并运行推理的最小示例代码。
主要能力
- 在开源模型中提供领先性能。
- 具备填充(infilling)能力,可根据周围内容补全代码。
- 支持大输入上下文:所有模型在 16k token 序列上训练,在最多 100k token 的输入上表现有所提升。
- 具备面向编程任务的零样本指令跟随能力。
- 提供多种模型变体:基础模型(Code Llama)、Python 专用模型(Code Llama - Python)、指令跟随模型(Code Llama - Instruct),每种均包含 7B、13B 和 34B 参数版本。
- 7B 和 13B 的 Code Llama 及 Code Llama - Instruct 变体支持基于上下文内容的填充。
使用方式
- 下载模型权重和分词器:访问 Meta 网站并接受许可协议。请求获批后,会通过电子邮件收到一个签名 URL。然后运行 download.sh 脚本,在提示时传入该 URL 开始下载。注意复制 URL 文本本身,不要使用右键的“复制链接地址”选项。如果复制的 URL 文本以 https://download.llamameta.net 开头,则复制正确;如果以 https://l.facebook.com 开头,则复制方式错误。
- 前置条件:确保已安装 wget 和 md5sum。运行脚本:bash download.sh。
- 链接在 24 小时后以及一定下载次数后过期。如果开始看到诸如 403: Forbidden 的错误,可以重新请求链接。
- 在具备 PyTorch / CUDA 的 conda 环境中,克隆仓库并在顶层目录运行。
- 不同模型需要不同的模型并行(MP)值。
- 除 70B 的 python 和 instruct 版本外,所有模型支持最长 100,000 token 的序列长度,但会根据 max_seq_len 和 max_batch_size 值预分配缓存,因此需根据硬件和用例设置这些值。
预训练代码模型
Code Llama 和 Code Llama - Python 模型未经过指令跟随微调,应通过提示使预期答案成为提示的自然延续。参见 example_completion.py 中的示例。预训练代码模型包括:Code Llama 模型 CodeLlama-7b、CodeLlama-13b、CodeLlama-34b、CodeLlama-70b,以及 Code Llama - Python 模型 CodeLlama-7b-Python、CodeLlama-13b-Python、CodeLlama-34b-Python、CodeLlama-70b-Python。
填充
Code Llama 和 Code Llama - Instruct 的 7B 和 13B 模型能够根据周围上下文填充代码。参见 example_infilling.py 中的示例。预训练填充模型包括:Code Llama 模型 CodeLlama-7b 和 CodeLlama-13b,以及 Code Llama - Instruct 模型 CodeLlama-7b-Instruct、CodeLlama-13b-Instruct。
微调指令模型
Code Llama - Instruct 模型经过微调以跟随指令。要获得 7B、13B 和 34B 变体的预期功能和性能,需遵循 chat_completion() 中定义的特定格式,包括 INST 和 <<SYS>> 标签、BOS 和 EOS token,以及之间的空白和换行(建议对输入调用 strip() 以避免双空格)。CodeLlama-70b-Instruct 需要 dialog_prompt_tokens() 中定义的单独轮次提示格式。可以直接使用 chat_completion() 为所有 instruct 模型生成答案,它会自动执行所需的格式化。
还可以部署额外的分类器来过滤被认为不安全的输入和输出。参见 llama-recipes 仓库中关于如何向推理代码的输入和输出添加安全检查器的示例。微调指令跟随模型包括:Code Llama - Instruct 模型 CodeLlama-7b-Instruct、CodeLlama-13b-Instruct、CodeLlama-34b-Instruct、CodeLlama-70b-Instruct。
适用场景
Code Llama 面向个人、创作者、研究人员和各种规模的企业,使其能够负责任地实验、创新和扩展想法。该发布包含预训练和微调 Llama 语言模型的模型权重和起始代码,参数范围从 7B 到 34B。
限制与安全
Code Llama 是一项新技术,使用中存在潜在风险。迄今为止进行的测试尚未覆盖、也无法覆盖所有场景。为帮助开发者应对这些风险,Meta 创建了负责任使用指南(Responsible Use Guide),更多细节可参见研究论文。
由 Llama Materials(包括 Code Llama)的代码生成功能生成的输出可能受第三方许可约束,包括但不限于开源许可。
模型和权重同时授权给研究人员和商业实体,遵循开放原则。参见 LICENSE 文件以及随附的可接受使用政策(Acceptable Use Policy)。
问题反馈
- 报告模型问题:github.com/facebookresearch/codellama
- 报告模型生成的风险内容:developers.facebook.com/llama_output_feedback
- 报告 bug 和安全问题:facebook.com/whitehat/info
参见 MODEL_CARD.md 了解 Code Llama 的模型卡。