モデル概要
モデル特徴
モデル能力
使用事例
language:
- en
- zh tags:
- MiniCPM
- ModelBest
- THUNLP license: apache-2.0
MiniCPM-S-1B-sft
- オリジナルモデル: MiniCPM-1B-sft-bf16
- モデル作成者およびファインチューニング: ModelBest, OpenBMB, THUNLP
- 論文: リンク (注:
MiniCPM-S-1B
は論文内でProSparse-1B
と表記) - LLaMA形式適応版: MiniCPM-S-1B-sft-llama-format
- PowerInfer形式適応版: MiniCPM-S-1B-sft-gguf
チャットテンプレート
モデルに洗練された応答をさせるためには、以下の標準的なチャットプロンプトを使用することを推奨します:
<ユーザー>{prompt}<AI>
ここでprompt
はクエリテキスト、<ユーザー>
と<AI>
はプロンプトトークンです。
また、入力の先頭にbosトークン<s>
を必ず含めるようにしてください。含めない場合、モデルが不適切に動作する可能性があります。
イントロダクション
活性化スパース性(活性化出力に含まれる寄与の弱い要素が多く存在する現象)の活用は、大規模言語モデル(LLM)の推論加速において有望な手法です(Liu et al., 2023; Song et al., 2023)。具体的には、活性化スパース性に基づく加速手法は、これらの弱寄与パラメータへのリソース浪費を回避するため、より賢明なリソース配分と計算ポリシーを採用することで、高い推論速度を実現します。
ReLUを活性化関数として採用することは、活性化スパース性を実現する直接的な方法です。しかし、最近の主流LLMの多くは本質的なスパース性を持たない活性化関数(GELUやSwishなど)を採用しています。いくつかの研究(Zhang et al., 2022; Mirzadeh et al., 2023; Zhang et al., 2024)では、ReLUまたはその変種を代替活性化関数として導入し、非ReLU LLMに活性化スパース性と推論加速をもたらそうとしていますが、高いスパース性とタスク性能の両立を同時に達成できた例はほとんどありません。
本研究では、「ProSparse」と呼ばれるシンプルで効果的なスパース化手法を提案し、LLMの活性化スパース性を向上させつつ同等の性能を維持します。ProSparseをSwish活性化のLLaMA2-7B、LLaMA2-13B、MiniCPM-1Bに適用した結果、それぞれ89.32%、88.80%、87.89%という高いスパース性を持つReLU活性化モデルを獲得し、その性能はオリジナル版と同等でした。これらはオープンソースのLLaMAバージョンおよび競合するエンドサイズモデルの中で最もスパースな活性化モデルであり、ReluLLaMA-7B(66.98%)やReluLLaMA-13B(71.56%)を大幅に上回ります。さらに、推論加速実験では、高いスパース性がPowerInferと私たちの2つのスパースGPU演算子の両方で実用的な高速化効果をもたらすことが実証されました。
トレーニングデータセット
1Bモデルは約4730.2億トークンを101,000ステップにわたってトレーニングしました。これには、標準的なProSparse事前トレーニング用の35,000ステップ、減衰用の60,000ステップ、SFT用の6,000ステップが含まれます。ProSparse以外のトレーニング設定は、オリジナルのMiniCPM-1Bと高度に一致しています。詳細については、私たちの論文とMiniCPM技術レポートを参照してください。
直感的には、より多くのトークンでトレーニングするか、より広範なカバレッジと高い品質のデータでトレーニングすることで、タスク固有の性能をさらに向上させることができます。
ProSparse: トレーニング方法論
ProSparseのトレーニングプロセスは3つのステップで構成されます(詳細は論文のセクション3.2を参照):
- 活性化関数の置換: FFNの活性化関数をReLUに置換し、継続的トレーニングを適用
- 漸進的スパース性正則化: 従来の次トークン予測損失と\(L_1\)正則化損失を共同で最適化。正則化はFFNのスパース中間出力に適用され、正則化係数は複数段階で漸進的に増加。具体的には、正則化係数\(\lambda\)はウォームアップ段階では小さな定数に設定され、その後各増分段階で滑らかな正弦曲線に沿って増加。各段階には一定のトレーニングステップが伴い、モデルが急激な活性化変化なしに増加する正則化に適応する時間を確保することで性能劣化を軽減
- 活性化閾値シフト: 最終的にReLUをFATReLU(Kurtz et al., 2020)に置換。これは正の閾値を持つReLU変種で、活性化出力内の非ゼロの弱寄与要素を刈り込み、スパース性をさらに向上
各段階のハイパーパラメータ(正則化係数\(\lambda_i\)、累積トレーニングステップ\(T_i\)、累積トレーニングトークン数)は以下の通り:
ステップ番号 \(i\) | \(\lambda_i\) | \(T_i\) | 累積トークン数 (B) |
---|---|---|---|
0 | 0 | 10,000 | 49.15 |
1 | \(1e-3\) | 15,000 | 73.73 |
2 | \(5e-3\) | 20,000 | 98.30 |
3 | \(5e-3\) | 25,000 | 122.88 |
4 | \(5e-2\) | 35,000 | 172.03 |
減衰 | \(5e-2\) (固定) | 95,000 | 466.94 |
SFT | \(1e-2\) (固定) | 101,000 | 473.02 |
評価結果
上記ベンチマークでの評価結果は、ProSparseの優位性を示しています。これは、高いスパース性とオリジナルのSwish活性化LLaMA2と同等の性能を同時に達成した唯一の手法です。なお、すべての設定のモデルは同じ混合データセットで同じトークン数でトレーニングされています。評価はUltraEvalフレームワークに基づいています。評価の詳細は以下の通り:
- コード生成: HumanEval(0-shot)とMBPP(3-shot)での平均pass@1スコアを計算
- 常識推論: PIQA、SIQA、HellaSwag、WinoGrande、COPAでの平均0-shot精度を報告
- 読解力: BoolQ、LAMBADA、TyDi QAでの平均0-shot精度を計算
- その他の人気ベンチマーク: GSM8K(8-shot)、MMLU(5-shot)、Big Bench Hard(BBH)(3-shot)、AGI-Eval(0-shot)での平均精度を報告
注記: PIQA、SIQA、HellaSwag、WinoGrande、COPA、BoolQ、LAMBADA、TyDi QA、AGI-Evalについては、最大化されたパープレキシティに基づいて予測回答を取得。GSM8K、MMLU、BBHについては、予測回答を直接生成。
設定 | 平均 スパース性 |
平均 性能 |
コード 生成 |
常識 推論 |
読解力 | GSM8K | MMLU | BBH | AGI Eval |
---|---|---|---|---|---|---|---|---|---|
LLaMA2-7B | - | 37.96 | 16.37 | 69.59 | 61.87 | 12.96 | 44.45 | 32.96 | 27.53 |
ReluLLaMA-7B | 66.98 | 37.62 | 15.85 | 69.64 | 70.54 | 5.84 | 38.64 | 35.07 | 27.73 |
ProSparse-7B* | 88.11 | 38.31 | 19.47 | 66.29 | 63.33 | 12.74 | 45.21 | 33.59 | 27.55 |
ProSparse-7B | 89.32 | 38.46 | 19.42 | 66.27 | 63.50 | 12.13 | 45.48 | 34.99 | 27.46 |
LLaMA2-13B | - | 44.06 | 20.19 | 72.58 | 71.55 | 22.21 | 54.69 | 37.89 | 29.33 |
ReluLLaMA-13B | 71.56 | 42.74 | 20.19 | 70.44 | 73.29 | 18.50 | 50.58 | 37.97 | 28.22 |
ProSparse-13B* | 87.97 | 45.07 | 29.03 | 69.75 | 67.54 | 25.40 | 54.78 | 40.20 | 28.76 |
ProSparse-13B | 88.80 | 44.90 | 28.42 | 69.76 | 66.91 | 26.31 | 54.35 | 39.90 | 28.67 |
MiniCPM-1B | - | 44.44 | 36.85 | 63.67 | 60.90 | 35.48 | 50.44 | 35.03 | 28.71 |
MiniCPM-S-1B* | 86.25 | 44.72 | 41.38 | 64.55 | 60.69 | 34.72 | 49.36 | 34.04 | 28.27 |
MiniCPM-S-1B | 87.89 | 44.72 | 42.04 | 64.37 | 60.73 | 34.57 | 49.51 | 34.08 | 27.77 |
注記: "Original"はオリジナルのSwish活性化LLaMA2バージョンを指す。ReluLLaMA-7BとReluLLaMA-13Bはそれぞれ7Bと13Bで利用可能。MiniCPM-1Bは1Bで利用可能。"ProSparse-7B*"、"ProSparse-13B*"、"MiniCPM-S-1B*"は活性化閾値シフトなしのProSparseバージョンを表す。
LM-Evalにおける評価問題
上記の結果はUltraEvalで再現可能。LM-Evalなどの他の人気フレームワークで得られる異常な結果は、おそらくclsトークン<s>
のデフォルトでの欠如に起因します。LM-Evalではデフォルトで追加されません。以下のコードに簡単な一時的な修正を示します。評価結果のその他の差異は、few-shot設定、データ前処理、追加プロンプトなどの他の要因による可能性があります。
# https://github.com/EleutherAI/lm-evaluation-harness/blob/main/lm_eval/models/huggingface.py#L945
for _, context_enc, continuation_enc in chunk:
# 健全性チェック
assert len(context_enc) > 0
# 注: ここで簡単な修正
if context_enc[0] != 1:
context_enc = [1] + context_enc
assert len(continuation_enc) > 0
assert len(continuation_enc) <= self.max_length
オリジナルのvLLMをProSparse LLaMAモデルに適応させる手順は以下の通り:
- オリジナルvLLMのvllm/model_executor/models/llama.pyファイルをこのファイルに置換
- オリジナルのconfig.jsonの内容をこのファイルに置換
- 環境変数
ACT_INFO
を設定。活性化閾値シフトなしバージョンをテストする場合はexport ACT_INFO=relu
、活性化閾値シフトありバージョンをテストする場合はexport ACT_INFO=fatrelu_0.01
推論加速効果
まず、活性化スパース性を活用した最先端の加速フレームワークPowerInferを利用。その推論速度と精度は活性化予測器の性能に大きく依存するため、活性化再現率と予測スパース性(活性化予測器を評価するための2つの主要指標)およびPowerInferによる1秒あたりの生成トークン数(1つのA100 GPUと十分なCPUを使用)を報告。ProSparse LLaMAモデル用のGGUFファイルと活性化予測器も利用可能。
さらに、活性化予測器の誤った予測による推論の不正確さを考慮し、活性化スパース性を利用した高速で正確な推論のための2つのスパースGPU演算子を実装。これらはゲート付きFFNにおける2つの主要なステップの高速化を担当:
- ステップ(2)(
S2
): ReLUと\(\mathbf{s} \odot (\mathbf{x} \mathbf{W}_1^T)\)の融合演算子 - ステップ(3)(
S3
): スパース行列-ベクトル乗算演算子\(\mathbf{x}_1 \mathbf{W}_2^T\)
ここで、\(\mathbf{s}\)、\(\mathbf{x}\)、\(\mathbf{x}_1\)、\(\odot\)はそれぞれゲーティングスコア、FFN入力隠れ状態、中間出力、要素ごとの乗算を表す。\(\mathbf{W}_1\)と\(\mathbf{W}_2\)はFFN重み行列。
異なるスパース性を持つLLMの加速効果を以下に示す。ProSparseは性能劣化なしに高いスパース性を達成し、関連するすべての設定の中で最も多くの利益を得ることができます。詳細は論文のセクション4.3を参照。
設定 | 平均 スパース性 |
活性化 再現率 |
予測 スパース性 |
PowerInfer 速度 |
密モデルに対する 加速比 |
S2 時間 |
密モデルに対する 加速比 |
S3 時間 |
密モデルに対する 加速比 |
---|---|---|---|---|---|---|---|---|---|
Dense-7B | - | - | - | 3.67 | 1.00 | 90.55 | 1.00 | 82.92 | 1.00 |
ReluLLaMA-7B | 66.98 | 90.89 | 58.95 | 11.37 | 3.10 | 67.12 | 1.35 | 63.00 | 1.32 |
ProSparse-7B* | 88.11 | 93.46 | 75.24 | 16.30 | 4.44 | 46.66 | 1.94 | 55.56 | 1.49 |
ProSparse-7B | 89.32 | 92.34 | 78.75 | - | - | 45.38 | 2.00 | 55.05 | 1.51 |
Dense-13B | - | - | - | 1.92 | 1.00 | 131.36 | 1.00 | 113.68 | 1.00 |
ReluLLaMA-13B | 71.56 | 86.41 | 71.93 | 6.59 | 3.43 | 69.92 | 1.88 | 75.47 | 1.51 |
ProSparse-13B* | 87.97 | 91.02 | 77.93 | 8.67 | 4.52 | 55.29 | 2.38 | 67.50 | 1.68 |
ProSparse-13B | 88.80 | 91.11 | 78.28 | - | - | 53.78 | 2.44 | 66.73 | 1.70 |
注記: "Dense"設定の場合、"推論速度"(トークン/秒)はllama.cppで取得、(2)と(3)のステップ時間(us)はスパースGPU演算子なしで測定。他のスパース設定の場合、"推論速度"はPowerInferで取得、スパースGPU演算子を適用。活性化閾値シフトありのProSparse設定とMiniCPMアーキテクチャは現時点でPowerInferに未対応。
引用
以下のBibTeXを使用して引用してください:
@article{song2024prosparse,
title={{ProSparse}: Introducing and Enhancing Intrinsic Activation Sparsity within Large Language Models},
author={Song, Chenyang and Han, Xu and Zhang, Zhengyan and Hu, Shengding and Shi, Xiyu and Li, Kuai and Chen, Chen and Liu, Zhiyuan and Li, Guangli and Yang, Tao and Sun, Maosong},
year={2024},
journal={arXiv preprint arXiv:2402.13516},
url={https://arxiv.org/pdf/2402.13516.pdf}
}
ライセンス
このリポジトリはApache-2.0ライセンスの下でリリースされています。
MiniCPMモデル重みの使用はGeneral Model License (GML)に厳密に従う必要があります。
MiniCPMのモデルと重みは学術研究目的で完全に無料です。
商用利用を目的とする場合は、cpm@modelbest.cnまで連絡して認証書を取得してください。
声明
言語モデルとして、MiniCPMは大量のテキストから学習することでコンテンツを生成します。
しかし、個人的な意見や価値判断を理解・表現する能力はありません。
MiniCPMによって生成されたコンテンツは、モデル開発者の見解や立場を代表するものではありません。
したがって、MiniCPMによって生成されたコンテンツを使用する際には、ユーザー自身が評価・検証する責任を負います。
謝辞
このモデルカードはReluLLaMA-7BとMiniCPM-1Bから修正されました。
このリポジトリの複製: リンク



