🚀 Refact-1_6B-fim GGUFモデル
このモデルはテキスト生成に特化しており、多くのデータセットを用いて事前学習され、コード生成やチャットなどのタスクで高い性能を発揮します。また、最新の量子化方法を用いることで、超低ビットモデルの精度とメモリ効率を向上させています。
🚀 クイックスタート
このモデルを使用するには、以下の手順に従ってください。
- モデルをダウンロードします。
- 必要なライブラリをインストールします。
- コード例を参考に、モデルを使用します。
✨ 主な機能
- テキスト生成: 様々なテキスト生成タスクに対応しています。
- コード生成: 多言語のコード生成が可能です。
- チャット機能: チャット形式での対話もサポートしています。
- 超低ビット量子化: 最新の量子化方法を用いて、メモリ効率を向上させています。
📦 インストール
必要なライブラリをインストールするには、以下のコマンドを実行します。
pip install -q transformers
💻 使用例
基本的な使用法
中間埋め込み (Fill - in - the - Middle) の使用例です。
from transformers import AutoModelForCausalLM, AutoTokenizer
checkpoint = "smallcloudai/Refact - 1_6B - fim"
device = "cuda"
tokenizer = AutoTokenizer.from_pretrained(checkpoint)
model = AutoModelForCausalLM.from_pretrained(checkpoint, trust_remote_code=True).to(device)
prompt = '<fim_prefix>def print_hello_world():\n """<fim_suffix>\n print("Hello world!")<fim_middle>'
inputs = tokenizer.encode(prompt, return_tensors="pt").to(device)
outputs = model.generate(inputs, max_length=100, temperature=0.2)
print("-" * 80)
print(tokenizer.decode(outputs[0]))
高度な使用法
チャット形式での使用例です。
prompt_template = "<empty_output>SYSTEM {system}\n" \
"<empty_output>USER {query}\n" \
"<empty_output>ASSISTANT"
prompt = prompt_template.format(system="あなたはプログラミングアシスタントです",
query="Pythonでリストを並べ替えるにはどうすればいいですか?")
📚 ドキュメント
モデルの選択
適切なモデル形式を選択するには、以下の表を参考にしてください。
モデル形式 |
精度 |
メモリ使用量 |
デバイス要件 |
最適な使用ケース |
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デバイス用に最適化可能 |
含まれるファイルと詳細
以下のファイルが含まれています。
ファイル名 |
説明 |
Refact-1_6B-fim-bf16.gguf |
モデルの重みがBF16で保存されています。 |
Refact-1_6B-fim-f16.gguf |
モデルの重みがF16で保存されています。 |
Refact-1_6B-fim-bf16-q8_0.gguf |
出力とエンベディングはBF16のままで、他のすべてのレイヤーはQ8_0に量子化されています。 |
Refact-1_6B-fim-f16-q8_0.gguf |
出力とエンベディングはF16のままで、他のすべてのレイヤーはQ8_0に量子化されています。 |
Refact-1_6B-fim-q4_k.gguf |
出力とエンベディングはQ8_0に量子化されています。他のすべてのレイヤーはQ4_Kに量子化されています。 |
Refact-1_6B-fim-q4_k_s.gguf |
最小のQ4_Kバリアントで、精度を犠牲にしてメモリ使用量を削減しています。 |
Refact-1_6B-fim-q6_k.gguf |
出力とエンベディングはQ8_0に量子化されています。他のすべてのレイヤーはQ6_Kに量子化されています。 |
Refact-1_6B-fim-q8_0.gguf |
完全にQ8に量子化されたモデルで、より高い精度を提供します。 |
Refact-1_6B-fim-iq3_xs.gguf |
IQ3_XS量子化で、極限のメモリ効率を実現。 |
Refact-1_6B-fim-iq3_m.gguf |
IQ3_M量子化で、中程度のブロックサイズでより高い精度を実現。 |
Refact-1_6B-fim-q4_0.gguf |
純粋なQ4_0量子化で、ARMデバイス用に最適化。 |
🔧 技術詳細
量子化方法
最新の量子化方法では、超低ビットモデル (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 |
アーキテクチャ
事前学習
ベースモデルには、許容的なライセンスのコードのみを含む独自のデータセットと、オープンなテキストデータセットを使用しました。このモデルの成功の鍵は、フィルタリングです。
- 英語のテキストのみを使用
- コンピュータサイエンスに関連するトピックのみ
- 重度の重複排除を適用
微調整
チャットデータがベースモデルのFIMおよび通常の左から右へのコード補完性能を向上させるという仮説をテストしました。品質をフィルタリングした、公開されているコード 命令追従 データセットのわずか15%で、ほとんどのメトリクスが改善されることがわかりました。
📄 ライセンス
このモデルは、BigScience OpenRAIL - M v1ライセンス契約の下で提供されています。