OA0
OA0 是一个探索 AI 的社区
现在注册
已注册用户请  登录
OA0  ›  代码  ›  LLM Foundry — 面向大模型训练与微调的工程化工具链

LLM Foundry — 面向大模型训练与微调的工程化工具链

 
  diesel ·  2026-04-25 11:00:24 · 13 次点击  · 0 条评论  

LLM Foundry

PyPi Version PyPi Package Version Chat @ Slack License


LLM Foundry

本仓库包含用于训练、微调、评估和部署 LLM 进行推理的代码,基于 ComposerMosaicML 平台。该代码库设计为易用、高效且灵活,支持快速试验最新技术。

本仓库包含以下内容:
* llmfoundry/ - 模型、数据集、回调函数、工具等的源代码
* scripts/ - 运行 LLM 工作负载的脚本
* data_prep/ - 将原始文本数据转换为 StreamingDataset 格式
* train/ - 训练或微调 125M 至 70B 参数的 HuggingFace 和 MPT 模型
* train/benchmarking - 测量训练吞吐量和 MFU
* inference/ - 将模型转换为 HuggingFace 或 ONNX 格式,并生成回复
* inference/benchmarking - 测量推理延迟和吞吐量
* eval/ - 在学术(或自定义)上下文学习任务上评估 LLM
* mcli/ - 使用 MCLIMosaicML 平台 启动这些工作负载
* TUTORIAL.md - 更深入的仓库指南、示例工作流和常见问题解答

DBRX

DBRX 是由 Databricks Mosaic 团队训练的最先进的开源 LLM。它采用混合专家(MoE)架构,并使用优化版本的 Composer、LLM Foundry 和 MegaBlocks 进行训练。该模型共有 132B 参数,其中 36B 为活跃参数。我们发布了两个 DBRX 模型:

模型 上下文长度 下载地址
DBRX Base 32768 https://huggingface.co/databricks/dbrx-base
DBRX Instruct 32768 https://huggingface.co/databricks/dbrx-instruct

我们的模型权重和代码对研究人员和商业实体均开放许可。Databricks 开源许可可在 LICENSE 中找到,可接受使用政策可在此处查看。

有关 DBRX 模型的更多信息,请参阅 https://github.com/databricks/dbrx。

MPT

Mosaic 预训练 Transformer(MPT)是 GPT 风格的模型,具有一些特殊功能——Flash Attention 提高效率,ALiBi 实现上下文长度外推,以及稳定性改进以减少损失尖峰。作为 MosaicML 基础系列的一部分,我们开源了多个 MPT 模型:

模型 上下文长度 下载地址 是否可商用?
MPT-30B 8192 https://huggingface.co/mosaicml/mpt-30b
MPT-30B-Instruct 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-Instruct 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.pyhf_chat.py 脚本提示 HF 模型。

MPT 社区

社区为 MPT 所做的出色工作让我们深受感动!这里我们提供一些相关链接:
* ReplitLMreplit-code-v1-3b 是一个专注于代码补全的 2.7B 因果语言模型,在涵盖 Java、Python 和 C++ 等 20 种语言的 Stack Dedup v1.2 数据集子集上训练。
* LLaVa-MPT:通过视觉指令微调使 MPT 获得多模态能力。
* ggml:优化的 MPT 版本,可在消费级硬件上进行高效推理。
* GPT4All:本地运行的聊天系统,现已支持 MPT!
* Q8MPT-Chat:由 Intel 朋友提供的用于 CPU 的 8 位优化 MPT。

来自社区的教程视频:
* 使用 Langchain 的 MPT-7B 作者:@jamesbriggs
* MPT-7B StoryWriter 介绍 作者:AItrepreneur
* 在单个 GPU 上微调 MPT-7B 作者:@AIology2022
* 如何在 Google Colab 上微调 MPT-7B-Instruct 作者:@VRSEN

缺少什么?欢迎通过 PR 贡献!

最新动态

硬件和软件要求

该代码库已在 PyTorch 2.4 上使用 NVIDIA A100 和 H100 进行了测试。该代码库也可能适用于其他设备(如消费级 NVIDIA 显卡和 AMD 显卡)的系统,但我们不积极测试这些系统。如果您在其他系统上成功/失败地使用了 LLM Foundry,请通过 Github issue 告知我们,我们将更新支持矩阵!

设备 Torch 版本 Cuda 版本 状态
A100-40GB/80GB 2.7.0 12.8 :white_check_mark: 支持
H100-80GB 2.7.0 12.8 :white_check_mark: 支持

