模型概述
模型特點
模型能力
使用案例
🚀 MPT-30B
MPT-30B是一個從無到有在1萬億個英文文本和代碼標記上預訓練的解碼器式變換器模型。該模型由 MosaicML 訓練。
MPT-30B是Mosaic預訓練變換器(MPT)模型家族的一部分,該家族使用經過修改的變換器架構,針對高效訓練和推理進行了優化。
🚀 快速開始
MPT-30B模型最好結合MosaicML的 llm-foundry倉庫 進行訓練和微調。以下是使用該模型的一些示例代碼:
基礎用法
import transformers
model = transformers.AutoModelForCausalLM.from_pretrained(
'mosaicml/mpt-30b',
trust_remote_code=True
)
⚠️ 重要提示
此模型要求在調用
from_pretrained
方法時傳入trust_remote_code=True
。這是因為我們使用了自定義的MPT
模型架構,該架構目前還不是Hugging Facetransformers
包的一部分。MPT
包含許多訓練效率特性選項,如 FlashAttention、ALiBi、QK LayerNorm 等。
高級用法
若要使用FlashAttention的優化 triton實現,可以按以下方式在GPU(cuda:0
)上以 bfloat16
精度加載模型:
import torch
import transformers
name = 'mosaicml/mpt-30b'
config = transformers.AutoConfig.from_pretrained(name, trust_remote_code=True)
config.attn_config['attn_impl'] = 'triton' # change this to use triton-based FlashAttention
config.init_device = 'cuda:0' # For fast initialization directly on GPU!
model = transformers.AutoModelForCausalLM.from_pretrained(
name,
config=config,
torch_dtype=torch.bfloat16, # Load model weights in bfloat16
trust_remote_code=True
)
該模型最初在序列長度為2048的情況下進行訓練,並進行了額外的預訓練階段以適應長達8192的序列長度。不過,ALiBi允許用戶在微調或推理期間進一步增加最大序列長度,示例如下:
import transformers
name = 'mosaicml/mpt-30b'
config = transformers.AutoConfig.from_pretrained(name, trust_remote_code=True)
config.max_seq_len = 16384 # (input + output) tokens can now be up to 16384
model = transformers.AutoModelForCausalLM.from_pretrained(
name,
config=config,
trust_remote_code=True
)
此模型使用的MPT-30B分詞器與 EleutherAI/gpt-neox-20b 分詞器相同:
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))
# or using the HF 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-30B具有一些使其區別於其他大語言模型的特殊特性,包括:
- 8k標記上下文窗口:通過微調還可以進一步擴展(參見 MPT-7B-StoryWriter)。
- 支持上下文長度外推:通過 ALiBi 實現。
- 高效推理和訓練:藉助FlashAttention實現。
- 強大的編碼能力:得益於其預訓練數據的混合。
- 易於部署:MPT-30B的規模經過特別選擇,便於在單個GPU上部署,既可以是1個16位精度的A100 - 80GB GPU,也可以是1個8位精度的A100 - 40GB GPU。
📦 安裝指南
文檔未提及具體安裝步驟,可參考MosaicML的 llm-foundry倉庫 進行安裝和配置。
📚 詳細文檔
- 博客文章:MPT-30B:提升開源基礎模型的標準
- 代碼庫(mosaicml/llm-foundry倉庫)
- 如有疑問,請通過 MosaicML社區Slack 聯繫我們!
🔧 技術細節
模型架構
該架構是對標準僅解碼器式變換器的修改。模型在以下方面對標準變換器進行了修改:
- 使用FlashAttention:參考 FlashAttention。
- 使用ALiBi:採用 ALiBi(帶線性偏差的注意力機制),不使用位置嵌入。
- 不使用偏置。
屬性 | 詳情 |
---|---|
模型參數數量 | 299.5億 |
層數 | 48 |
頭數 | 64 |
模型維度 | 7168 |
詞彙表大小 | 50432 |
序列長度 | 8192 |
訓練數據
流式數據集
數據使用MosaicML的 StreamingDataset 庫進行格式化,以便將數據存儲在對象存儲中,並在訓練期間將其高效地流式傳輸到計算集群。StreamingDataset無需在訓練開始前下載整個數據集,並且允許從數據集中的任何點立即恢復訓練。
數據混合
該模型在以下數據混合上進行了1萬億個標記的訓練:
數據源 | 數據源中的標記數量 | 比例 | 有效標記數量 | 輪數 |
---|---|---|---|---|
mC4 3.1.0 - 英文(200個以上單詞) | 24179.9億 | 33.50% | 3350億 | 0.14 |
c4 - 英文 - 語義去重80% | 1004.2億 | 29.90% | 2990億 | 2.98 |
RedPajama - 通用爬蟲數據 | 8784.5億 | 8.50% | 850億 | 0.097 |
The Stack - 選定語言 | 4637.8億 | 10.00% | 1000億 | 0.22 |
RedPajama - 維基百科 | 48.7億 | 4.00% | 400億 | 8.21 |
The Stack - Markdown | 1070.7億 | 4.50% | 450億 | 0.42 |
語義學者ORC | 489.5億 | 3.30% | 330億 | 0.67 |
RedPajama - 書籍 | 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 |
每個批次的樣本從上述數據集中以指定的概率進行選擇。每個數據集中的示例會進行打亂,並且每個示例由該數據集中足夠多的序列構成,以填滿序列長度。為了高效地為MPT-30B構建8k支持,我們首先使用長度為2k標記的序列進行了1萬億個標記的預訓練,然後使用長度為8k標記的序列進行了額外500億個標記的訓練。
數據使用 EleutherAI/gpt-neox-20b 分詞器進行分詞。這個BPE分詞器具有許多理想的特性,其中大部分與代碼分詞相關:
- 它在包含代碼的多樣化數據混合(The Pile)上進行訓練。
- 它應用一致的空格分隔,不像GPT2分詞器那樣根據前綴空格的存在情況進行不一致的分詞。
- 它包含重複空格字符的標記,這允許對包含大量重複空格字符的文本進行更好的壓縮。
模型詞彙表大小設置為50432,是128的倍數(如 MEGATRON-LM 中所述)。
訓練配置
該模型在 MosaicML平臺 上分三個階段進行訓練:
- 首先在440個A100 - 40GB GPU上以1760的批次大小進行訓練。
- 然後在216個A100 - 40GB GPU上以1728的批次大小進行訓練。
- 最後在256個H100 - 80GB GPU上以512的批次大小完成訓練,上下文長度為8k,訓練標記數為500億。
模型使用 FSDP 進行分片數據並行訓練,並使用 LION 優化器。
📄 許可證
本模型採用Apache - 2.0許可證。
基於MPT - 30B微調的模型
- MPT - 30B - Instruct:用於長格式指令跟隨(特別是摘要和問答)的模型。通過在多個精心策劃的數據集上對MPT - 30B進行微調構建。許可證:CC - BY - SA - 3.0。
- MPT - 30B - Chat:用於對話生成的類似聊天機器人的模型。通過在 ShareGPT - Vicuna、Camel - AI、GPTeacher、Guanaco、Baize 和一些生成的數據集上對MPT - 30B進行微調構建。許可證:CC - By - NC - SA - 4.0。Hugging Face Spaces上的演示。
模型日期
2023年6月22日
侷限性和偏差
MPT - 30B(基礎模型)不適合在未進行微調的情況下部署。在沒有進一步的防護措施和用戶同意的情況下,不應將其用於面向人類的交互。
MPT - 30B可能會產生事實錯誤的輸出,因此不應依賴它來提供事實準確的信息。MPT - 30B在各種公共數據集上進行訓練。儘管在清理預訓練數據方面付出了巨大努力,但該模型仍有可能生成淫穢、有偏見或其他冒犯性的輸出。
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}
}



