CodeGemmaの概要
CodeGemmaとは?
- Googleが開発したコード特化の大規模言語モデル(LLM)
- Gemmaモデルをベースに、追加で5000億トークンの英語データ、数学、コードを学習
- コードの補完や生成に特化し、論理的・数学的な推論能力に優れる
こちらの記事もおすすめ
JAXとWandbとSelf-Consistencyを使ったGemma Instruct 2Bモデルのファインチューニング入門
このノートブックでは、Kaggleの"AI Mathematical Olympiad"コンペティションに向けて、JAXをバックエンドに使用してGemma Instruct 2Bモデルをファインチューニングする方法を解説します。また、Wei...
JAXとWeights & Biasesを用いたGemma Instruct 2BモデルのFinetuning入門
はじめにこのノートブックでは、JAXをバックエンドに使用して、Kaggleの"AI Mathematical Olympiad"コンペティションに向けてGemma Instruct 2Bモデルをfinetuningする方法について解説します...
学習データの内訳
- 主に英語のWebドキュメント、数学、コードで構成
- コードの補完(infilling)データを80%、自然言語データを20%の割合で学習(CodeGemma 7Bの場合)
コンテキストサイズ
- 先行モデルと同じ8Kトークンのコンテキストサイズを保持
CodeGemmaの3つのバージョン
CodeGemma 2B
- コード補完(infilling)に特化した小型モデル(2B = 20億パラメータ)
- 高速なコード補完・生成が可能で、レイテンシーやプライバシーが重要な場面に適する
- 約6GBのメモリで動作可能(float16)
CodeGemma 7B
- コード補完(80%)と自然言語(20%)を学習した中型モデル(7B = 70億パラメータ)
- コードの補完だけでなく、コードと自然言語の理解・生成にも使える
- 補完後も追加のコードやコメントを生成する傾向あり
CodeGemma 7B Instruct
- CodeGemma 7Bをベースに、命令に従うようファインチューニングされたモデル
- コードやプログラミング、数学的推論に関する対話に適する
- Gemma Instructと同様の会話形式を使用
ベンチマークでの評価結果
HumanEval (Pythonコード)
- CodeGemma-7Bは同サイズの他モデルを上回る性能(DeepSeek-Coder-7Bを除く)
- CodeGemma-7B-itはさらに性能が向上
MultiPL-E (他言語への翻訳版HumanEval)
- Java, JavaScript, C++等の言語でも優れた結果
GSM8K (数学的推論)
- 7Bモデルの中で最高の性能を達成(CodeGemma-7B)
MBPP (Pythonコード)
- CodeGemma-7B-itが主要言語で性能向上
プロンプトの形式と記号
CodeGemma 2B, 7B (infilling形式)
- <|fim_prefix|>: 補完する前の文脈
- <|fim_suffix|>: 補完後の文脈(カーソル位置に相当)
- <|fim_middle|>: 補完を促すプロンプト
- <|file_separator|>: 複数ファイルの文脈を区切るために使用
CodeGemma 7B Instruct (会話形式)
-
user 〜 -
model 〜 - Transformersのチャットテンプレートを使うと簡単に再現可能
使用方法
環境設定
- 🤗Transformersライブラリの最新バージョン(v4.39以降)をインストール
- float16精度で推論すれば、6GBのメモリで動作(CodeGemma 2Bの場合)
基本的な手順
- モデルとトークナイザをロード
- プロンプトを作成し、トークナイズ
- generateメソッドで生成を実行
プロンプトの作成
- infilling形式の場合、fim_prefixとfim_suffixの間に補完を挿入
- 追加の文脈はfim_middle以降に記述
生成の制御
- 区切り記号(FIM_PREFIX, FIM_MIDDLE, FIM_SUFFIX, FIM_FILE_SEPARATOR)をeos_token_idとして指定
- 最初の区切り記号が現れた時点で生成を停止
精度に関する注意点
- オリジナルのチェックポイントはbfloat16だが、float16に変換しても問題なし
- 特定のハードウェアではfloat16の方が高速な場合あり
- 最大限の精度を求める場合はbfloat16を使用
量子化
- bitsandbytesを使って、8bitや4bitで自動的に量子化可能
- CodeGemma 7Bを4bitでロードすると約9GBのメモリで動作
統合とデプロイ
Google Cloud との統合
- Vertex AI や Google Kubernetes Engine (GKE) 上でデプロイ・学習が可能
- Text Generation Inference と Transformers を使用
- モデルページの "Deploy -> Google Cloud" からワンクリックでデプロイ可能
- Vertex AI Model Garden からも直接アクセス可能
Hugging Face Inference Endpoints との統合
- Text Generation Inference をバックエンドとして使用
- モデルページの "Deploy -> Inference Endpoints" からデプロイ可能
- T4 GPU では bfloat16 がサポートされないため、他の GPU オプションを使用する必要あり
以上が、より詳細な情報を含んだCodeGemmaの解説記事です。見出しを増やし、各項目の内容を深掘りすることで、初心者の方でもCodeGemmaの特徴や使い方をより深く理解できるようになったのではないでしょうか。実際のプロジェクトでCodeGemmaを活用し、プログラミングの生産性向上にお役立てください。
参考サイト
Gemma Family Expands with Models Tailored for Developers and Researchers
コメント