🚀 Refact-1.6B
このモデルは、ブログ記事 でトレーニングを開始したもので、ついに完成しました🎉
生成データでの微調整後、Replit 3b、Stability Code 3b や他の多くのモデルを上回っています。サイズが 10 倍もある StarCoder にもほぼ勝る性能を発揮します!
🚀 クイックスタート
このモデルは、多くのプログラミング言語でのコード補完(インフィル)に最適です。また、チャットとしても機能します。すぐに使い始めるには、Refact プラグイン をダウンロードしてください。また、オープンソースの Docker コンテナ を使用して、モデルを独自にホストすることもできます。
✨ 主な機能
- 多言語対応:MultiPL-HumanEval やその他の指標で示されるように、多くのプログラミング言語に対応しています。
- チャット機能:チャット形式でも動作し、コードに関する質問に回答することができます。
- 高性能:生成データでの微調整後、多くのモデルを上回る性能を発揮します。
📦 インストール
このモデルを使用するには、以下のコマンドで transformers
ライブラリをインストールします。
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="You are a programming assistant",
query="How do I sort a list in Python?")
📚 ドキュメント
モデルの比較
モデル |
サイズ |
HumanEval pass@1 |
HumanEval pass@10 |
DeciCoder-1b |
1b |
19.1% |
|
Refact-1.6-fim |
1.6b |
32.0% |
53.0% |
StableCode |
3b |
20.2% |
33.8% |
ReplitCode v1 |
3b |
21.9% |
|
CodeGen2.5-multi |
7b |
28.4% |
47.5% |
CodeLlama |
7b |
33.5% |
59.6% |
StarCoder |
15b |
33.6% |
|
チャット形式での HumanEval 結果
モデル |
サイズ |
pass@1 |
pass@10 |
Refact-1.6-fim |
1.6b |
38.4% |
55.6% |
StableCode-instruct |
3b |
26.9% |
36.2% |
OctoGeeX |
6b |
44.7% |
|
CodeLlama-instruct |
7b |
34.8% |
64.3% |
CodeGen2.5-instruct |
7b |
36.2% |
60.87 |
CodeLlama-instruct |
13b |
42.7% |
71.6% |
StarChat-β |
15b |
33.5% |
|
OctoCoder |
15b |
46.2% |
|
🔧 技術詳細
アーキテクチャ
また、LiON、フラッシュアテンション、早期ドロップアウトも使用しています。
事前学習
ベースモデルには、許容ライセンスのコードのみを含む独自のデータセットと、オープンなテキストデータセットを使用しました。このモデルの成功の鍵はフィルタリングです。
- 英語のテキストのみを使用
- コンピュータサイエンスに関連するトピックのみ
- 重複排除を行った
テキストとコードの比率は 50:50 で、モデルは 1.2T トークンでトレーニングされました。
微調整
チャットデータがベースモデルの FIM と通常の左から右へのコード補完性能を向上させるという仮説を検証しました。品質をフィルタリングしたオープンな コード 命令追従 データセットのわずか 15% で、ほとんどの指標が向上することがわかりました。
また、FIM を改善するために、一般的な失敗モードを観察し、The Stack dedup v1.1 に基づいて合成データセットを作成しました。
インターネット上の典型的なコードと、IDE で書くコードの間には分布のズレがあります。前者は完成している可能性が高いため、モデルはコードを完成させる提案を試みます。一方、作業中のコードは半分しか書かれていない可能性があり、完全に修復するための単一の追加はありません。
実際には、モデルは数行追加した後に停止する傾向があり、時には何も書かないことが必要です。空の補完、単一行の補完、小さいインデントまたは少なくとも改行で終わる複数行の補完を与えるだけで、モデルの使い勝手が大幅に向上することがわかりました。このデータは、微調整データセットの残りの 85% として使用されました。
最終的なモデルは、コード補完に最適な性能を発揮し、幅広い指標で良好な結果を得るために、いくつかの試行錯誤の結果です。最良の試行では 40B トークンを使用しました。
モデルの統計情報
属性 |
詳情 |
モデルタイプ |
LLAMA ライクなモデル(Multi-Query Attention を使用) |
目的 |
Fill-in-the-Middle、チャット |
トークンコンテキスト |
4096 |
事前学習トークン |
1.2T |
微調整トークン |
40B |
精度 |
bfloat16 |
GPU |
64 台の NVidia A5000 |
トレーニング時間 |
28 日 |
📄 ライセンス
このモデルは、BigScience OpenRAIL-M v1 ライセンス契約の下で提供されています。
📖 引用
このモデルを使用する場合は、このページへのリンクを記載してください。