
該存儲庫包含用於培訓,填充,評估和部署LLM的代碼,用於與作曲家和Mosaicml平台進行推斷。該代碼庫設計為易於使用,高效且靈活,可以通過最新技術進行快速實驗。
您會在此存儲庫中找到:
llmfoundry/ - 模型,數據集,回調,實用程序等的源代碼。scripts/ - 運行LLM工作負載的腳本data_prep/ - 將文本數據從原始源轉換為streamdataset格式train/ - 125m -70b參數的火車或芬太納擁抱面和MPT型號train/benchmarking - 個人資料培訓吞吐量和MFUinference/ - 將模型轉換為擁抱面或ONNX格式,並生成響應inference/benchmarking - 概況推理延遲和吞吐量eval/ - 評估學術(或自定義)中文學習任務的LLMmcli/ - 使用MCLI和MOSAICML平台啟動這些工作負載中的任何一個TUTORIAL.mdDBRX是由Databricks Mosaic團隊培訓的最先進的開源LLM。它使用了專家(MOE)體系結構的混合物,並通過優化版本的作曲家,LLM Foundry和Megablock進行了培訓。該模型具有132B總參數和36B活動參數。我們發布了兩個DBRX模型:
| 模型 | 上下文長度 | 下載 |
|---|---|---|
| DBRX基礎 | 32768 | https://huggingface.co/databricks/dbrx-base |
| DBRX指令 | 32768 | https://huggingface.co/databricks/dbrx-instruct |
我們的模型權重和代碼均為研究人員和商業實體許可。 Databricks開源許可證可以在許可證上找到,我們可接受的使用策略可以在此處找到。
有關DBRX模型的更多信息,請參見https://github.com/databricks/dbrx。
鑲嵌預驗證的變壓器(MPT)是具有一些特殊功能的GPT風格的模型 - 閃光注意力以提高效率,不利比利以推出上下文長度外推,並改善了減輕損失尖峰的穩定性。作為Mosaicml基礎系列的一部分,我們開源了幾種MPT車型:
| 模型 | 上下文長度 | 下載 | 商業用途? |
|---|---|---|---|
| MPT-30B | 8192 | https://huggingface.co/mosaicml/mpt-30b | 是的 |
| MPT-30B教學 | 8192 | https://huggingface.co/mosaicml/mpt-30b-instruct | 是的 |
| mpt-30b-chat | 8192 | https://huggingface.co/mosaicml/mpt-30b-chat | 不 |
| MPT-7B-8K | 8192 | https://huggingface.co/mosaicml/mpt-7b-8k | 是的 |
| MPT-7B-8K-CHAT | 8192 | https://huggingface.co/mosaicml/mpt-7b-8k-chat | 不 |
| MPT-7B | 2048 | https://huggingface.co/mosaicml/mpt-7b | 是的 |
| MPT-7B教學 | 2048 | https://huggingface.co/mosaicml/mpt-7b-instruct | 是的 |
| mpt-7b-chat | 2048 | https://huggingface.co/mosaicml/mpt-7b-chat | 不 |
| MPT-7B StoryWriter | 65536 | https://huggingface.co/mosaicml/mpt-7b-storywriter | 是的 |
要在本地嘗試這些模型,請按照scripts/inference/README.md中的說明使用我們的hf_generate.py或hf_chat.py腳本提示HF模型。
社區為MPT投入的所有驚人工作使我們不知所措!在這裡,我們提供了一些指向其中的鏈接:
replit-code-v1-3b是一個針對代碼完成的2.7b因果語言模型。該模型已在堆棧DEDUP v1.2數據集的子集上進行了培訓,該數據集涵蓋了20種語言,例如Java,Python和C ++社區的教程視頻:
缺少什麼?用公關貢獻!
該代碼庫已用NVIDIA A100和H100s的Pytorch 2.4進行了測試。該代碼庫也可以在具有其他設備的系統上使用,例如消費者NVIDIA卡和AMD卡,但我們並未積極測試這些系統。如果您在其他系統上使用LLM Foundry有成功/失敗,請在GitHub問題中告訴我們,我們將更新支持矩陣!
| 裝置 | 火炬版 | CUDA版本 | 地位 |
|---|---|---|---|
| A100-40GB/80GB | 2.5.1 | 12.4 | ✅支持 |
| H100-80GB | 2.5.1 | 12.4 | ✅支持 |
我們強烈建議使用我們的預製碼頭圖像。您可以在這裡找到它們:https://hub.docker.com/orgs/mosaicml/repositories。
將mosaicml/pytorch圖像固定在特定的Pytorch和CUDA版本上,並且穩定且很少更新。
mosaicml/llm-foundry圖像構建在main分支的每個提交時都具有新標籤。您可以選擇一個特定的提交哈希,例如mosaicml/llm-foundry:2.5.1_cu124-9867a7b或使用mosaicml/llm-foundry:2.5.1_cu124-latest的提交。
請注意: mosaicml/llm-foundry圖像沒有預裝的llm-foundry軟件包,而只是依賴項。您仍然需要從PYPI或來自源的pip install llm-foundry 。
| Docker圖像 | 火炬版 | CUDA版本 | LLM Foundry依賴性安裝了? |
|---|---|---|---|
mosaicml/pytorch:2.5.1_cu124-python3.11-ubuntu22.04 | 2.5.1 | 12.4(Infiniband) | 不 |
mosaicml/llm-foundry:2.5.1_cu124-latest | 2.5.1 | 12.4(Infiniband) | 是的 |
mosaicml/llm-foundry:2.5.1_cu124_aws-latest | 2.5.1 | 12.4(EFA) | 是的 |
假設您已經安裝了Pytorch,Cmake和包裝。如果不是,則可以使用pip install cmake packaging torch安裝它們。
首先,請克隆回購併設置您的環境。這樣做的說明略有不同,具體取決於您是否使用Docker。
我們強烈建議您在Docker容器中與LLM Foundry合作(請參閱上面推薦的Docker圖像)。如果您這樣做,請按照以下步驟克隆回購併安裝要求。
git clone https://github.com/mosaicml/llm-foundry.git
cd llm-foundry
pip install -e " .[gpu] " # or `pip install -e .` if no NVIDIA GPU.如果您選擇不使用Docker,則應創建和使用虛擬環境。
git clone https://github.com/mosaicml/llm-foundry.git
cd llm-foundry
# Creating and activate a virtual environment
python3 -m venv llmfoundry-venv
source llmfoundry-venv/bin/activate
pip install cmake packaging torch # setup.py requires these be installed
pip install -e " .[gpu] " # or `pip install -e .` if no NVIDIA GPU.NVIDIA H100 GPU具有FP8支持;我們已經在Docker圖像中安裝了Flash注意力和變壓器(請參見上文)。如果您不使用我們的Docker映像,則可以使用以下方式安裝這些軟件包
pip install flash-attn --no-build-isolation
pip install git+https://github.com/NVIDIA/TransformerEngine.git@stable有關啟用變壓層和AMP_FP8的更多詳細信息,請參見此處。
在我們對AMD GPU的測試中,ENV設置包括:
git clone https://github.com/mosaicml/llm-foundry.git
cd llm-foundry
# Creating and activate a virtual environment
python3 -m venv llmfoundry-venv-amd
source llmfoundry-venv-amd/bin/activate
# installs
pip install cmake packaging torch
pip install -e . # This installs some things that are not needed but they don't hurt
pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/rocm5.4.2最後,安裝啟用ROCM的閃光注意力(在此處說明)。
筆記:
numpy==1.23.5 )。在Intel Gaudi設備上對LLM Foundry的支持是實驗性的,請使用分支habana_alpha ,並在該分支上查看具有安裝說明和已知問題的分支。
有關Intel Gaudi2加速器上的培訓和推理性能結果,請參見我們的博客:https://www.databricks.com/blog/llm-training-and-inderain-anderperion-infere--inferend-infere-intel-intel-gaudi2-ai-accelerators
注意,請務必在嘗試快速啟動之前仔細閱讀上述安裝步驟!
這是一個用於準備C4數據集的子集的端到端工作流程,訓練MPT-125M模型10批次,將模型轉換為HuggingFace格式,評估Winograd挑戰的模型以及對提示的響應。
(請記住,這是一個快速啟動,只是為了演示工具 - 要獲得質量良好,LLM必須接受10批次超過10批的培訓嗎?)
cd scripts
# Convert C4 dataset to StreamingDataset format
python data_prep/convert_dataset_hf.py
--dataset allenai/c4 --data_subset en
--out_root my-copy-c4 --splits train_small val_small
--concat_tokens 2048 --tokenizer EleutherAI/gpt-neox-20b --eos_text ' <|endoftext|> '
# Train an MPT-125m model for 10 batches
composer train/train.py
train/yamls/pretrain/mpt-125m.yaml
variables.data_local=my-copy-c4
train_loader.dataset.split=train_small
eval_loader.dataset.split=val_small
max_duration=10ba
eval_interval=0
save_folder=mpt-125m
# Convert the model to HuggingFace format
python inference/convert_composer_to_hf.py
--composer_path mpt-125m/ep0-ba10-rank0.pt
--hf_output_path mpt-125m-hf
--output_precision bf16
# --hf_repo_for_upload user-org/repo-name
# Evaluate the model on a subset of tasks
composer eval/eval.py
eval/yamls/hf_eval.yaml
icl_tasks=eval/yamls/copa.yaml
model_name_or_path=mpt-125m-hf
# Generate responses to prompts
python inference/hf_generate.py
--name_or_path mpt-125m-hf
--max_new_tokens 256
--prompts
" The answer to life, the universe, and happiness is "
" Here's a quick recipe for baking chocolate chip cookies: Start by "注意:上面用於訓練模型的composer命令是指作曲家庫的分佈式啟動器。
如果您具有支持寫的HuggingFace Auth代幣,則可以選擇將模型上傳到集線器!像這樣導出您的令牌:
export HF_TOKEN=your-auth-token並輸入包含的行--hf_repo_for_upload ...在上面的call to to to inference/convert_composer_to_hf.py中。
您可以使用註冊表來自定義工作流,而無需撥打庫。 LLM Foundry的某些組件是可註冊的,例如模型,登錄器和回調。這意味著您可以為這些組件註冊新的選項,然後在YAML配置中使用它們。
為了幫助查找和理解可註冊組件,您可以使用llmfoundry registry CLI命令。
我們目前提供兩個命令:
llmfoundry registry get [--group] :列出所有註冊表及其組件,可選地指定特定註冊表。示例用法: llmfoundry registry get --group loggers或llmfoundry registry getllmfoundry registry find <group> <name> :獲取有關特定註冊組件的信息。示例用法: llmfoundry registry find loggers wandb使用--help在這些命令中的任何一個中使用 - 請求更多信息。
這些命令還可以幫助您了解每個註冊表所組成的內容,因為每個註冊表都包含將打印出來的Docstring。一般概念是每個註冊表都定義了一個接口,並且註冊到該註冊表的組件必須實現該接口。如果圖書館的一部分目前無法擴展,但是您認為應該是,請打開一個問題!
有幾種註冊新組件的方法:
如果您使用註冊組件構建自己的軟件包,則可以通過Python入門點指定註冊組件。如果您要向LLM Foundry建造大型擴展,並且將覆蓋許多組件,那麼這將是預期的用法。請注意,通過入口點註冊的內容將覆蓋直接在代碼中註冊的組件。
例如,以下將註冊MyLogger類,在密鑰my_logger下,在llm_foundry.loggers registry中:
[build-system]
requires = ["setuptools>=42", "wheel"]
build-backend = "setuptools.build_meta"
[project]
name = "foundry_registry"
version = "0.1.0"
dependencies = [
" mosaicml " ,
" llm-foundry " ,
]
# Note: Even though in python code, this would be llmfoundry.registry.loggers,
# when specified in the entry_points, it has to be "llmfoundry_loggers". That is,
# the segments of the name should be joined by an _ in the entry_points section.
[project.entry-points."llmfoundry_loggers"]
my_logger = "foundry_registry.loggers:MyLogger"如果通過入口處開發新組件,請務必注意,Python入口點是Python環境的全球。這意味著,如果您有多個用相同鍵登錄組件的軟件包,則將安裝的最後一個是使用的。這對於LLM Foundry中的覆蓋組件可能很有用,但是如果不小心,也可能導致意外行為。此外,如果更改pyproject.toml,則需要重新安裝包裝以進行更改以生效。您可以通過安裝pip install -e . --no-deps - 避免重新安裝依賴性的pip install -e . --no-deps 。
您還可以在代碼中直接註冊組件:
from composer . loggers import LoggerDestination
from llmfoundry . registry import loggers
class MyLogger ( LoggerDestination ):
pass
loggers . register ( "my_logger" , func = MyLogger )您還可以使用裝飾器直接從代碼中註冊組件:
from composer . loggers import LoggerDestination
from llmfoundry . registry import loggers
@ loggers . register ( "my_logger" )
class MyLogger ( LoggerDestination ):
pass對於直接呼叫和裝飾器的方法,如果使用LLM Foundry Train/Eval腳本,則需要提供code_paths參數,這是需要執行的文件列表以註冊組件。例如,您可能有一個名為foundry_imports.py的文件,其中包含以下內容:
from foundry_registry . loggers import MyLogger
from llmfoundry . registry import loggers
loggers . register ( "my_logger" , func = MyLogger )然後,您將在YAML配置中為火車/評估腳本提供code_paths :
...
code_paths :
- foundry_imports.py
...如果您要為LLM Foundry構建一個較小的擴展名,僅覆蓋了一些組件,那麼其中之一就是預期的用法,因此不想創建整個包裝。
請查看tutorial.md,以繼續學習與LLM Foundry合作。該教程突出顯示了示例工作流程,將您指向整個存儲庫中的其他資源,並回答常見問題!
如果您遇到了代碼的任何問題,請直接將GitHub問題直接提交給此存儲庫。
如果您想在Mosaicml平台上訓練LLM,請通過[email protected]與我們聯繫!