CodeLlama-70B(コードラマ・70ビー)
MetaがLlama 2をベースに2024年1月に公開したコード特化LLMの最大版。70Bパラメータを持ち、100,000トークンのコンテキストウィンドウを備える。Python特化バージョン(CodeLlama-70B-Python)と指示追従バージョン(Instruct)が用意される。
CodeLlama-70Bとは
CodeLlama-70BはMetaが2024年1月に公開したCodeLlamaシリーズの最大パラメータモデルです。Llama 2(70B)をベースに5000億トークン以上のコードデータで追加学習されており、GPT-3.5 Turboに相当するコーディング性能を持ちます。100,000トークンのコンテキストウィンドウが特徴で、大規模コードベースの理解に強みを持ちます。
CodeLlamaシリーズのラインナップ
| モデル | バリアント | 特徴 | 主な用途 |
|---|---|---|---|
| 7B | Base/Python/Instruct | 最軽量・高速推論 | IDEプラグイン |
| 13B | Base/Python/Instruct | バランス型 | 個人開発 |
| 34B | Base/Python/Instruct | 高精度 | チーム開発 |
| 70B | Base/Python/Instruct | 最高精度 | エンタープライズ |
バリアント別の用途
- Base: 事前学習のみ。Fine-tuningのベースに使用
- Python: Pythonコードデータで追加学習。Python特化用途
- Instruct: 指示追従に最適化。チャット形式でのコード生成に適合
アーキテクチャと学習の詳細
CodeLlamaはLlama 2アーキテクチャを継承しつつ、コード生成に特化した学習パイプラインを採用しています。
学習フェーズ
- コード学習: 5000億トークンのコードデータでfine-tuning
- ロングコンテキスト学習: 100K対応のための位置エンコーディング調整
- インフィル学習: Fill-in-the-Middle(FIM)対応の訓練
- 指示追従学習: Instructバリアントのみ、5億トークンの指示データで学習
HumanEvalベンチマーク
CodeLlama各サイズのHumanEval pass@1
| モデル | HumanEval(0-shot) | MBPP | MultiPL-E |
|---|---|---|---|
| CodeLlama-70B-Instruct | 67.8% | 62.4% | 61.2% |
| CodeLlama-34B-Instruct | 48.8% | 55.0% | 54.3% |
| CodeLlama-13B-Instruct | 42.7% | 49.4% | 50.1% |
| CodeLlama-7B-Instruct | 34.8% | 44.4% | 45.8% |
| GPT-3.5-Turbo(比較) | 73.0% | 81.1% | - |
後発のDeepSeek-Coder-V2やQwen2.5-Coderと比較すると性能で劣りますが、Metaという知名度の高い開発者によるモデルとして継続的なサポートと広いエコシステムを持ちます。
100Kコンテキストの実用場面
100,000トークン(約75,000英単語相当)のコンテキストは、中〜大規模のコードベース全体を一度に入力できる容量です。
活用が有効なシナリオ
- 数十ファイル規模のプロジェクト全体をコンテキストに含めたリファクタリング提案
- 100行超のSQLスキーマ定義を参照した最適クエリ生成
- ライブラリのソースコード全体を踏まえたバグ原因特定
- テストケースと実装コードを両方参照したデバッグ支援
インフィル(FIM)の使い方
CodeLlamaのFIM機能は穴埋め形式でコードを補完します。
# インフィルプロンプトの例
prompt = """<PRE> def fibonacci(n: int) -> int:
if n <= 1:
return n <SUF>
return fibonacci(n-1) + fibonacci(n-2) <MID>"""
<PRE>(前文脈)・<SUF>(後文脈)・<MID>(補完位置)の3タグで構造化されたFIMプロンプトにより、既存コードの途中部分を自然な形で補完できます。
ローカル実行環境
| 量子化 | VRAM | 推論速度(A100) | 推奨用途 |
|---|---|---|---|
| fp16 | 140GB | 高速 | 本番推論 |
| Q8_0 | 70GB | 中速 | 品質重視 |
| Q4_K_M | 40GB | 中速 | A100単機 |
| Q3_K_L | 32GB | やや低速 | コスト最適化 |
Q4_K_M量子化では40GBのVRAM(A100 40GB単機)で動作し、品質とコストのバランスが取りやすい構成です。llama.cppとvLLMの両方が安定してサポートしています。
FAQ
Q: CodeLlama-70BとLlama 3の関係は? A: CodeLlama-70BはLlama 2ベースです。MetaはLlama 3.1以降でコード能力を汎用モデルに統合する方向にシフトしており、CodeLlamaシリーズの後継として実質的にLlama 3.1-70B-Instructが位置づけられています。
Q: どの量子化が品質と実用性のバランスが良いですか? A: Q4_K_MまたはQ5_K_Mが推奨されます。Q4_K_Mは性能劣化を最小限に抑えつつ40GBのVRAMで動作し、Q5_K_MはVRAM44GBを要しますが品質がfp16により近くなります。
Q: 商用利用のライセンス条件は? A: Llama 2ライセンスに基づき、月間アクティブユーザー7億未満の企業は無償商用利用が可能です。7億以上の場合はMetaへのライセンス申請が必要です。
まとめ
CodeLlama-70Bは2024年1月時点でオープンソース最高水準のコード生成性能を持つモデルとしてリリースされました。100Kコンテキストと豊富なバリアント展開、Metaによる継続サポートが強みです。後発のDeepSeek-Coder-V2やQwen2.5-Coderと比較すると純粋な性能では劣りますが、広いエコシステムと安定した商用ライセンスを求める用途では依然として有力な選択肢です。