模型概述
模型特點
模型能力
使用案例
🚀 MPT-7B
MPT-7B 是一個基於解碼器架構的 Transformer 模型,它在 1 萬億個英文文本和代碼的 token 上從頭開始預訓練。該模型由 MosaicML 訓練。
MPT-7B 是 MosaicPretrainedTransformer (MPT) 模型家族的一員,該家族模型採用了經過優化的改良 Transformer 架構,可實現高效的訓練和推理。
這些架構改進包括性能優化的層實現,以及通過使用帶線性偏置的注意力機制(ALiBi)取代位置嵌入來消除上下文長度限制。得益於這些改進,MPT 模型能夠實現高吞吐量的高效訓練和穩定收斂。同時,MPT 模型還可以通過標準的 HuggingFace 管道和 NVIDIA 的 FasterTransformer 進行高效推理。
此模型使用了 MosaicML 的大語言模型代碼庫,該代碼庫可在 llm-foundry 倉庫 中找到。它由 MosaicML 的自然語言處理團隊在 MosaicML 平臺 上進行大語言模型的預訓練、微調及推理。
🚀 快速開始
本模型最適合搭配 MosaicML 的 llm-foundry 倉庫 進行訓練和微調。
import transformers
model = transformers.AutoModelForCausalLM.from_pretrained(
'mosaicml/mpt-7b',
trust_remote_code=True
)
注意:此模型要求在調用 from_pretrained
方法時傳入 trust_remote_code=True
。這是因為我們使用了自定義的 MPT
模型架構,該架構目前尚未被納入 Hugging Face 的 transformers
包中。MPT
包含了許多訓練效率特性的選項,例如 FlashAttention、ALiBi、QK LayerNorm 等。
若要使用 FlashAttention 的優化 triton 實現,可以在 GPU (cuda:0
) 上以 bfloat16
精度加載模型:
import torch
import transformers
name = 'mosaicml/mpt-7b'
config = transformers.AutoConfig.from_pretrained(name, trust_remote_code=True)
config.attn_config['attn_impl'] = 'triton'
config.init_device = 'cuda:0' # 直接在 GPU 上快速初始化!
model = transformers.AutoModelForCausalLM.from_pretrained(
name,
config=config,
torch_dtype=torch.bfloat16, # 以 bfloat16 精度加載模型權重
trust_remote_code=True
)
儘管該模型是在序列長度為 2048 的情況下進行訓練的,但 ALiBi 允許用戶在微調或推理時增加最大序列長度。例如:
import transformers
name = 'mosaicml/mpt-7b'
config = transformers.AutoConfig.from_pretrained(name, trust_remote_code=True)
config.max_seq_len = 4096 # (輸入 + 輸出) token 現在可以達到 4096
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))
✨ 主要特性
與其他模型的區別
MPT-7B 具有以下特點:
- 具備商業使用許可:與 LLaMA 不同,MPT-7B 允許商業使用。
- 在大量數據上進行訓練:與 Pythia 的 3000 億 token、OpenLLaMA 的 3000 億 token 以及 StableLM 的 8000 億 token 相比,MPT-7B 與 LLaMA 一樣在 1 萬億 token 上進行訓練。
- 能夠處理超長輸入:藉助 ALiBi,我們對 MPT-7B-StoryWriter-65k+ 進行了微調,使其能夠處理長達 65k 的輸入,甚至可以處理長達 84k 的輸入,而其他開源模型通常只能處理 2k - 4k 的輸入。
- 支持快速訓練和推理:通過 FlashAttention 和 FasterTransformer 實現。
- 配備高效的開源訓練代碼:可在 llm-foundry 倉庫 中找到。
基於 MPT-7B 微調的模型
以下是基於 MPT-7B 微調的模型:
- MPT-7B-StoryWriter-65k+:這是一個專為讀寫虛構故事而設計的模型,能夠處理超長上下文。它通過在 books3 數據集 的過濾小說子集上對 MPT-7B 進行微調得到,上下文長度為 65k token。在推理時,藉助 ALiBi,MPT-7B-StoryWriter-65k+ 甚至可以處理超過 65k token 的輸入。我們在 博客文章 中展示了在單個 A100-80GB GPU 上生成長達 80k token 的內容。
- 許可證:Apache 2.0
- MPT-7B-Instruct:這是一個用於短格式指令跟隨的模型。它通過在我們發佈的 數據集 上對 MPT-7B 進行微調得到,該數據集源自 Databricks Dolly-15k 和 Anthropic Helpful and Harmless (HH-RLHF) 數據集。
- 許可證:Apache 2.0
- MPT-7B-Chat:這是一個類似聊天機器人的模型,用於對話生成。它通過在 ShareGPT-Vicuna、HC3、Alpaca、HH-RLHF 和 Evol-Instruct 數據集上對 MPT-7B 進行微調得到。
- 許可證:CC-By-NC-SA-4.0
📚 詳細文檔
- 博客文章:Introducing MPT-7B: A New Standard for Open-Source, Commercially Usable LLMs
- 代碼庫 (mosaicml/llm-foundry 倉庫)
- 如有疑問,請通過 MosaicML 社區 Slack 與我們聯繫!
🔧 技術細節
模型描述
該模型架構是對標準的僅解碼器 Transformer 架構的改進。
該模型在以下方面對標準 Transformer 架構進行了修改:
- 使用 FlashAttention
- 使用 ALiBi (Attention with Linear Biases),不使用位置嵌入
- 不使用偏置
屬性 | 詳情 |
---|---|
模型參數數量 | 67 億 |
層數 | 32 |
頭數 | 32 |
模型維度 | 4096 |
詞表大小 | 50432 |
序列長度 | 2048 |
訓練數據
流式數據集
數據使用 MosaicML 的 StreamingDataset 庫進行格式化,以便將數據存儲在對象存儲中,並在訓練期間將其高效地流式傳輸到計算集群。StreamingDataset 無需在訓練開始前下載整個數據集,並且允許從數據集中的任意點立即恢復訓練。
數據混合
該模型在 1 萬億 token 上進行訓練(批量大小為 1760,序列長度為 2048)。它在以下數據混合上進行訓練:
數據源 | 數據源中的 token 數量 | 比例 | 有效 token 數量 | 輪數 |
---|---|---|---|---|
mC4 3.1.0 - 英文 | 4179.9 億 | 0.33 | 3300 億 | 0.14 |
C4 - 英文 - 語義去重 80% | 1004.2 億 | 0.299 | 2990 億 | 2.98 |
RedPajama - CommonCrawl | 8784.5 億 | 0.1 | 1000 億 | 0.11 |
The Stack - 選定語言 | 4637.8 億 | 0.1 | 1000 億 | 0.22 |
RedPajama - 維基百科 - 英文 | 48.7 億 | 0.04 | 400 億 | 8.21 |
The Stack - Markdown | 1070.7 億 | 0.035 | 350 億 | 0.33 |
S2ORC | 488.5 億 | 0.033 | 330 億 | 0.68 |
RedPajama - 書籍 | 260.2 億 | 0.03 | 300 億 | 1.15 |
RedPajama - arXiv | 281 億 | 0.019 | 190 億 | 0.68 |
RedPajama - StackExchange | 205.4 億 | 0.014 | 140 億 | 0.68 |
每個批次的樣本從上述數據集中按照指定的概率進行選擇。每個數據集中的樣本會進行打亂,並且每個樣本由來自該數據集的足夠多的序列組成,以填充 2048 的序列長度。
數據使用 EleutherAI/gpt-neox-20b 分詞器進行分詞。這個 BPE 分詞器具有許多理想的特性,其中大部分與代碼分詞相關:
- 它在包含代碼的多樣化數據集(The Pile)上進行訓練。
- 它應用一致的空格分隔,與 GPT2 分詞器不同,後者根據前綴空格的存在情況進行不一致的分詞。
- 它包含重複空格字符的 token,這允許對包含大量重複空格字符的文本進行更好的壓縮。
模型詞表大小設置為 50432,是 128 的倍數(如 MEGATRON-LM 中所示),模型浮點運算利用率(MFU)提高了多達四個百分點。
訓練配置
該模型在 440 個 A100-40GB GPU 上使用 MosaicML 平臺 進行了約 9.5 天的訓練。模型使用 FSDP 進行分片數據並行訓練,並使用 LION 優化器。
📄 許可證
模型日期
2023 年 5 月 5 日
模型許可證
Apache-2.0
免責聲明
本模型的許可證不構成法律建議。我們不對使用此模型的第三方的行為負責。在將此模型用於商業目的之前,請諮詢律師。
引用
請使用以下格式引用此模型:
@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-05-05},
urldate = {2023-05-05}
}
⚠️ 重要提示
MPT-7B(基礎模型)不適合在未進行微調的情況下直接部署。在沒有進一步的防護措施和用戶同意的情況下,不應將其用於面向人類的交互。
MPT-7B 可能會產生事實錯誤的輸出,因此不應依賴它來生成事實準確的信息。MPT-7B 在各種公共數據集上進行訓練。儘管在清理預訓練數據方面已經付出了巨大努力,但此模型仍有可能生成低俗、有偏見或其他冒犯性的輸出。
💡 使用建議



