🚀 CodeGemma
CodeGemma是基於Gemma構建的輕量級開源代碼模型集合,提供了不同參數規模的變體,可用於代碼補全、代碼生成、代碼對話等多種編程相關任務,為開發者提供了強大的代碼輔助能力。
模型鏈接
✨ 主要特性
CodeGemma模型具有以下特點:
- 多任務支持:支持代碼補全、自然語言到代碼的生成、代碼對話和指令跟隨等多種任務。
- 多種參數變體:提供20億和70億參數的預訓練變體,以及70億參數的指令調優變體,滿足不同場景的需求。
- 高性能表現:在多個編碼和自然語言基準測試中表現出色。
📦 安裝指南
文檔未提及安裝步驟,故跳過此章節。
💻 使用示例
基礎用法
代碼生成
from transformers import GemmaTokenizer, AutoModelForCausalLM
tokenizer = GemmaTokenizer.from_pretrained("google/codegemma-1.1-7b-it")
model = AutoModelForCausalLM.from_pretrained("google/codegemma-1.1-7b-it")
input_text = "Write me a Python function to calculate the nth fibonacci number."
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-1.1-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": "Write a hello world program" },
]
prompt = tokenizer.apply_chat_template(chat, tokenize=False, add_generation_prompt=True)
高級用法
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 - 10000億個主要為英語的令牌數據上進行進一步訓練,這些數據來自公開可用的代碼庫、開源數學數據集和合成生成的代碼。
訓練數據處理
採用了以下數據預處理技術:
- FIM預訓練:CodeGemma模型專注於中間填充(FIM)任務,支持PSM和SPM模式,FIM率為80% - 90%,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 |
2B (1.1) |
7B |
7B - IT |
7B - IT (1.1) |
HumanEval |
31.1 |
37.8 |
44.5 |
56.1 |
60.4 |
MBPP |
43.6 |
49.2 |
56.2 |
54.2 |
55.6 |
HumanEval Single Line |
78.4 |
79.3 |
76.1 |
68.3 |
77.4 |
HumanEval Multi Line |
51.4 |
51.0 |
58.4 |
20.1 |
23.7 |
BC HE C++ |
24.2 |
19.9 |
32.9 |
42.2 |
46.6 |
BC HE C# |
10.6 |
26.1 |
22.4 |
26.7 |
54.7 |
BC HE Go |
20.5 |
18.0 |
21.7 |
28.6 |
34.2 |
BC HE Java |
29.2 |
29.8 |
41.0 |
48.4 |
50.3 |
BC HE JavaScript |
21.7 |
28.0 |
39.8 |
46.0 |
48.4 |
BC HE Kotlin |
28.0 |
32.3 |
39.8 |
51.6 |
47.8 |
BC HE Python |
21.7 |
36.6 |
42.2 |
48.4 |
54.0 |
BC HE Rust |
26.7 |
24.2 |
34.1 |
36.0 |
37.3 |
BC MBPP C++ |
47.1 |
38.9 |
53.8 |
56.7 |
63.5 |
BC MBPP C# |
28.7 |
45.3 |
32.5 |
41.2 |
62.0 |
BC MBPP Go |
45.6 |
38.9 |
43.3 |
46.2 |
53.2 |
BC MBPP Java |
41.8 |
49.7 |
50.3 |
57.3 |
62.9 |
BC MBPP JavaScript |
45.3 |
45.0 |
58.2 |
61.4 |
61.4 |
BC MBPP Kotlin |
46.8 |
49.7 |
54.7 |
59.9 |
62.6 |
BC MBPP Python |
38.6 |
52.9 |
59.1 |
62.0 |
60.2 |
BC MBPP Rust |
45.3 |
47.4 |
52.9 |
53.5 |
52.3 |
自然語言基準

倫理與安全
評估方法
評估方法包括結構化評估和相關內容政策的內部紅隊測試。紅隊測試由多個不同團隊進行,每個團隊有不同的目標和人工評估指標。這些模型在多個與倫理和安全相關的類別上進行評估,包括:
- 內容安全和代表性危害的人工評估:更多評估方法細節見Gemma模型卡片。
- 網絡攻擊能力測試:重點測試自主黑客能力,確保潛在危害得到限制。
評估結果
倫理和安全評估結果在可接受的閾值範圍內,符合內部政策,如兒童安全、內容安全、代表性危害、記憶和大規模危害等類別。更多細節見Gemma模型卡片。
模型使用與限制
預期用途
Code Gemma模型有廣泛的應用,不同的IT和PT模型有不同的用途:
- 代碼補全:PT模型可用於通過IDE擴展完成代碼。
- 代碼生成:IT模型可用於生成代碼,有無IDE擴展均可。
- 代碼對話:IT模型可支持代碼討論的對話界面。
- 代碼教育:IT模型支持交互式代碼學習體驗,有助於語法糾正或提供編碼練習。
已知限制
大語言模型(LLMs)基於其訓練數據和技術本身存在侷限性。更多LLMs侷限性細節見Gemma模型卡片。
倫理考慮與風險
大語言模型(LLMs)的開發引發了一些倫理問題。在這些模型的開發過程中,我們仔細考慮了多個方面。更多模型細節請參考Gemma模型卡片中的相關討論。
優勢
在發佈時,與同等規模的模型相比,這個模型家族提供了高性能的、專注於開源代碼的大語言模型實現,從一開始就為負責任的AI開發而設計。使用本文檔中描述的編碼基準評估指標,這些模型在性能上優於其他同等規模的開源模型。
📄 許可證
本項目使用的許可證為 gemma。