🚀 MPT-30B-Chat
MPT-30B-Chat 是一個類似聊天機器人的對話生成模型。它通過在 ShareGPT-Vicuna、Camel-AI、GPTeacher、Guanaco、Baize 以及一些生成數據集上對 MPT-30B 進行微調而構建。該模型遵循 CC-By-NC-SA-4.0 許可協議(僅用於非商業用途)。
🚀 快速開始
此模型最適合與 MosaicML 的 llm-foundry 倉庫 配合使用,用於訓練和微調。
import transformers
model = transformers.AutoModelForCausalLM.from_pretrained(
'mosaicml/mpt-30b-chat',
trust_remote_code=True
)
注意:此模型需要在 from_pretrained
方法中傳入 trust_remote_code=True
。這是因為我們使用了自定義的 MPT
模型架構,該架構尚未包含在 Hugging Face 的 transformers
包中。MPT
包含許多訓練效率特性的選項,如 FlashAttention、ALiBi、QK LayerNorm 等。
若要使用 triton 實現 的優化版 FlashAttention,可以在 GPU (cuda:0
) 上以 bfloat16
精度加載模型:
import torch
import transformers
name = 'mosaicml/mpt-30b-chat'
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
)
該模型最初以 2048 的序列長度進行訓練,並進行了額外的預訓練階段以適應長達 8192 的序列長度。不過,ALiBi 允許用戶在微調或推理期間進一步增加最大序列長度。例如:
import transformers
name = 'mosaicml/mpt-30b-chat'
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
)
此模型使用基於 EleutherAI/gpt-neox-20b 分詞器的 MPT-30B 分詞器,幷包含額外的填充和結束標記。
from transformers import AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained('mosaicml/mpt-30b')
然後可以在文本生成管道中使用該模型。注意:在以較低精度運行 Torch 模塊時,最好使用 torch.autocast 上下文管理器。
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))
✨ 主要特性
- 對話生成能力:能夠生成自然流暢的對話內容。
- 多數據集微調:在多個公開數據集上進行微調,提升模型的泛化能力。
- 訓練效率特性:採用瞭如 FlashAttention、ALiBi 等訓練效率特性。
📚 詳細文檔
示例對話
ksreenivasan:
我希望你根據這篇文章的摘要創作一條推文:
我們很高興通過 MPT-30B 擴展 MosaicML 基礎模型系列,這是一個新的商業許可開源模型,功能更強大,性能優於原始的 GPT-3。此外,我們還發布了兩個基於 MPT-30B 構建的微調模型,MPT-30B-Instruct 和 MPT-30B-Chat,分別在短格式指令遵循和多輪對話方面表現出色。所有 MPT-30B 模型都具有使其與其他大語言模型區分開來的特殊功能,包括 8k 標記上下文窗口(可通過微調進一步擴展;參見 MPT-7B-StoryWriter)、通過 ALiBi 支持上下文長度外推,以及通過 FlashAttention 實現高效推理和訓練性能。由於其預訓練數據混合,它還具有強大的編碼能力。
MPT-30B-Chat:
"藉助 MosaicML 的最新產品 MPT-30B 革新你的人工智能能力!該模型性能優於 GPT-3,功能更強大,並且配有微調模型,可實現出色的指令遵循和多輪對話。釋放 8k 標記上下文窗口、ALiBi 支持和 FlashAttention 的潛力。與 MosaicML 一同體驗人工智能的未來!#AI #ML #創新"
ksreenivasan:
對於這個令人興奮的消息,你想對 MosaicML 說些什麼嗎?
MPT-30B-Chat:
作為你的人工智能營銷助手,我想說這對人工智能社區來說真是個令人興奮的消息!MosaicML 的最新產品 MPT-30B 憑藉其強大的開源能力和用於指令遵循及多輪對話的微調模型,有望革新該行業。包括 8k 標記上下文窗口、ALiBi 支持和 FlashAttention 在內的特殊功能,肯定會使 MosaicML 的 MPT-30B 與其他大語言模型區分開來。祝賀 MosaicML 團隊取得這一了不起的成就!
🔧 技術細節
模型架構
該架構是標準的僅解碼器變壓器的修改版本。該模型在以下方面對標準變壓器進行了修改:
超參數 |
值 |
參數數量 |
299.5 億 |
層數 |
48 |
頭數 |
64 |
模型維度 |
7168 |
詞彙表大小 |
50432 |
序列長度 |
8192 |
數據混合
該模型在以下數據混合上進行訓練:
數據源 |
源中的標記數量 |
比例 |
Airoboros/GPT4-1.2 |
2640 萬 |
1.71% |
Baize |
5500 萬 |
3.57% |
Camel |
3.01 億 |
19.54% |
GPTeacher |
756 萬 |
0.49% |
Guanaco |
1560 萬 |
1.02% |
LongCoversations |
1840 萬 |
1.19% |
ShareGPT |
8.21 億 |
53.24% |
WizardLM |
2.97 億 |
19.23% |
“LongConversations” 是一個由 GPT3.5/4 生成的數據集,具體細節將在稍後公佈。
訓練配置
該模型在 64 個 H100 GPU 上使用 MosaicML 平臺 訓練了約 7.6 小時。該模型使用 FSDP 進行分片數據並行訓練,並使用 AdamW 優化器。
📄 許可證
本模型採用 CC-By-NC-SA-4.0 許可協議(僅用於非商業用途)。
⚠️ 侷限性和偏差
以下內容改編自 EleutherAI 的 GPT-NeoX-20B
MPT-30B-Chat 可能會產生事實錯誤的輸出,因此不應依賴它來提供事實準確的信息。MPT-30B-Chat 在各種公開數據集上進行訓練。儘管在清理預訓練數據方面已付出巨大努力,但該模型仍有可能生成低俗、有偏見或其他冒犯性的輸出。
🙏 致謝
該模型由 Sam Havens 和 MosaicML NLP 團隊進行微調。
⚠️ 免責聲明
本模型的許可證不構成法律建議。我們不對使用此模型的第三方的行為負責。在將此模型用於商業目的之前,請諮詢律師。
🎉 MosaicML 平臺
如果您有興趣在 MosaicML 平臺上 訓練 和 部署 自己的 MPT 或大語言模型,請 在此註冊。
📖 引用
請使用以下格式引用此模型:
@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}
}