🚀 replit-code-v1-3b
replit-code-v1-3b
は、コード補完に特化した27億パラメータの因果言語モデルです。このモデルは、Stack Dedup v1.2データセットのサブセットで学習されています。
🚀 クイックスタート
開発元: Replit, Inc.
🧑💻 デモスペースで試してみましょう! 🧑💻
✨ 主な機能
モデル概要
replit-code-v1-3b
は、コード補完に特化した2.7Bの因果言語モデルです。このモデルは、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位置埋め込みによる推論時の可変コンテキスト長のサポート、
LionWオプティマイザなど。
想定用途
Replitは、このモデルを商用利用に制限のないアプリケーション固有の微調整のための基礎モデルとして、誰でも利用できるようにすることを意図しています。
制限事項
事前学習データセットには、データクレンジングフィルタを適用した後でも、不快な内容や不適切な内容が含まれている可能性があり、そのような内容がモデルが生成するテキストに反映されることがあります。本番システムで使用する場合は、適切な注意を払うことをお勧めします。個人やグループに危害や苦痛を与える可能性のあるアプリケーションでは使用しないでください。
ライセンス
モデルのチェックポイントと語彙ファイルは、Creative Commonsライセンス(CC BY - SA 4.0)の下で提供されています。このライセンスの下では、Replitにクレジットを与え、ライセンスへのリンクを提供し、変更があった場合はそれを明示する必要があります。合理的な方法で行うことができますが、Replitがあなたやあなたの使用を支持しているという印象を与えないようにしてください。
お問い合わせ
モデルに関する質問やコメントは、コミュニティセクションに投稿してください。
📦 インストール
まず、以下の依存関係の最新バージョンをインストールする必要があります。
einops
sentencepiece
torch
transformers
GPUでBF16精度のFlashAttentionの最適化されたTriton実装を使用するには、まず以下の依存関係をインストールします。
flash - attn==0.2.8
triton==2.0.0.dev20221202
💻 使用例
基本的な使用法
from transformers import AutoModelForCausalLM
model = AutoModelForCausalLM.from_pretrained('replit/replit-code-v1-3b', trust_remote_code=True)
高度な使用法
from transformers import AutoModelForCausalLM
import torch
model = AutoModelForCausalLM.from_pretrained('replit/replit-code-v1-3b', trust_remote_code=True, attn_impl='triton')
model.to(device='cuda:0', dtype=torch.bfloat16)
x = torch.tensor([[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]])
x = x.to(device='cuda:0')
y = model(x)
トークナイザ
from transformers import AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained('replit/replit-code-v1-3b', trust_remote_code=True)
x = tokenizer.encode('def hello():\n print("hello world")\n', return_tensors='pt')
y = model.generate(x)
generated_code = tokenizer.decode(y[0], skip_special_tokens=True, clean_up_tokenization_spaces=False)
print(generated_code)
コード生成
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)
generated_code = tokenizer.decode(y[0], skip_special_tokens=True, clean_up_tokenization_spaces=False)
print(generated_code)
後処理
すべてのコード生成モデルと同様に、生成されたコードの後処理は重要です。特に、以下の後処理ステップが推奨されます。
- EOSトークンが検出されたら生成を停止する
- 末尾の空白を削除する
- コンプリーションの使用ケースに基づいて
max_tokens
を適切な値に設定する
max_tokens
が予想される生成コードの長さよりも大きい場合に不完全なコードが生成されるのを避けるために、return
, def
, "```", "\n\n\n
"などの停止ワードで生成を切り捨てる
🔧 技術詳細
プロパティ |
詳細 |
モデルタイプ |
因果言語モデル |
学習データ |
Stack Dedup v1.2データセットのサブセット |
モデルハッシュ
5bc28ce32c6f9aec935ead7b60ea1c46