官方的Code Llama开源:免费商用,神秘版本接近GPT-4

2023-08-25 13:00
摘要:GPT-4:在代码生成这块,你们依然是「弟弟」。今日,Meta 的开源 Llama 模型家族迎来了一位新成员 —— 专攻代码生成的基础模型 Code Llama。作为 Llama2的代码专用版本,Code Llama 基于特定的代码数据集在其上进一..

GPT-4:在代码生成这块,你们依然是「弟弟」。

今日,Meta 的开源 Llama 模型家族迎来了一位新成员 —— 专攻代码生成的基础模型 Code Llama。

作为 Llama2的代码专用版本,Code Llama 基于特定的代码数据集在其上进一步微调训练而成。

Meta 表示,Code Llama 的开源协议与 Llama2一样,免费用于研究以及商用目的。

相关论文《Code Llama: Open Foundation Models for Code》已经公布,足足有47页,作者有25位。

论文地址:https://ai.meta.com/research/publications/code-llama-open-foundation-models-for-code/

GitHub 地址:https://github.com/facebookresearch/codellama

Code Llama 系列模型有三个版本,参数量分别为7B、13B 和34B。并且支持多种编程语言,包括 Python、C++、Java、PHP、Typescript (Javascript)、C# 和 Bash。

Code Llama 稳定支持了最高10万 token 的上下文生成。下图2为 Code Llama 的微调流程。

就其效果来说,Code Llama 的不同版本在 HumanEval 和 MBPP 数据集上的一次生成通过率(pass@1)都可以超越 GPT-3.5。

另外,Code Llama 的「Unnatural」34B 版本在 HumanEval 数据集上的 pass@1接近了 GPT-4(62.2% vs67.0%)。Meta 没有发布这个版本,但通过一小部分高质量编码数据的训练实现了明显的效果改进。

这个特殊版本引起了很多人的注意,其中就有特斯拉前 AI 总监、回归 OpenAI 的 Andrej Karpathy。

文中虽然提到它是「在15000个 unnatural 指令上微调的 Code Llama-Python34B 版本」,但 Karpathy 仍然对这个「神秘的名称、模糊的描述、碾压其他的保密模型」感到很好奇。

Code Llama 如何工作

Code Llama 编码能力非常强,它可以根据代码和自然语言提示生成代码(例如用户输入提示「帮我写一个输出斐波那契序列的函数。」) 它还可帮助用户进行代码补全和调试代码。

三个参数版本的 Code Llama 模型都使用了500B 的代码 tokens 和代码相关数据进行训练。7B 和13B 基础和指令模型也经过了 FIM(fill-in-the-middle)训练,从而允许将代码插入到现有代码中,这意味着它们可以支持开箱即用的代码补全等任务。

下表为 Code Llama 的训练数据集。

有了这三种模型,不同的服务和延迟要求都能得到满足。例如,7B 模型可以在单个 GPU 上运行;34B 模型能够返回最佳结果并提供更好的编码辅助,但就速度而言,较小的7B 和13B 模型速度更快,更适合低延迟任务,例如实时代码补全。

Code Llama 不仅提供了多达100000个上下文 token 的稳定生成,所有模型的训练 token 序列也高达16000。

除了作为生成更长程序的先决条件外,拥有更长的输入序列也为 Code Llama 带来新的功能。例如,用户可以为模型提供来自他们代码库的更多上下文,以使生成的代码更相关。

值得一提的是,Meta 更进一步微调了 Code Llama 的两个附加变体:Code Llama - Python 和 Code Llama - Instruct。

Code Llama-Python 是 Code Llama 的一种变体,其在 Python 代码的100B token 上进一步微调。下表为 Code Llama-Python 的训练数据集。

Code Llama - Instruct 是 Code Llama 的指令微调和对齐变体,能够更好地理解输入提示。Meta 建议在使用 Code Llama 进行代码生成时使用 Code Llama - Instruct 变体,因为 Code Llama - Instruct 已经过微调,可以用自然语言生成有用且安全的答案。

Meta 表示,他们不建议使用 Code Llama 或 Code Llama - Python 执行一般的自然语言任务,因为这两个模型都不是为遵循自然语言指令而设计的。Code Llama 专门用于特定于代码的任务,不适合作为其他任务的基础模型。

使用 Code Llama 模型时,用户必须遵守许可和使用政策。

Code Llama 性能如何

Meta 使用了 HumanEval 和 MBPP(Mostly Basic Python Programming)两个编码基准进行测试。其中,HumanEval 测试模型基于文档字符串(docstrings)完成代码的能力,MBPP 测试模型基于描述编写代码的能力。

结果表明,Code Llama 的性能优于开源、特定于代码任务的 LLM,并且优于自家 Llama2。例如,Code Llama34B 在 HumanEval 上得分为53.7%,在 MBPP 上得分为56.2%,与其他最先进的开源解决方案相比是最好的,与 ChatGPT 相当。

不过,Code Llama 也存在风险,Meta 表示构建负责任地 AI 模型至关重要,他们在发布 Code Llama 之前采取了许多安全措施。作为红队测试工作的一部分,Meta 对 Code Llama 生成恶意代码的风险进行了定量评估。他们创建了一些提示,以试图让模型生成恶意代码,并将 Code Llama 对这些提示的响应与 ChatGPT (GPT3.5Turbo) 进行比较。结果发现,Code Llama 的回答更安全。

由此看来,编码能力不是特别强的 Llama2,这个坑已被 Code Llama 填上了。Meta 希望 Code Llama 的出现能够激励其他研究者基于 Llama2为研究和商业产品创建新的创新工具。

参考链接:

https://ai.meta.com/blog/code-llama-large-language-model-coding/

更新于:2023-08-25 13:00