CodeGemma 發行說明 / 新功能
Google 已發布 CodeGemma,這是一個開放存取、專門用於程式碼的大型語言模型(LLMs)系列。CodeGemma 基於預訓練的 2B 與 7B Gemma 檢查點,進一步在額外 5000 億個英語語料、數學與程式碼的 token 上進行訓練,以提升程式碼補全與生成的邏輯與數學推理能力。
CodeGemma 模型變體
CodeGemma 提供三種不同的版本,以符合不同部署與使用情境的需求:
- CodeGemma 2B:僅在程式碼填補(Code Infilling)上進行訓練的基礎模型。它針對快速程式碼補全與生成進行優化,特別適用於低延遲或高度隱私需求的環境。
- CodeGemma 7B:在程式碼填補資料(80%)與自然語言混合訓練的基礎模型。它支援程式碼補全,以及一般程式碼與語言的理解與生成。
- CodeGemma 7B Instruct:7B 模型的指令微調版本,專為遵循指令而設計。它適用於有關程式設計、程式碼與數學推理的對話互動。
此系列所有模型皆維持 8K token 的上下文大小。
效能與基準測試
CodeGemma-7B 在與其他 7B 級別模型的比較中展現出強勁效能。在 Python 的 HumanEval 基準測試上,除 DeepSeek-Coder-7B 外,它的表現優於同等規模的模型。此效能趨勢亦延伸至其他程式語言,包括 Java、JavaScript 與 C++,透過 MultiPL-E 轉換的 HumanEval 進行測試。
根據技術報告,CodeGemma-7B 在 GSM8K 基準測試中於 7B 模型中表現最佳。此外,CodeGemma-7B-it(指令)版本在 HumanEval 與 MBPP 兩項測試中,於最受歡迎的程式語言上皆有提升。
技術實作與提示設計
程式碼填補(FIM)
CodeGemma 2B 與 7B 採用 Fill-In-the-Middle(FIM)目標進行程式碼補全。這使模型能根據前綴與後綴之間的空白生成程式碼。以下特殊 token 用於構造這些提示:
<|fim_prefix|>:位於游標前的上下文之前。<|fim_suffix|>:位於後綴之前;此 token 標示模型應生成程式碼的確切位置。<|fim_middle|>:觸發生成的提示。<|file_separator|>:用於提供多檔案上下文。
指令微調
CodeGemma 7B Instruct 採用標準 Gemma 指令微調提示格式,使用包含 <bos>、<start_of_turn>user 與 <start_of_turn>model 標籤的對話結構。
部署與整合
Hugging Face Transformers
CodeGemma 已整合至 transformers 函式庫(版本 4.39 以上)。它支援 safetensors 格式、透過 bitsandbytes 的 4 位元量化、參數高效微調(PEFT)以及 Flash Attention 2。這些模型相容於 torch.compile() 以加速推論。
硬體需求:
- CodeGemma 2B:使用
float16精度時大約需要 6 GB 記憶體。 - CodeGemma 7B:以 4 位元模式載入時大約需要 9 GB 記憶體。
雲端與推論端點
- Google Cloud:CodeGemma 可透過 Vertex AI 或 Google Kubernetes Engine(GKE)使用 Text Generation Inference(TGI)部署。
- Hugging Face Inference Endpoints:模型可使用 TGI 作為後端部署。請注意,T4 GPU 不支援
bfloat16格式,需使用其他 GPU 選項。
精度建議
原始檢查點以 bfloat16 形式發布。雖然 float16 在某些硬體上較適合且更快,但相較於 float32,建議使用 bfloat16 以獲得最高精度。