🚀 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