🚀 CodeGemma
CodeGemma是基于Gemma构建的轻量级开源代码模型集合,可用于代码补全、代码生成、代码对话和代码教育等多种场景,为开发者提供高效的代码处理能力。
🚀 快速开始
在llama.cpp
以及其他相关工具(如Ollama和LM Studio)中使用CodeGemma时,请确保正确设置相关标志,特别是repeat-penalty
。Georgi Gerganov(llama.cpp的作者)在此链接分享了他的经验。
✨ 主要特性
- 多变体选择:提供70亿参数预训练变体、70亿参数指令微调变体和20亿参数预训练变体,满足不同的代码处理需求。
- 广泛的应用场景:支持代码补全、自然语言生成代码、代码对话和代码教育等多种应用场景。
- 高性能表现:在多个编码和自然语言基准测试中表现出色。
- 严格的安全过滤:采用严格的安全过滤机制,确保模型输出的安全性和合规性。
📚 详细文档
模型页面
资源与技术文档
使用条款
作者
Google
💻 使用示例
基础用法
$ cat non_prime
/// Write a rust function to identify non-prime numbers.
///
/// Examples:
/// >>> is_not_prime(2)
/// False
/// >>> is_not_prime(10)
/// True
pub fn is_not_prime(n: i32) -> bool {
$ main -m codegemma-7b-it.gguf --temp 0 --top-k 0 -f non_prime --log-disable --repeat-penalty 1.0
/// Write a rust function to identify non-prime numbers.
///
/// Examples:
/// >>> is_not_prime(2)
/// False
/// >>> is_not_prime(10)
/// True
pub fn is_not_prime(n: i32) -> bool {
if n <= 1 {
return true;
}
for i in 2..=(n as f64).sqrt() as i32 {
if n % i == 0 {
return true;
}
}
false
}
输入与输出
- 输入:
- 预训练模型变体:代码补全和生成场景的代码前缀和/或后缀,或自然语言文本或提示。
- 指令微调模型变体:自然语言文本或提示。
- 输出:
- 预训练模型变体:中间填充代码补全、代码和自然语言。
- 指令微调模型变体:代码和自然语言。
🔧 技术细节
模型数据
训练数据集
以Gemma为基础模型,CodeGemma 2B和7B预训练变体在额外的5000亿个主要为英语的令牌数据上进行进一步训练,这些数据来自公开可用的代码仓库、开源数学数据集和合成生成的代码。
训练数据处理
采用了以下数据预处理技术:
- FIM预训练:CodeGemma模型专注于中间填充(FIM)任务,模型训练支持PSM和SPM模式,FIM设置为80%的FIM率,PSM/SPM比例为50-50。
- 基于依赖图的打包和基于单元测试的词法打包技术:为了提高模型与实际应用的对齐度,在项目/仓库级别构建训练示例,将每个仓库中最相关的源文件放在一起。具体采用了基于依赖图的打包和基于单元测试的词法打包两种启发式技术。
- 文档拆分技术:开发了一种将文档拆分为前缀、中间和后缀的新技术,使后缀的起始点在语法上更加自然,而不是纯粹的随机分布。
- 安全过滤:与Gemma类似,部署了严格的安全过滤机制,包括过滤个人数据、CSAM过滤和其他基于内容质量和安全的过滤,符合我们的政策。
实现信息
硬件
CodeGemma使用最新一代的张量处理单元(TPU)硬件(TPUv5e)进行训练。
软件
使用JAX和ML Pathways进行训练。
评估信息
评估方法
在多个领域的各种学术基准测试中对CodeGemma进行评估:
- 代码补全基准测试:HumanEval单行和多行填充。
- 代码生成基准测试:HumanEval、MBPP、BabelCode(C++、C#、Go、Java、JavaScript、Kotlin、Python、Rust)。
- 问答:BoolQ、PIQA、TriviaQA。
- 自然语言:ARC-Challenge、HellaSwag、MMLU、WinoGrande。
- 数学推理:GSM8K、MATH。
评估结果
编码基准测试
基准测试 |
2B |
7B |
7B-IT |
HumanEval |
31.1 |
44.5 |
56.1 |
MBPP |
43.6 |
56.2 |
54.2 |
HumanEval单行 |
78.41 |
76.09 |
68.25 |
HumanEval多行 |
51.44 |
58.44 |
20.05 |
BC HE C++ |
24.2 |
32.9 |
42.2 |
BC HE C# |
10.6 |
22.4 |
26.7 |
BC HE Go |
20.5 |
21.7 |
28.6 |
BC HE Java |
29.2 |
41.0 |
48.4 |
BC HE JavaScript |
21.7 |
39.8 |
46.0 |
BC HE Kotlin |
28.0 |
39.8 |
51.6 |
BC HE Python |
21.7 |
42.2 |
48.4 |
BC HE Rust |
26.7 |
34.1 |
36.0 |
BC MBPP C++ |
47.1 |
53.8 |
56.7 |
BC MBPP C# |
28.7 |
32.5 |
41.2 |
BC MBPP Go |
45.6 |
43.3 |
46.2 |
BC MBPP Java |
41.8 |
50.3 |
57.3 |
BC MBPP JavaScript |
45.3 |
58.2 |
61.4 |
BC MBPP Kotlin |
46.8 |
54.7 |
59.9 |
BC MBPP Python |
38.6 |
59.1 |
62.0 |
BC MBPP Rust |
45.3 |
52.9 |
53.5 |
自然语言基准测试

伦理与安全
评估方法
评估方法包括结构化评估和对相关内容政策的内部红队测试。红队测试由多个不同的团队进行,每个团队有不同的目标和人工评估指标。这些模型针对与伦理和安全相关的多个不同类别进行评估,包括:
- 人工评估:对涵盖内容安全和代表性危害的提示进行人工评估,更多评估方法细节见Gemma模型卡片。
- 特定测试:对网络攻击能力进行特定测试,重点测试自主黑客能力,确保潜在危害得到限制。
评估结果
伦理和安全评估结果在满足内部政策的可接受阈值范围内,涉及儿童安全、内容安全、代表性危害、记忆、大规模危害等类别。更多评估结果细节见Gemma模型卡片。
模型使用与限制
预期用途
Code Gemma模型有广泛的应用,IT和PT模型的应用有所不同。以下潜在用途列表并不全面,目的是提供模型创建者在模型训练和开发过程中考虑的可能用例的上下文信息。
- 代码补全:PT模型可用于通过IDE扩展完成代码。
- 代码生成:IT模型可用于在有或没有IDE扩展的情况下生成代码。
- 代码对话:IT模型可支持讨论代码的对话界面。
- 代码教育:IT模型支持交互式代码学习体验,有助于语法纠正或提供编码练习。
已知限制
大语言模型(LLM)基于其训练数据和技术的固有局限性存在一定限制。更多LLM限制细节见Gemma模型卡片。
伦理考虑与风险
大语言模型(LLM)的开发引发了一些伦理问题。在这些模型的开发过程中,我们仔细考虑了多个方面。请参考Gemma模型卡片中的相同讨论以获取模型详细信息。
优势
在发布时,与同等规模的模型相比,该系列模型提供了从头开始为负责任的AI开发设计的高性能开源代码大语言模型实现。使用本文档中描述的编码基准评估指标,这些模型在性能上优于其他同等规模的开源模型替代方案。
📄 许可证
⚠️ 重要提示
要在Hugging Face上访问CodeGemma,您需要审查并同意Google的使用许可。为此,请确保您已登录Hugging Face并点击下方按钮。请求将立即处理。
💡 使用建议
请点击下方按钮确认许可:
Acknowledge license