CodeGemma リリースノート / 新機能
GoogleはCodeGemmaをリリースしました。これはコードに特化したオープンアクセスの大規模言語モデル(LLM)ファミリーです。事前学習済みの2Bおよび7B Gemmaチェックポイントを基に、CodeGemmaモデルは英語データ、数学、コードの追加で5000億トークンをさらに学習し、コード補完と生成における論理的・数学的推論能力を強化しています。
CodeGemma モデルバリエーション
CodeGemmaは、異なるデプロイやユースケースの要件に合わせて、3つの異なるバリエーションで提供されています。
- CodeGemma 2B: コードインフィリングのみで学習されたベースモデルです。低レイテンシや高プライバシーが重視される環境で、迅速なコード補完と生成に最適化されています。
- CodeGemma 7B: コードインフィリングデータ(80%)と自然言語の混合で学習されたベースモデルです。コード補完だけでなく、一般的なコードおよび言語の理解と生成をサポートします。
- CodeGemma 7B Instruct: 指示に従うようにファインチューニングされた7Bモデルのバージョンです。プログラミング、コード、数学的推論に関する対話型インタラクション向けに設計されています。
ファミリー内のすべてのモデルは8Kトークンのコンテキストサイズを維持しています。
パフォーマンスとベンチマーク
CodeGemma-7Bは他の7Bクラスモデルに対して強力なパフォーマンスを示します。Python向けHumanEvalベンチマークでは、DeepSeek-Coder-7Bを除く同等サイズのモデルを上回ります。このパフォーマンス傾向は、MultiPL-EによるHumanEvalの翻訳を通じて、Java、JavaScript、C++などの他のプログラミング言語にも拡張されます。
技術レポートによると、CodeGemma-7BはGSM8Kベンチマークで7Bモデルの中で最も高い性能を示しています。さらに、CodeGemma-7B-it(instruct)バージョンは、HumanEvalとMBPPの両方で最も人気のあるプログラミング言語において改善が見られます。
技術的実装とプロンプト
コードインフィリング (FIM)
CodeGemma 2B と 7B はコード補完のために Fill-In-the-Middle(FIM)目的を利用しています。これにより、モデルはプレフィックスとサフィックスの間のギャップを埋める形でコードを生成できます。以下の特殊トークンがこれらのプロンプトを構成するために使用されます:
<|fim_prefix|>: カーソル前のコンテキストの前に置かれます。<|fim_suffix|>: サフィックスの前に置かれます。このトークンはモデルがコードを生成すべき正確な位置を示します。<|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 ビット量子化、Parameter-Efficient Fine-Tuning(PEFT)、Flash Attention 2 をサポートします。モデルは推論速度向上のために torch.compile() と互換性があります。
ハードウェア要件:
- CodeGemma 2B:
float16精度で約 6 GB の RAM が必要です。 - 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 が推奨されます。