MosaicML Docker 镜像

我们强烈建议使用我们预构建的 Docker 镜像。您可以在此处找到它们:https://hub.docker.com/orgs/mosaicml/repositories。

mosaicml/pytorch 镜像固定到特定的 PyTorch 和 CUDA 版本,稳定且很少更新。

mosaicml/llm-foundry 镜像在每次提交到 main 分支时都会构建新标签。
您可以选择特定的提交哈希,例如 mosaicml/llm-foundry:2.7.0_cu128-9867a7b,或使用最新的 mosaicml/llm-foundry:2.7.0_cu128-latest

请注意: mosaicml/llm-foundry 镜像未预装 llm-foundry 包,仅预装了依赖项。您仍然需要从 PyPi 或源码 pip install llm-foundry

Docker 镜像 Torch 版本 Cuda 版本 是否安装了 LLM Foundry 依赖项?
mosaicml/pytorch:2.7.0_cu128-python3.12-ubuntu22.04 2.7.0 12.8 (Infiniband)
mosaicml/llm-foundry:2.7.0_cu128-latest 2.7.0 12.8 (Infiniband)
mosaicml/llm-foundry:2.7.0_cu128_aws-latest 2.7.0 12.8 (EFA)

安装

假设您已经安装了 PyTorch、CMake 和 packaging。如果没有,可以使用 pip install cmake packaging torch 安装它们。

首先,克隆仓库并设置环境。具体步骤因是否使用 Docker 而异。

使用 Docker(推荐)

我们强烈建议在 Docker 容器内使用 LLM Foundry(请参阅上面推荐的 Docker 镜像)。如果您使用 Docker,请按照以下步骤克隆仓库并安装依赖项。

git clone https://github.com/mosaicml/llm-foundry.git
cd llm-foundry
pip install -e ".[gpu]"  # 如果没有 NVIDIA GPU,则使用 `pip install -e .`

不使用 Docker(不推荐)

如果您选择不使用 Docker,应创建并使用虚拟环境。

git clone https://github.com/mosaicml/llm-foundry.git
cd llm-foundry

# 创建并激活虚拟环境
python3 -m venv llmfoundry-venv
source llmfoundry-venv/bin/activate

pip install cmake packaging torch  # setup.py 需要先安装这些

pip install -e ".[gpu]"  # 如果没有 NVIDIA GPU,则使用 `pip install -e .`

TransformerEngine 和 amp_fp8 支持

NVIDIA H100 GPU 支持 FP8;我们已在上面的 Docker 镜像中安装了 Flash Attention 和 Transformer。如果您没有使用我们的 Docker 镜像,可以使用以下命令安装这些包:

pip install flash-attn --no-build-isolation
pip install git+https://github.com/NVIDIA/TransformerEngine.git@stable

有关启用 TransformerEngine 层和 amp_fp8 的更多详细信息,请参见此处

AMD(BETA 支持)

我们对 AMD GPU 的测试中,环境设置包括:

git clone https://github.com/mosaicml/llm-foundry.git
cd llm-foundry

# 创建并激活虚拟环境
python3 -m venv llmfoundry-venv-amd
source llmfoundry-venv-amd/bin/activate

# 安装
pip install cmake packaging torch
pip install -e .  # 这会安装一些不需要的东西,但不会造成损害
pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/rocm5.4.2

最后,安装支持 ROCm 的 flash attention(说明在此处)。

注意:
1. 我们目前还没有一个所有东西都能完美运行的 Docker 镜像。您可能需要升级/降级某些包(在我们的案例中,我们需要将 numpy==1.23.5 降级)才能使一切正常工作。

Intel Gaudi

LLM Foundry 在 Intel Gaudi 设备上的支持是实验性的,请使用 habana_alpha 分支,并参阅该分支上的 README,其中包含安装说明和已知问题

有关 Intel Gaudi2 加速器的训练和推理性能结果,请参阅我们的博客:https://www.databricks.com/blog/llm-training-and-inference-intel-gaudi2-ai-accelerators

快速入门

注意
在尝试快速入门之前,请确保已完成上述安装步骤!

以下是一个端到端的工作流:准备 C4 数据集的一个子集,训练一个 MPT-125M 模型 10 个批次,将模型转换为 HuggingFace 格式,在 Winograd 挑战上评估模型,并生成提示的回复。

