库名称: transformers
许可证: gemma
许可证链接: https://ai.google.dev/gemma/terms
额外授权标题: 访问Hugging Face上的CodeGemma
额外授权提示: 要访问Hugging Face上的CodeGemma,您需要审阅并同意Google的使用许可。为此,请确保您已登录Hugging Face并点击下方按钮。请求将立即处理。
额外授权按钮内容: 确认许可
CodeGemma
模型页面
: CodeGemma
资源与技术文档
: 技术报告
: 负责任生成式AI工具包
使用条款
: 条款
作者
: Google
模型信息
简要描述及输入输出的定义。
描述
CodeGemma是基于Gemma构建的一系列轻量级开源代码模型。CodeGemma模型是文本到文本和文本到代码的解码器专用模型,提供以下变体:
- 70亿参数的预训练变体,专长于代码补全和代码生成任务
- 70亿参数的指令调优变体,用于代码对话和指令跟随
- 20亿参数的预训练变体,用于快速代码补全
使用示例
代码补全
代码补全可用于代码编辑器中的中间填充。CodeGemma使用填充中间(FIM)目标进行训练,需提供前缀和后缀作为补全上下文。使用以下标记分隔输入的不同部分:
<|fim_prefix|>
位于待补全内容的前缀之前
<|fim_suffix|>
位于后缀之前。此标记必须精确放置在编辑器中光标所在位置
<|fim_middle|>
是触发模型生成的提示词
此外还有<|file_separator|>
用于提供多文件上下文。
请确保不在标记周围添加多余空格或换行。示例:
from transformers import GemmaTokenizer, AutoModelForCausalLM
model_id = "google/codegemma-7b"
tokenizer = GemmaTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(model_id)
prompt = '''\
<|fim_prefix|>import datetime
def calculate_age(birth_year):
"""根据出生年份计算年龄"""
current_year = datetime.date.today().year
<|fim_suffix|>
return age<|fim_middle|>\
'''
inputs = tokenizer(prompt, return_tensors="pt").to(model.device)
prompt_len = inputs["input_ids"].shape[-1]
outputs = model.generate(**inputs, max_new_tokens=100)
print(tokenizer.decode(outputs[0][prompt_len:]))
可能返回如下结果:
age = current_year - birth_year<|file_separator|>test_calculate_age.py
<|fim_suffix|>
assert calculate_age(1990) == 33
assert calculate_age(1980) == 43
assert calculate_age(1970) == 53
assert calculate_age(1960) == 63
assert calculate_age(1950) == 73
注意返回内容中多余的部分。建议通过终止符控制生成:
FIM_PREFIX = '<|fim_prefix|>'
FIM_SUFFIX = '<|fim_suffix|>'
FIM_MIDDLE = '<|fim_middle|>'
FIM_FILE_SEPARATOR = '<|file_separator|>'
terminators = tokenizer.convert_tokens_to_ids([FIM_PREFIX, FIM_MIDDLE, FIM_SUFFIX, FIM_FILE_SEPARATOR])
terminators += [tokenizer.eos_token_id]
outputs = model.generate(
**inputs,
max_new_tokens=100,
eos_token_id=terminators,
)
代码生成
from transformers import GemmaTokenizer, AutoModelForCausalLM
tokenizer = GemmaTokenizer.from_pretrained("google/codegemma-7b")
model = AutoModelForCausalLM.from_pretrained("google/codegemma-7b")
input_text = "编写一个计算第n个斐波那契数的Python函数。"
input_ids = tokenizer(input_text, return_tensors="pt")
outputs = model.generate(**input_ids)
print(tokenizer.decode(outputs[0]))
输入输出
输入
: 预训练模型变体:用于代码补全和生成的代码前缀/后缀,或自然语言文本
: 指令调优变体:自然语言文本或提示
输出
: 预训练模型变体:中间填充代码补全、代码和自然语言
: 指令调优变体:代码和自然语言
模型数据
模型训练数据及处理方式。
训练数据集
以Gemma为基础模型,CodeGemma 2B和7B预训练变体额外训练了5000亿token的数据,主要来自:
训练数据处理
应用了以下预处理技术:
- FIM训练:采用80%FIM率,PSM/SPM各50%
- 依赖图打包和单元测试词法打包:按项目/仓库级别组织训练样本
- 创新性文档分割技术:使后缀起始点更符合语法自然性
- 安全过滤:包括个人数据过滤、CSAM过滤等内容安全措施
实现信息
训练使用的硬件和软件。
硬件
使用最新一代TPUv5e硬件训练。
软件
使用JAX和ML Pathways框架。
评估信息
模型评估指标与结果。
评估方法
在多个领域进行学术基准测试:
- 代码补全:HumanEval单行/多行填充
- 代码生成:HumanEval、MBPP、BabelCode(支持8种语言)
- Q&A、自然语言理解、数学推理等基准
评估结果
编码基准
(表格数据保持原格式)
自然语言基准

伦理与安全
伦理安全评估方法与结果。
评估方法
包括结构化评估和内部红队测试,评估类别包括:
- 内容安全和表征性危害的人工评估
- 网络攻击能力专项测试
评估结果
所有评估结果均符合内部政策阈值要求。
模型使用与限制
用户需注意的模型限制。
预期用途
- 代码补全(IDE扩展)
- 代码生成
- 代码对话
- 代码教育
已知限制
大型语言模型存在基于训练数据和技术本身的局限性。
伦理考量与风险
参考Gemma模型卡中的详细讨论。
优势
相比同类尺寸的开源模型,本系列模型:
- 提供高性能的代码专注型LLM实现
- 在编码基准测试中表现优异
- 专为负责任AI开发设计