🚀 MPT-30B
MPT-30Bは、1兆トークンの英語テキストとコードを使用してゼロから事前学習されたデコーダー型のトランスフォーマーモデルです。
このモデルはMosaicMLによって学習されました。
MPT-30Bは、Mosaic Pretrained Transformer (MPT) モデルファミリーの一部で、効率的な学習と推論のために最適化された改良型トランスフォーマーアーキテクチャを使用しています。
MPT-30Bには、他の大規模言語モデル (LLM) とは異なる特別な機能が備わっています。これには、8kトークンのコンテキストウィンドウ(微調整によりさらに拡張可能;MPT-7B-StoryWriterを参照)、ALiBiによるコンテキスト長の外挿のサポート、およびFlashAttentionによる効率的な推論と学習が含まれます。また、事前学習のデータミックスにより、強力なコーディング能力も備えています。MPTモデルは、標準的なHuggingFaceパイプラインとNVIDIAのFasterTransformerの両方で効率的に提供できます。
MPT-30Bのサイズは、単一のGPU(16ビット精度で1xA100-80GBまたは8ビット精度で1xA100-40GB)で簡単にデプロイできるように特別に選ばれています。
このモデルは、llm-foundryリポジトリにあるMosaicMLのLLMコードベースを使用しています。このモデルは、MosaicMLのNLPチームによって、LLMの事前学習、微調整、および推論用のMosaicMLプラットフォーム上で学習されました。
🚀 クイックスタート
このモデルの特徴
MPT-30Bは以下のような特徴を持ちます。
MPT-30Bをベースに微調整されたモデル
📚 ドキュメント
💻 使用例
基本的な使用法
import transformers
model = transformers.AutoModelForCausalLM.from_pretrained(
'mosaicml/mpt-30b',
trust_remote_code=True
)
注: このモデルは、from_pretrained
メソッドにtrust_remote_code=True
を渡す必要があります。これは、まだHugging Faceのtransformers
パッケージに含まれていないカスタムのMPT
モデルアーキテクチャを使用しているためです。
MPT
には、FlashAttention、ALiBi、QK LayerNormなど、多くの学習効率機能のオプションが含まれています。
高度な使用法
FlashAttentionの最適化されたtriton実装を使用する場合
import torch
import transformers
name = 'mosaicml/mpt-30b'
config = transformers.AutoConfig.from_pretrained(name, trust_remote_code=True)
config.attn_config['attn_impl'] = 'triton'
config.init_device = 'cuda:0'
model = transformers.AutoModelForCausalLM.from_pretrained(
name,
config=config,
torch_dtype=torch.bfloat16,
trust_remote_code=True
)
最大シーケンス長を増やす場合
import transformers
name = 'mosaicml/mpt-30b'
config = transformers.AutoConfig.from_pretrained(name, trust_remote_code=True)
config.max_seq_len = 16384
model = transformers.AutoModelForCausalLM.from_pretrained(
name,
config=config,
trust_remote_code=True
)
トークナイザーの使用
from transformers import AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained('mosaicml/mpt-30b')
テキスト生成パイプラインでの使用
from transformers import pipeline
with torch.autocast('cuda', dtype=torch.bfloat16):
inputs = tokenizer('Here is a recipe for vegan banana bread:\n', return_tensors="pt").to('cuda')
outputs = model.generate(**inputs, max_new_tokens=100)
print(tokenizer.batch_decode(outputs, skip_special_tokens=True))
pipe = pipeline('text-generation', model=model, tokenizer=tokenizer, device='cuda:0')
with torch.autocast('cuda', dtype=torch.bfloat16):
print(
pipe('Here is a recipe for vegan banana bread:\n',
max_new_tokens=100,
do_sample=True,
use_cache=True))
🔧 技術詳細
モデルのアーキテクチャ
このモデルのアーキテクチャは、標準的なデコーダー専用トランスフォーマーを改良したものです。
以下の点で標準的なトランスフォーマーと異なっています。
属性 |
詳情 |
パラメータ数 |
299.5億 |
レイヤー数 |
48 |
ヘッド数 |
64 |
モデル次元数 |
7168 |
語彙サイズ |
50432 |
シーケンス長 |
8192 |
学習データ
ストリーミングデータセット
データは、MosaicMLのStreamingDatasetライブラリを使用してフォーマットされ、オブジェクトストレージにデータを保存し、学習中にコンピュートクラスタに効率的にストリーミングします。
StreamingDatasetにより、学習を開始する前にデータセット全体をダウンロードする必要がなくなり、データセットの任意のポイントから学習を即座に再開できます。
データミックス
このモデルは、以下のデータミックスで1兆トークン分学習されています。
データソース |
ソース内のトークン数 |
割合 |
有効なトークン数 |
エポック数 |
mC4 3.1.0 - 英語 (200単語以上) |
24179.9億 |
33.50% |
3350億 |
0.14 |
c4 - 英語 - SemDedup 80% |
1004.2億 |
29.90% |
2990億 |
2.98 |
RedPajama - CommonCrawl |
8784.5億 |
8.50% |
850億 |
0.097 |
The Stack - 選択された言語 |
4637.8億 |
10.00% |
1000億 |
0.22 |
RedPajama - Wikipedia |
48.7億 |
4.00% |
400億 |
8.21 |
The Stack - Markdown |
1070.7億 |
4.50% |
450億 |
0.42 |
Semantic Scholar ORC |
489.5億 |
3.30% |
330億 |
0.67 |
RedPajama - Books |
260.2億 |
3.00% |
300億 |
1.15 |
RedPajama - arXiv |
281.0億 |
1.90% |
190億 |
0.68 |
RedPajama - StackExchange |
205.4億 |
1.40% |
140億 |
0.68 |
各バッチのサンプルは、上記の確率でデータセットの1つから選択されます。各データセット内でサンプルはシャッフルされ、各サンプルはシーケンス長を埋めるのに必要なだけのシーケンスから構築されます。MPT-30Bに8kのサポートを効率的に組み込むために、まず2kトークンのシーケンスを使用して1兆トークン分事前学習し、その後8kトークンのシーケンスを使用して500億トークン分学習しました。
データは、EleutherAI/gpt-neox-20bのトークナイザーを使用してトークン化されました。このBPEトークナイザーには、多くの望ましい特性があり、その多くはコードのトークン化に関連しています。
(1) コードを含む多様なデータミックス(The Pile)で学習されている
(2) GPT2トークナイザーとは異なり、接頭辞の空白の有無に関係なく一貫した空白区切りを適用する
(3) 繰り返しの空白文字のトークンを含んでおり、大量の繰り返し空白文字を含むテキストの圧縮に優れている
モデルの語彙サイズ50432は、MEGATRON-LMのように128の倍数に設定されています。
学習設定
このモデルは、MosaicMLプラットフォームを使用して3段階で学習されました。
(i) まず、440台のA100-40GBでバッチサイズ1760で学習
(ii) 次に、216台のA100-40GBでバッチサイズ1728で学習
(iii) 最後に、256台のH100-80GBでバッチサイズ512、8kのコンテキスト長で500億トークン分学習
このモデルは、FSDPを使用したシャード化されたデータ並列で学習され、LIONオプティマイザーを使用しています。
📄 ライセンス
モデルのライセンス
Apache-2.0
制限事項とバイアス
以下の記述は、EleutherAIのGPT-NeoX-20Bから改変されたものです。
MPT-30B (Base) は、微調整なしでのデプロイを想定していません。
さらなるガードレールとユーザーの同意なしに、人間との対話に使用してはなりません。
MPT-30Bは事実誤りのある出力を生成する可能性があり、事実的に正確な情報を生成することに依存してはなりません。
MPT-30Bは、様々な公開データセットで学習されています。
事前学習データのクリーニングには多大な努力が払われていますが、このモデルが猥褻、偏見、またはその他の不快な出力を生成する可能性があります。
MosaicMLプラットフォーム
あなた自身のMPTまたはLLMをMosaicMLプラットフォームで学習およびデプロイすることに興味がある場合は、こちらからサインアップしてください。
免責事項
このモデルのライセンスは法的なアドバイスを構成するものではありません。私たちは、このモデルを使用する第三者の行動に責任を負いません。商用目的でこのモデルを使用する前に、弁護士に相談してください。
引用
このモデルを引用する場合は、以下の形式を使用してください。
@online{MosaicML2023Introducing,
author = {MosaicML NLP Team},
title = {Introducing MPT-30B: Raising the bar
for open-source foundation models},
year = {2023},
url = {www.mosaicml.com/blog/mpt-30b},
note = {Accessed: 2023-06-22},
urldate = {2023-06-22}
}