
该存储库包含用于培训,填充,评估和部署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]与我们联系!