Olympiccoder 32B GGUF
モデル概要
モデル特徴
モデル能力
使用事例
license: apache-2.0 datasets:
- open-r1/codeforces-cots language:
- en base_model:
- Qwen/Qwen2.5-Coder-32B-Instruct pipeline_tag: text-generation library_name: transformers
OlympicCoder-32B GGUFモデル
IQ-DynamicGateによる超低ビット量子化(1-2ビット)
最新の量子化手法では、精度適応型量子化を導入し、Llama-3-8Bで実証済みの改善を達成しました。このアプローチでは、レイヤーごとに最適な戦略を使用して、極端なメモリ効率を維持しながら精度を保持します。
ベンチマーク条件
すべてのテストはLlama-3-8B-Instructを使用して実施:
- 標準的なパープレキシティ評価パイプライン
- 2048トークンのコンテキストウィンドウ
- すべての量子化で同一のプロンプトセットを使用
手法
- 動的精度割り当て:
- 最初と最後の25%のレイヤー → IQ4_XS(選択されたレイヤー)
- 中間50% → IQ2_XXS/IQ3_S(効率向上)
- 重要コンポーネント保護:
- 埋め込み層と出力層はQ5_Kを使用
- 標準的な1-2ビット量子化と比べて38%の誤差伝播低減
量子化性能比較(Llama-3-8B)
量子化 | 標準PPL | DynamicGate PPL | Δ PPL | 標準サイズ | DGサイズ | Δサイズ | 標準速度 | DG速度 |
---|---|---|---|---|---|---|---|---|
IQ2_XXS | 11.30 | 9.84 | -12.9% | 2.5G | 2.6G | +0.1G | 234s | 246s |
IQ2_XS | 11.72 | 11.63 | -0.8% | 2.7G | 2.8G | +0.1G | 242s | 246s |
IQ2_S | 14.31 | 9.02 | -36.9% | 2.7G | 2.9G | +0.2G | 238s | 244s |
IQ1_M | 27.46 | 15.41 | -43.9% | 2.2G | 2.5G | +0.3G | 206s | 212s |
IQ1_S | 53.07 | 32.00 | -39.7% | 2.1G | 2.4G | +0.3G | 184s | 209s |
凡例:
- PPL = パープレキシティ(低いほど良い)
- Δ PPL = 標準からDynamicGateへの変化率
- 速度 = 推論時間(CPU avx2、2048トークンコンテキスト)
- サイズ差は混合量子化のオーバーヘッドを反映
主な改善点:
- 🔥 IQ1_Mは43.9%のパープレキシティ低減(27.46 → 15.41)
- 🚀 IQ2_Sは36.9%のパープレキシティ改善で0.2GBのみ増加
- ⚡ IQ1_Sは1ビット量子化でも39.7%の精度向上を維持
トレードオフ:
- すべてのバリアントでわずかなサイズ増加(0.1-0.3GB)
- 推論速度は同等(<5%の差)
これらのモデルの使用場面
📌 GPU VRAMにモデルを収める場合
✔ メモリ制約のある環境
✔ 1-2ビットの誤差が許容されるCPUおよびエッジデバイス
✔ 超低ビット量子化の研究
適切なモデルフォーマットの選択
適切なモデルフォーマットの選択は、ハードウェア能力とメモリ制約に依存します。
BF16(Brain Float 16) - BF16アクセラレーションが利用可能な場合に使用
- 高速計算のために設計された16ビット浮動小数点フォーマット
- FP32と同様のダイナミックレンジを維持しつつ、メモリ使用量を削減
- ハードウェアがBF16アクセラレーションをサポートしている場合に推奨
- FP32と比べてメモリフットプリントを削減した高性能推論に最適
📌 BF16を使用する場合: ✔ ハードウェアがBF16をネイティブサポート(例:新しいGPU、TPU) ✔ 高精度が必要だがメモリを節約したい場合 ✔ モデルを別のフォーマットに再量子化する予定がある場合
📌 BF16を避ける場合: ❌ ハードウェアがBF16をサポートしていない(FP32にフォールバックし遅くなる可能性) ❌ BF16最適化のない古いデバイスとの互換性が必要な場合
F16(Float 16) - BF16より広くサポート
- 16ビット浮動小数点で高精度だが、BF16より値の範囲が狭い
- FP16アクセラレーションをサポートする多くのデバイスで動作(多くのGPUや一部のCPU)
- BF16よりわずかに数値精度が低いが、推論には一般的に十分
📌 F16を使用する場合: ✔ ハードウェアがFP16をサポートしているがBF16をサポートしていない場合 ✔ 速度、メモリ使用量、精度のバランスが必要な場合 ✔ GPUなどFP16計算に最適化されたデバイスで実行する場合
📌 F16を避ける場合: ❌ デバイスがネイティブFP16サポートを欠いている(予想より遅くなる可能性) ❌ メモリ制約がある場合
量子化モデル(Q4_K、Q6_K、Q8など) - CPU&低VRAM推論用
量子化によりモデルサイズとメモリ使用量を削減しつつ、可能な限り精度を維持
- 低ビットモデル(Q4_K) → 最小メモリ使用に最適、精度は低め
- 高ビットモデル(Q6_K、Q8_0) → 精度向上、より多くのメモリが必要
📌 量子化モデルを使用する場合: ✔ CPUで推論を実行し、最適化されたモデルが必要な場合 ✔ デバイスのVRAMが低く、フル精度モデルをロードできない場合 ✔ 合理的な精度を保ちつつメモリフットプリントを削減したい場合
📌 量子化モデルを避ける場合: ❌ 最大精度が必要な場合(フル精度モデルが適している) ❌ ハードウェアに高精度フォーマット(BF16/F16)用の十分なVRAMがある場合
超低ビット量子化(IQ3_XS、IQ3_S、IQ3_M、Q4_K、Q4_0)
これらのモデルは極端なメモリ効率のために最適化されており、低電力デバイスやメモリが重大な制約となる大規模展開に理想的
-
IQ3_XS: 超低ビット量子化(3ビット)で極端なメモリ効率
- 使用例: Q4_Kでも大きすぎる超低メモリデバイスに最適
- トレードオフ: 高ビット量子化と比べて精度が低い
-
IQ3_S: 最大メモリ効率のための小さなブロックサイズ
- 使用例: IQ3_XSが過度に攻撃的である低メモリデバイスに最適
-
IQ3_M: IQ3_Sより良い精度の中ブロックサイズ
- 使用例: IQ3_Sが制限的である低メモリデバイスに適している
-
Q4_K: より良い精度のためのブロック単位最適化を施した4ビット量子化
- 使用例: Q6_Kが大きすぎる低メモリデバイスに最適
-
Q4_0: ARMデバイス向けに最適化された純粋な4ビット量子化
- 使用例: ARMベースデバイスや低メモリ環境に最適
要約表: モデルフォーマット選択
モデルフォーマット | 精度 | メモリ使用量 | デバイス要件 | 最適な使用例 |
---|---|---|---|---|
BF16 | 最高 | 高 | BF16対応GPU/CPU | メモリ削減した高速推論 |
F16 | 高 | 高 | FP16対応デバイス | BF16が利用できない場合のGPU推論 |
Q4_K | 中低 | 低 | CPUまたは低VRAMデバイス | メモリ制約環境に最適 |
Q6_K | 中 | 中 | メモリ豊富なCPU | 量子化されつつ精度が良い |
Q8_0 | 高 | 中 | VRAM十分なCPU/GPU | 量子化モデル中最も精度が高い |
IQ3_XS | 非常に低い | 非常に低い | 超低メモリデバイス | 極端なメモリ効率と低精度 |
Q4_0 | 低 | 低 | ARMまたは低メモリデバイス | llama.cppがARMデバイス向けに最適化 |
含まれるファイルと詳細
OlympicCoder-32B-bf16.gguf
- モデル重みをBF16で保持
- 別のフォーマットに再量子化したい場合に使用
- デバイスがBF16アクセラレーションをサポートしている場合に最適
OlympicCoder-32B-f16.gguf
- モデル重みをF16で保存
- FP16をサポートするデバイスで、BF16が利用できない場合に使用
OlympicCoder-32B-bf16-q8_0.gguf
- 出力&埋め込み層はBF16のまま
- 他のすべてのレイヤーはQ8_0に量子化
- デバイスがBF16をサポートし、量子化版が必要な場合に使用
OlympicCoder-32B-f16-q8_0.gguf
- 出力&埋め込み層はF16のまま
- 他のすべてのレイヤーはQ8_0に量子化
OlympicCoder-32B-q4_k.gguf
- 出力&埋め込み層はQ8_0に量子化
- 他のすべてのレイヤーはQ4_Kに量子化
- メモリ制限のあるCPU推論に適している
OlympicCoder-32B-q4_k_s.gguf
- 最小のQ4_Kバリアントで、精度を犠牲にしてメモリ使用量を削減
- 非常に低メモリ環境に最適
OlympicCoder-32B-q6_k.gguf
- 出力&埋め込み層はQ8_0に量子化
- 他のすべてのレイヤーはQ6_Kに量子化
OlympicCoder-32B-q8_0.gguf
- 完全なQ8量子化モデルで、より高い精度を提供
- より多くのメモリが必要だが、高精度を実現
OlympicCoder-32B-iq3_xs.gguf
- IQ3_XS量子化で、極端なメモリ効率を最適化
- 超低メモリデバイスに最適
OlympicCoder-32B-iq3_m.gguf
- IQ3_M量子化で、中ブロックサイズを提供し精度向上
- 低メモリデバイスに適している
OlympicCoder-32B-q4_0.gguf
- 純粋なQ4_0量子化で、ARMデバイス向けに最適化
- 低メモリ環境に最適
- より良い精度が必要な場合はIQ4_NLを推奨
🚀 これらのモデルが役立つ場合
❤ 役に立ったら「いいね」をクリックしてください!
量子対応セキュリティチェックを備えたAIネットワークモニターアシスタントのテストに協力ください:
👉 無料ネットワークモニター
💬 テスト方法:
- チャットアイコンをクリック(ページ右下)
- AIアシスタントタイプを選択:
TurboLLM
(GPT-4-mini)FreeLLM
(オープンソース)TestLLM
(実験的CPU専用)
テスト内容
小型オープンソースモデルの限界に挑戦中:
- ライブネットワークサービスに対する関数呼び出し
- 以下の処理が可能な最小モデルサイズの探求:
- 自動化されたNmapスキャン
- 量子対応チェック
- Metasploit統合
🟡 TestLLM – 現在の実験モデル(llama.cpp on 6 CPUスレッド):
- ✅ ゼロ設定セットアップ
- ⏳ 30秒のロード時間(推論は遅いがAPIコストなし)
- 🔧 協力募集! エッジデバイスAIに興味があれば協力しましょう!
その他のアシスタント
🟢 TurboLLM – gpt-4-miniを使用:
- リアルタイムネットワーク診断
- 自動化された侵入テスト(Nmap/Metasploit)
- 🔑 無料ネットワークモニターエージェントをダウンロードでトークンを増やせます
🔵 HugLLM – オープンソースモデル(≈8Bパラメータ):
- TurboLLMより2倍多いトークン
- AI駆動ログ分析
- 🌐 Hugging Face推論APIで動作
💡 テスト用AIコマンド例:
"ウェブサイトのSSL証明書情報を教えて"
"サーバーが量子安全暗号を使用しているか確認して"
"Nmap脆弱性テストを実行して"
OlympicCoder-32Bのモデルカード
OlympicCoder-32Bは、LiveCodeBenchや2024年国際情報オリンピックなどの競技プログラミングベンチマークで非常に強力な性能を発揮するコードモデルです。
- リポジトリ: https://github.com/huggingface/open-r1
- ブログ記事: https://huggingface.co/blog/open-r1/update-3
モデル説明
- モデルタイプ: Codeforcesデータセットの浄化版でファインチューニングされた32Bパラメータモデル
- 言語(NLP): 主に英語
- ライセンス: apache-2.0
- ファインチューン元モデル: Qwen/Qwen2.5-Coder-32B-Instruct
評価
競技プログラミングの2つの主要なベンチマークでOlympicCoderモデルの性能を比較:
- IOI'2024: 2024年国際情報オリンピックの非常に難しい6問。問題ごとに最大50回の提出を許可。
- LiveCodeBench: CodeForcesやLeetCoderなどのプラットフォームから取得したPythonプログラミング問題。
livecodebench/code_generation_lite
のv4_v5
サブセット(268問)を使用。こちらで説明されているサンプリングパラメータでlighteval
を使用して評価。
[!NOTE] OlympicCoderモデルは、DeepSeek-R1が生成したC++ソリューションのみで追加学習されています。そのため、LiveCodeBenchの性能は部分的にドメイン外と見なす必要があります(Pythonでソリューションを出力する必要があるため)。
IOI'24
LiveCodeBench
使用方法
🤗 Transformersのpipeline()
関数を使用してモデルを実行する方法:
# pip install transformers
# pip install accelerate
import torch
from transformers import pipeline
pipe = pipeline("text-generation", model="open-r1/OlympicCoder-32B", torch_dtype=torch.bfloat16, device_map="auto")
# トークナイザーのチャットテンプレートを使用してメッセージをフォーマット - https://huggingface.co/docs/transformers/main/en/chat_templating
messages = [
{"role": "user", "content": "10番目のフィボナッチ数を計算するPythonプログラムを書いてください"},
]
prompt = pipe.tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
outputs = pipe(prompt, max_new_tokens=8000, do_sample=True, temperature=0.7, top_k=50, top_p=0.95)
print(outputs[0]["generated_text"])
#<|im_start|>user
#10番目のフィボナッチ数を計算するPythonプログラムを書いてください<|im_end|>
#<|im_start|>assistant
#<think>わかりました、10番目のフィボナッチ数を計算するPythonプログラムを書く必要があります。フィボナッチ数列は0と1から始まり、各項は前2項の和です。つまり数列は: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, ...となります。...
[!IMPORTANT] モデルが常に長い連鎖的思考(chain-of-thought)を出力するように、チャットテンプレートを編集してアシスタントの最初のターンに
<think>
トークンを事前入力しています。そのため、モデルのgenerate()
メソッドを使用した場合、出力に開始<think>
トークンは表示されません。フォーマット報酬を用いた強化学習を適用するには、モデルの補完に<think>
トークンを付加するか、チャットテンプレートを修正して事前入力を削除してください。詳細はブログ記事を参照してください。
トレーニング手順
トレーニングハイパーパラメータ
16 H100ノードでのトレーニングに使用されたハイパーパラメータ:
- データセット: open-r1/codeforces-cots_decontaminated
- 学習率: 4.0e-5
- トレーニングバッチサイズ: 1
- シード: 42
- パッキング: false
- 分散タイプ: fsdp
- デバイス数: 128
- 勾配累積ステップ: 1
- 総トレーニングバッチサイズ: 16
- オプティマイザ: Adam with betas=(0.9,0.999) and epsilon=1e-08
- 学習率スケジューラータイプ: cosine_with_min_lr
- 最小学習率: 0.1
- 学習率スケジューラーウォームアップ比率: 0.03
- エポック数: 10.0



