库名称:transformers
许可证:gemma
许可证链接:https://ai.google.dev/gemma/terms
任务标签:文本生成
额外访问提示标题:在Hugging Face上访问CodeGemma
额外访问提示内容:要在Hugging Face上访问CodeGemma,您需要查看并同意Google的使用许可。为此,请确保您已登录Hugging Face并点击下方按钮。请求将立即处理。
额外访问按钮内容:确认许可
示例输入:
- 文本:'<start_of_turn>用户 编写一个计算第n个斐波那契数的Python函数。<end_of_turn> <start_of_turn>模型'
推理参数:
max_new_tokens: 200
CodeGemma
模型页面
: CodeGemma
资源与技术文档
: 技术报告
: 负责任生成式AI工具包
使用条款
: 条款
作者
: Google
模型信息
简要描述及输入输出的定义。
描述
CodeGemma是基于Gemma构建的轻量级开源代码模型集合。CodeGemma模型是文本到文本和文本到代码的解码器专用模型,提供以下变体:
- 70亿参数的预训练变体,专长于代码补全和代码生成任务;
- 70亿参数的指令调优变体,用于代码对话和指令跟随;
- 20亿参数的预训练变体,用于快速代码补全。
示例用法
该模型旨在回答关于代码片段的问题、从自然语言生成代码,或与用户讨论编程或技术问题。如需代码补全功能(例如集成在IDE中),建议使用预训练模型:CodeGemma 7B或CodeGemma 2B。
代码生成
from transformers import GemmaTokenizer, AutoModelForCausalLM
tokenizer = GemmaTokenizer.from_pretrained("google/codegemma-7b-it")
model = AutoModelForCausalLM.from_pretrained("google/codegemma-7b-it")
input_text = "编写一个计算第n个斐波那契数的Python函数。"
input_ids = tokenizer(input_text, return_tensors="pt")
outputs = model.generate(**input_ids)
print(tokenizer.decode(outputs[0]))
对话模板
指令调优模型使用必须遵守的对话模板。最简单的方法是使用分词器内置的对话模板,如下所示:
加载模型并应用对话模板:
from transformers import AutoTokenizer, AutoModelForCausalLM
import transformers
import torch
model_id = "google/codegemma-7b-it"
dtype = torch.bfloat16
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(
model_id,
device_map="cuda",
torch_dtype=dtype,
)
chat = [
{ "role": "user", "content": "编写一个Hello World程序" },
]
prompt = tokenizer.apply_chat_template(chat, tokenize=False, add_generation_prompt=True)
此时,提示包含以下文本:
<bos><start_of_turn>user
编写一个Hello World程序<end_of_turn>
<start_of_turn>model
每轮对话以<start_of_turn>
分隔符开头,后跟实体角色(user
表示用户输入,model
表示模型响应),并以<end_of_turn>
标记结束。
生成示例:
inputs = tokenizer.encode(prompt, add_special_tokens=False, return_tensors="pt")
outputs = model.generate(input_ids=inputs.to(model.device), max_new_tokens=150)
输入与输出
输入
- 预训练模型:代码前缀/后缀(用于补全和生成场景)或自然语言文本/提示
- 指令调优模型:自然语言文本/提示
输出
- 预训练模型:中间填充代码补全、代码及自然语言
- 指令调优模型:代码及自然语言
模型数据
训练数据及处理方式。
训练数据集
基于Gemma模型,CodeGemma 2B和7B预训练变体额外训练了5000亿token,数据主要来自公开代码仓库、开源数学数据集和合成生成的代码。
数据预处理
应用以下技术:
- FIM(中间填充):支持PSM和SPM模式,FIM率为80%,PSM/SPM各占50%。
- 依赖图打包和单元测试词法打包:按项目/仓库级别组织训练样本,关联相关源文件。
- 新颖的文档分割技术:使后缀起始点更符合语法自然性。
- 安全性过滤:包括个人数据过滤、CSAM过滤及内容质量与安全策略(参见政策)。
实现信息
训练硬件与软件。
硬件
使用最新一代TPUv5e硬件训练。
软件
使用JAX和ML Pathways训练。
评估信息
模型评估指标与结果。
评估方法
在多个领域评估:
- 代码补全:HumanEval单行/多行填充
- 代码生成:HumanEval、MBPP、BabelCode(支持C++、C#、Go等)
- Q&A:BoolQ、PIQA、TriviaQA
- 自然语言:ARC-Challenge、HellaSwag、MMLU
- 数学推理:GSM8K、MATH
评估结果
代码基准
(表格数据略,保留原格式)
自然语言基准

伦理与安全
评估方法与结果。
评估方法
包括结构化评估和内部红队测试,覆盖内容安全与表征危害等类别(详见Gemma模型卡)。
评估结果
符合内部政策阈值,包括儿童安全、内容安全等(参见Gemma模型卡)。
使用与限制
预期用途
- 代码补全:预训练模型支持IDE扩展
- 代码生成:指令调优模型支持代码生成
- 代码对话:支持讨论代码的交互界面
- 代码教育:支持交互式学习、语法纠正等
已知限制
大语言模型存在训练数据和技术固有限制(参见Gemma模型卡)。
伦理考量与风险
开发中的伦理问题(参见Gemma模型卡相同讨论)。
优势
发布时,该模型家族在负责任AI开发方面优于同类尺寸的开源替代方案,代码基准表现更优。