モデル概要
モデル特徴
モデル能力
使用事例
🚀 replit-code-v1-3b
replit-code-v1-3b
は、コードの自動補完に特化した27億パラメータの因果言語モデルです。このモデルは、Stack Dedup v1.2データセットの一部を用いて学習されています。
🚀 クイックスタート
開発元: Replit, Inc.
✨ 主な機能
モデルの概要
replit-code-v1-3b
は、コード補完に特化した27億パラメータの因果言語モデルです。このモデルは、Stack Dedup v1.2データセットの一部を用いて学習されています。
学習データには20種類の言語が含まれており、トークン数の多い順に以下の通りです。
Markdown
, Java
, JavaScript
, Python
, TypeScript
, PHP
, SQL
, JSX
, reStructuredText
, Rust
, C
, CSS
, Go
, C++
, HTML
, Vue
, Ruby
, Jupyter Notebook
, R
, Shell
合計で学習データセットには1750億トークンが含まれており、これを3エポックで繰り返し学習しました。つまり、replit-code-v1-3b
は合計で5250億トークン(パラメータあたり約195トークン)で学習されています。
このモデルは、MosaicMLプラットフォーム上で256台のA100-40GB GPUを用いて学習され、最新のLLM examples repoを活用しています。
replit-code-v1-3b
は、以下の最先端のLLM技術を活用しています。
- Flash Attention:高速な学習と推論を実現
- AliBi positional embeddings:推論時に可変のコンテキスト長をサポート
- LionW optimizer など
想定される使用方法
Replitは、このモデルを商用利用に制限なく、アプリケーション固有のファインチューニングの基礎モデルとして誰もが使用できるように意図しています。
制限事項
事前学習データセットには、データクレンジングフィルタを適用した後でも、不快な内容や不適切な内容が含まれている可能性があり、そのような内容がモデルの生成テキストに反映されることがあります。本番システムで使用する際は、適切な注意を払うことをおすすめします。個人やグループに危害や苦痛を与える可能性のあるアプリケーションでは使用しないでください。
📦 インストール
まず、以下の依存関係の最新バージョンをインストールする必要があります。
einops
sentencepiece
torch
transformers
次に、以下のようにモデルをロードできます。
from transformers import AutoModelForCausalLM
# load model
model = AutoModelForCausalLM.from_pretrained('replit/replit-code-v1-3b', trust_remote_code=True)
GPUでBF16精度のFlashAttentionの最適化されたTriton実装を使用するには、まず以下の依存関係をインストールします。
flash-attn==0.2.8
triton==2.0.0.dev20221202
次に、モデルをbfloat16
に移動し、以下のように使用します。
from transformers import AutoModelForCausalLM, AutoConfig
config = AutoConfig.from_pretrained(
"replit/replit-code-v1-3b",
trust_remote_code=True
)
config.attn_config['attn_impl'] = 'triton'
# load model
model = AutoModelForCausalLM.from_pretrained('replit/replit-code-v1-3b', config=config, trust_remote_code=True)
model.to(device='cuda:0', dtype=torch.bfloat16)
# forward pass
x = torch.tensor([[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]])
x = x.to(device='cuda:0')
y = model(x)
trust_remote_code=True
をfrom_pretrained
メソッドに渡すのは、ReplitLMがTransformersライブラリのクラスではないためです。
💻 使用例
基本的な使用法
from transformers import AutoModelForCausalLM
# load model
model = AutoModelForCausalLM.from_pretrained('replit/replit-code-v1-3b', trust_remote_code=True)
高度な使用法
from transformers import AutoModelForCausalLM, AutoConfig
config = AutoConfig.from_pretrained(
"replit/replit-code-v1-3b",
trust_remote_code=True
)
config.attn_config['attn_impl'] = 'triton'
# load model
model = AutoModelForCausalLM.from_pretrained('replit/replit-code-v1-3b', config=config, trust_remote_code=True)
model.to(device='cuda:0', dtype=torch.bfloat16)
# forward pass
x = torch.tensor([[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]])
x = x.to(device='cuda:0')
y = model(x)
トークナイザー
独自のSentencePiece Unigramトークナイザーを、コード用に最適化された32768トークンの語彙で学習しています。
これを使用するには、sentencepiece
ライブラリをインストールする必要があります。
トークナイザーは以下のように使用できます。
from transformers import AutoTokenizer
# load tokenizer
tokenizer = AutoTokenizer.from_pretrained('replit/replit-code-v1-3b', trust_remote_code=True)
# single input encoding + generation
x = tokenizer.encode('def hello():\n print("hello world")\n', return_tensors='pt')
y = model.generate(x)
# decoding, clean_up_tokenization_spaces=False to ensure syntactical correctness
generated_code = tokenizer.decode(y[0], skip_special_tokens=True, clean_up_tokenization_spaces=False)
print(generated_code)
コード生成
transformers
ライブラリを使用して、以下のようにコードを生成できます。
from transformers import AutoModelForCausalLM, AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained('replit/replit-code-v1-3b', trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained('replit/replit-code-v1-3b', trust_remote_code=True)
x = tokenizer.encode('def fibonacci(n): ', return_tensors='pt')
y = model.generate(x, max_length=100, do_sample=True, top_p=0.95, top_k=4, temperature=0.2, num_return_sequences=1, eos_token_id=tokenizer.eos_token_id)
# decoding, clean_up_tokenization_spaces=False to ensure syntactical correctness
generated_code = tokenizer.decode(y[0], skip_special_tokens=True, clean_up_tokenization_spaces=False)
print(generated_code)
8ビットと4ビット量子化でのロード
8ビットでのロード
load_in_8bit=True
キーワード引数を使用して、bitsandbytes
を内部で利用してモデルを8ビットでロードすることもできます。
まず、以下の追加の依存関係をインストールする必要があります。
accelerate
bitsandbytes
次に、以下のようにモデルを8ビットでロードできます。
model = AutoModelForCausalLM.from_pretrained("replit/replit-code-v1-3b",
trust_remote_code=True,
device_map="auto",
load_in_8bit=True)
4ビットでのロード
現時点では、load_in_4bit
のサポートはtransformers
とaccelerate
の最新リリースにマージされていません。ただし、公開されているリポジトリのmain
ブランチから依存関係をインストールすれば使用できます。
pip install git+https://github.com/huggingface/accelerate.git
pip install git+https://github.com/huggingface/transformers.git
次に、以下のように4ビットでロードします。
model = AutoModelForCausalLM.from_pretrained("replit/replit-code-v1-3b",
trust_remote_code=True,
device_map="auto",
load_in_4bit=True)
後処理
すべてのコード生成モデルと同様に、生成されたコードの後処理は重要です。特に、以下の後処理ステップが推奨されます。
- EOSトークンが検出されたら生成を停止する
- 末尾の空白を削除する
- 完了の使用ケースに基づいて
max_tokens
を適切な値に設定する max_tokens
が予想される生成コードの長さよりも大きい場合に不完全なコードが生成されるのを防ぐために、return
,def
, "```", "\n\n\n
"などの停止ワードで生成を切り捨てる
📚 ドキュメント
モデルの評価結果
タスク | データセット | 評価指標 | 値 | 検証済み |
---|---|---|---|---|
コード生成 | HumanEval | pass@1 | 0.219 | 否 |
参照情報
📄 ライセンス
モデルのチェックポイントと語彙ファイルは、クリエイティブ・コモンズライセンス(CC BY - SA 4.0)の下でライセンスされています。このライセンスの下では、Replitにクレジットを与え、ライセンスへのリンクを提供し、変更があった場合はそれを示す必要があります。合理的な方法で行えば、Replitがあなたやあなたの使用を支持していると示唆するような方法で行わない限り、自由に行うことができます。
ソースコードファイル(*.py
)は、Apache 2.0ライセンスの下でライセンスされています。
🔧 技術詳細
学習データ
学習には、Stack Dedup v1.2データセットの一部を使用しています。学習データには、Markdown
, Java
, JavaScript
, Python
, TypeScript
, PHP
, SQL
, JSX
, reStructuredText
, Rust
, C
, CSS
, Go
, C++
, HTML
, Vue
, Ruby
, Jupyter Notebook
, R
, Shell
などの20種類の言語が含まれています。
学習環境
このモデルは、MosaicMLプラットフォーム上で256台のA100 - 40GB GPUを用いて学習されています。
技術的特徴
- Flash Attentionを使用して高速な学習と推論を実現
- AliBi positional embeddingsを用いて、推論時に可変のコンテキスト長をサポート
- LionW optimizerを使用した最適化
📄 ライセンス
モデルのチェックポイントと語彙ファイルは、クリエイティブ・コモンズライセンス(CC BY - SA 4.0)の下でライセンスされています。ソースコードファイル(*.py
)は、Apache 2.0ライセンスの下でライセンスされています。
連絡先
モデルに関する質問やコメントは、コミュニティセクションに投稿してください。



