🚀 MPT-7B-StoryWriter-65k+
MPT-7B-StoryWriter-65k+ 是一款專為讀寫超長上下文長度的虛構故事而設計的模型。它通過在 books3 數據集 的過濾小說子集上對上下文長度為 65k 個標記的 MPT-7B 進行微調而構建。在推理時,藉助 ALiBi,MPT-7B-StoryWriter-65k+ 甚至可以外推到 65k 標記以上。我們在 博客文章 中展示了在 8 個 A100-80GB GPU 的單節點上生成長達 84k 標記的內容。
該模型由 MosaicML 訓練,採用了經過修改的僅解碼器變壓器架構。
🚀 快速開始
本模型需要在 from_pretrained
方法中傳入 trust_remote_code=True
。這是因為我們使用了一種尚未包含在 transformers
包中的自定義模型架構。
它包含了許多訓練效率特性的選項,例如 FlashAttention (Dao 等人,2022)、ALiBi、QK LayerNorm 等等。
import transformers
model = transformers.AutoModelForCausalLM.from_pretrained(
'mosaicml/mpt-7b-storywriter',
trust_remote_code=True
)
若要使用 FlashAttention 的優化 triton 實現,可以在 GPU (cuda:0
) 上以 bfloat16
精度加載模型:
import torch
import transformers
name = 'mosaicml/mpt-7b-storywriter'
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 的情況下進行訓練,並在序列長度為 65536 的情況下進行微調,但 ALiBi 允許用戶在微調或推理期間增加最大序列長度。例如:
import transformers
name = 'mosaicml/mpt-7b'
config = transformers.AutoConfig.from_pretrained(name, trust_remote_code=True)
config.max_seq_len = 83968
model = transformers.AutoModelForCausalLM.from_pretrained(
name,
config=config,
trust_remote_code=True
)
該模型使用 EleutherAI/gpt-neox-20b 分詞器進行訓練。
from transformers import AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("EleutherAI/gpt-neox-20b")
然後,該模型可以在文本生成管道中使用。
注意:在以較低精度運行 Torch 模塊時,最佳做法是使用 torch.autocast 上下文管理器。
from transformers import pipeline
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))
✨ 主要特性
- 專為讀寫超長上下文長度的虛構故事而設計。
- 藉助 ALiBi 技術,推理時可外推到 65k 標記以上。
- 採用經過修改的僅解碼器變壓器架構。
- 包含多種訓練效率特性,如 FlashAttention、ALiBi、QK LayerNorm 等。
📚 詳細文檔
🔧 技術細節
模型架構
該模型的架構是對標準僅解碼器變壓器的修改。具體修改如下:
超參數
屬性 |
詳情 |
模型類型 |
經過修改的僅解碼器變壓器 |
訓練數據 |
books3 數據集 的過濾小說子集 |
參數量 |
67 億 |
層數 |
32 |
頭數 |
32 |
模型維度 |
4096 |
詞表大小 |
50432 |
序列長度 |
65536 |
訓練配置
該模型在 8 個 A100-80GB GPU 上使用 MosaicML 平臺 訓練了約 2 天。訓練採用了分片數據並行性,使用 FSDP 並使用 LION 優化器。
📄 許可證
本模型採用 Apache 2.0 許可證。
社區創建的資源
以下資源並非由 MosaicML 創建,但您可能會發現它們很有用。這些鏈接並不代表對創建者或其內容的認可。
示例尾聲
將《了不起的蓋茨比》的全文(67873 個標記)輸入模型,隨後輸入文本“EPILOGUE”。
TheRealFitzgerald233:
...
於是我們奮力向前劃,逆流而上的小舟,不停地被浪潮推回,推向過去
尾聲
MPT-7B-StoryWriter:
我在這個夢想的陰影下生活了太久,也許永遠都看不到現實的燦爛陽光了。也許某天早晨我一抬頭,就會發現自己已經入土六英尺,而給了我夢想和一切的蓋茨比,也會在我身後消失不見。
事情就是這樣。我剛跨進舊世界的門檻,目光就落在了一份報紙的頭條上,我立刻就知道我的夢想破滅了。我知道蓋茨比死了。
那天我就知道我不愛她了。
那天晚上我乘最後一班火車去了西卵村,到家後我徑直上了閣樓,把蓋茨比的信都拿了下來。
我按日期把它們整理好,按寫信的順序擺放好。信的數量很少。
這些信的日期從 1918 年 4 月到 1919 年 1 月,我這裡的最後一封信告訴我他死了。
最後一封信裡有某種讓我害怕的東西。那是一種終結感,一種圓滿感。從那以後我再也沒有他的消息,我很高興。
但幾個月前我在某處讀到他在紐約出現過。他成了一個了不起的人。
我知道他一點都沒變。
⚠️ 侷限性和偏差
以下內容改編自 EleutherAI 的 GPT-NeoX-20B
MPT-7B-StoryWriter 可能會產生事實錯誤的輸出,因此不應依賴它來提供事實準確的信息。
MPT-7B-StoryWriter 在各種公共數據集上進行了訓練。
儘管在清理預訓練數據方面已經付出了巨大努力,但該模型仍有可能生成淫穢、有偏見或其他冒犯性的輸出。
🙏 致謝
該模型由 Alex Trott 和 MosaicML NLP 團隊進行微調。
MosaicML 平臺
如果您有興趣在 MosaicML 平臺上 訓練 和 部署 自己的 MPT 或大語言模型,請 在此註冊。
📢 免責聲明
本模型的許可證不構成法律建議。我們不對使用此模型的第三方的行為負責。在將此模型用於商業目的之前,請諮詢律師。
📝 引用
請使用以下格式引用此模型:
@online{MosaicML2023Introducing,
author = {MosaicML NLP Team},
title = {Introducing MPT-7B: A New Standard for Open-Source, Commercially Usable LLMs},
year = {2023},
url = {www.mosaicml.com/blog/mpt-7b},
note = {Accessed: 2023-03-28}, % 更改此日期
urldate = {2023-03-28} % 更改此日期
}