🚀 SantaCoder
SantaCoderは、Python、Java、JavaScriptのコード生成に特化したモデルです。The Stack (v1.1) のデータセットを用いて学習され、多様なコード生成タスクに対応しています。
🚀 クイックスタート
SantaCoder Space Demo でモデルを試すことができます。
📚 ドキュメント
目次
- モデル概要
- 使用方法
- 制限事項
- 学習について
- ライセンス
- 引用
モデル概要
SantaCoderモデルは、11億のパラメータを持つ一連のモデルで、The Stack (v1.1) のPython、Java、JavaScriptのサブセット(オプトアウト要求を除外)で学習されています。
メインモデルは Multi Query Attention を使用し、2048トークンのコンテキストウィンドウを持ち、近傍重複排除とコメント対コード比率をフィルタリング基準として、Fill-in-the-Middle objective を用いて学習されています。
また、異なるフィルタパラメータのデータセットや、アーキテクチャと目的のバリエーションで学習されたいくつかのモデルもあります。
モデル |
アーキテクチャ |
目的 |
フィルタリング |
mha |
MHA |
AR + FIM |
Base |
no-fim |
MQA |
AR |
Base |
fim |
MQA |
AR + FIM |
Base |
stars |
MQA |
AR + FIM |
GitHub stars |
fertility |
MQA |
AR + FIM |
Tokenizer fertility |
comments |
MQA |
AR + FIM |
コメント対コード比率 |
dedup-alt |
MQA |
AR + FIM |
強化された近傍重複排除 |
final |
MQA |
AR + FIM |
強化された近傍重複排除とコメント対コード比率 |
final
モデルは最も性能が高く、他のモデルの2倍の期間(2360億トークン)で学習されています。このチェックポイントはデフォルトモデルで、main
ブランチで利用できます。他のすべてのチェックポイントは、それぞれの名前の別のブランチにあります。
使用方法
想定される用途
このモデルはGitHubのコードで学習されています。そのため、命令型のモデルではなく、「平方根を計算する関数を書け」のようなコマンドはうまく機能しません。
ソースコードに現れるようなコマンドを使う必要があります。例えば、コメント(例:# the following function computes the sqrt
)や関数シグネチャとドキュメント文字列を書き、モデルに関数本体を完成させてもらいます。
コミュニティタブで生成結果を共有することも自由です!
使い方
生成
from transformers import AutoModelForCausalLM, AutoTokenizer
checkpoint = "bigcode/santacoder"
device = "cuda"
tokenizer = AutoTokenizer.from_pretrained(checkpoint)
model = AutoModelForCausalLM.from_pretrained(checkpoint, trust_remote_code=True).to(device)
inputs = tokenizer.encode("def print_hello_world():", return_tensors="pt").to(device)
outputs = model.generate(inputs)
print(tokenizer.decode(outputs[0]))
中抜き生成
中抜き生成では、入力と出力のプレフィックス/ミドル/サフィックス部分を識別するために特殊トークンを使用します。
input_text = "<fim-prefix>def print_hello_world():\n <fim-suffix>\n print('Hello world!')<fim-middle>"
inputs = tokenizer.encode(input_text, return_tensors="pt").to(device)
outputs = model.generate(inputs)
print(tokenizer.decode(outputs[0]))
StarCoderモデルのように <fim_prefix>, <fim_suffix>, <fim_middle>
ではなく、<fim-prefix>, <fim-suffix>, <fim-middle>
を使用するようにしてください。
他のチェックポイントの読み込み
各実験のチェックポイントは別のブランチにアップロードされ、中間チェックポイントはブランチ上のコミットとして保存されます。revision
フラグを使用して読み込むことができます。
model = AutoModelForCausalLM.from_pretrained(
"bigcode/santacoder",
revision="no-fim",
trust_remote_code=True
)
帰属とその他の要件
このモデルの事前学習データセットは、許容的なライセンスのみでフィルタリングされています。しかし、モデルはデータセットからソースコードをそのまま生成することがあります。コードのライセンスには帰属やその他の特定の要件が必要な場合があり、それらを尊重する必要があります。私たちは、生成されたコードがどこから来たかを特定し、コードに適切な帰属を適用するために、事前学習データを検索できる 検索インデックス を提供しています。
制限事項
このモデルはPython、Java、JavaScriptのソースコードで学習されています。ソースの主な言語は英語ですが、他の言語も含まれています。そのため、モデルはある程度のコンテキストを与えることでコードスニペットを生成することができますが、生成されたコードが意図通りに動作することは保証されません。非効率的であったり、バグや脆弱性を含んでいる可能性があります。
学習について
モデル
- アーキテクチャ: マルチクエリアテンションとFill-in-the-Middle目的を持つGPT - 2モデル
- 事前学習ステップ: 60万
- 事前学習トークン: 2360億
- 精度: float16
ハードウェア
- GPU: 96台のTesla V100
- 学習時間: 6.2日
- 総FLOPS: 2.1 x 10e21
ソフトウェア
ライセンス
このモデルはBigCode OpenRAIL - M v1ライセンス契約の下で提供されています。完全な契約は こちら で確認できます。
引用
@article{allal2023santacoder,
title={SantaCoder: don't reach for the stars!},
author={Allal, Loubna Ben and Li, Raymond and Kocetkov, Denis and Mou, Chenghao and Akiki, Christopher and Ferrandis, Carlos Munoz and Muennighoff, Niklas and Mishra, Mayank and Gu, Alex and Dey, Manan and others},
journal={arXiv preprint arXiv:2301.03988},
year={2023}
}