(请记住,这只是一个快速入门演示工具——要获得良好质量,LLM 需要训练超过 10 个批次 😄)

cd scripts

# 将 C4 数据集转换为 StreamingDataset 格式
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|>'

# 训练一个 MPT-125m 模型 10 个批次
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

# 将模型转换为 HuggingFace 格式
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

# 在任务子集上评估模型
composer eval/eval.py \
  eval/yamls/hf_eval.yaml \
  icl_tasks=eval/yamls/copa.yaml \
  model_name_or_path=mpt-125m-hf

# 生成提示的回复
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 命令指的是 Composer 库的分布式启动器。

如果您拥有具有写入权限的 HuggingFace 认证令牌,您可以选择将模型上传到 Hub!只需像这样导出您的令牌:

export HF_TOKEN=your-auth-token

并在上述调用 inference/convert_composer_to_hf.py 的取消注释包含 --hf_repo_for_upload ... 的行。

注册表

您可以使用注册表来自定义工作流,而无需 fork 库。LLM Foundry 的某些组件是可注册的,例如模型、日志记录器和回调函数。这意味着您可以为这些组件注册新选项,然后在 yaml 配置中使用它们。

发现可注册的组件

为了帮助查找和理解可注册的组件,您可以使用 llmfoundry registry cli 命令。

我们目前提供两个命令:
- llmfoundry registry get [--group]:列出所有注册表及其组件,可以选择指定特定的注册表。示例用法:llmfoundry registry get --group loggersllmfoundry registry get
- llmfoundry registry find <group> <name>:获取有关特定已注册组件的信息。示例用法:llmfoundry registry find loggers wandb

在这些命令上使用 --help 以获取更多信息。

这些命令还可以帮助您理解每个注册表的组成,因为每个注册表都包含一个将被打印出来的 docstring。一般概念是,每个注册表定义一个接口,注册到该注册表的组件必须实现该接口。如果库中有您认为应该可扩展但尚未实现的部分,请提交 issue!

如何注册

有几种方法可以注册新组件:

Python entrypoints

如果您正在构建自己的包并包含注册的组件,则可以通过 Python entrypoint 指定注册的组件。如果您要构建一个大型 LLM Foundry 扩展,并覆盖许多组件,这将是预期的用法。请注意,通过 entrypoints 注册的内容将覆盖直接通过代码注册的内容。

例如,以下将 MyLogger 类以键 my_logger 注册到 llm_foundry.loggers 注册表中:

[build-system]
requires = ["setuptools>=42", "wheel"]
build-backend = "setuptools.build_meta"

[project]
name = "foundry_registry"
version = "0.1.0"
dependencies = [
    "mosaicml",
    "llm-foundry",
]

# 注意:虽然在 Python 代码中,这是 llmfoundry.registry.loggers,
# 但在 entry_points 中指定时,必须使用 "llmfoundry_loggers"。也就是说,
# 名称的各个段应在 entry_points 部分中用 _ 连接。
[project.entry-points."llmfoundry_loggers"]
my_logger = "foundry_registry.loggers:MyLogger"

如果通过 entrypoints 开发新组件,需要注意的是 Python entrypoints 是全局的。这意味着如果您有多个包注册了具有相同键的组件,则最后安装的包将被使用。这对于覆盖 LLM Foundry 中的组件很有用,但如果不小心,也可能导致意外行为。此外,如果更改了 pyproject.toml,您需要重新安装包才能使更改生效。您可以通过 pip install -e . --no-deps 快速完成此操作,以避免重新安装依赖项。

直接调用 register

您还可以直接在代码中注册组件:

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 的训练/评估脚本,则需要提供 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 扩展,仅覆盖少数组件,因此不想创建整个包,则预计将使用其中一种方法。

了解更多关于 LLM Foundry 的信息!

查看 TUTORIAL.md 以继续学习如何使用 LLM Foundry。本教程突出显示了示例工作流,为您指向仓库中的其他资源,并回答了常见问题!

联系我们

如果您在代码中遇到任何问题,请直接在此仓库提交 Github issue。

如果您想在 MosaicML 平台上训练 LLM,请通过 demo@mosaicml.com 联系我们!

13 次点击  ∙  0 人收藏  
登录后收藏  
0 条回复
关于 ·  帮助 ·  PING ·  隐私 ·  条款   
OA0 - Omni AI 0 一个探索 AI 的社区
沪ICP备2024103595号-2
耗时 25 ms
Developed with Cursor