整体介绍
Code Llama 发布了3款模型,包括基础模型、Python 专有模型和指令跟随模型,参数量分别为 7B、13B、34B 和 70B。这些模型在长达 16k tokens 的序列上训练。都是基于 Llama 2。
作者针对infilling (FIM) 、长上下文、指令专门做了微调 long-context fine-tuning (LCFT).
codellama细节
Code Llama 模型家族
- 初始化: 所有 Code Llama 模型均以 Llama 2 模型权重初始化。
- 训练数据: 训练使用了500B tokens,而70B模型使用了1T tokens。
- 填充能力: 7B、13B和70B模型支持基于上下文的填充(infill)。
数据集
Code Llama 模型的训练数据集由公开可用的代码组成,其中8%的样本数据来自与代码相关的自然语言数据集。这些数据集包含代码讨论和代码片段,有助于模型理解自然语言。
- 数据集: 训练数据主要来自公开可用的代码数据,以及与代码相关的自然语言数据。
- 标记化: 使用与 Llama 2 相同的标记器进行标记化处理。
Infilling(填充)
填充是预测程序中缺失部分的任务,Code Llama 模型通过特定的训练方法来实现这一功能。训练使用了因果掩码(causal masking)技术,将训练序列的部分移动到序列末尾,并自回归地预测重排序列。
- 分割: 训练文档在字符级别上分割为前缀、中间部分和后缀。
- 掩码: 以一定概率应用掩码转换,只对不超过模型上下文长度的文档进行操作。
长上下文微调(Long context fine-tuning)
长上下文微调阶段是专门提出来提高模型处理长序列的能力。通过修改RoPE位置嵌入的参数,将模型的最大上下文长度从4,096 tokens扩展到100,000 tokens。
- 序列长度: 训练时使用的序列长度为16,384 tokens。
- RoPE调整: 调整了旋转嵌入的频率,以适应更长的序列。
指令微调(Instruction fine-tuning)
Code Llama - Instruct 模型在 Code Llama 的基础上,通过额外的数据进行微调,以更好地遵循人类指令。
- 安全性: 通过指令微调提高模型输出的安全性。
- 有用性: 增强模型对用户指令的响应能力。
训练使用了三种不同类型的数据:
- 专有数据集: 使用 Llama 2 的指令调整数据集。
- 自指导数据集: 通过执行反馈选择数据,构建自指导数据集。
- 复述: 防止模型在一般编码和语言理解能力上退步,使用代码数据集和自然语言数据集的一小部分进行训练。
2.6 训练细节
- 优化器: 使用 AdamW 优化器,并采用余弦调度策略。
- 学习率: 根据模型大小调整学习率。
能力对比
三种的能力对比:
- Code Llama (基础模型)
代码生成: 用于广泛的代码生成任务。
多语言支持: 不局限于单一编程语言,能够处理多种编程语言的代码。
参数规模: 提供7B、13B、34B和70B参数的模型。
长上下文处理: 经过特别微调,能够处理长达100k tokens的输入上下文。 - Code Llama - Python (Python 专有模型)
Python 语言优化: 专为Python编程语言设计,提高在Python代码生成任务上的性能。
参数规模: 同样提供7B、13B、34B和70B参数的模型。
长上下文与填充: 支持长上下文处理,并且7B、13B和34B参数的模型支持代码填充。 - Code Llama - Instruct (指令跟随模型)
指令跟随: 经过额外的微调,以更好地遵循自然语言指令来生成代码。
安全性与有用性: 通过在包含安全和有帮助响应的数据集上的训练,提高了模型的安全性和有用性。
参数规模: 目前提供7B、13B和34B参数的模型。
自生成数据: 使用自生成的单元测试和解决方案来训练模型,增强了代码生成和理解的能力。
所有这些模型都是在大量代码数据上训练的,并且都经过了优化以提高在代码生成和理解任务上的性能。Code Llama - Python 专注于Python语言的代码生成,而 Code Llama - Instruct 专注于提高对自然语言指令的遵循能力,并增强了模型的安全性。基础模型 Code Llama 提供了广泛的代码生成能力,适用于多种不同的编程语言。
其他能力
该模型还可以做代码问题解答:
可以生成注释