SuperAPI AI 工具集

llm-foundry

LLM Foundry 是 Databricks(MosaicML)开源的 LLM 训练代码库,基于 Composer 与 MosaicML 平台,支持大模型的训练、微调、评估和推理部署。它强调易用、高效与灵活,便于快速实验最新技术。仓库包含模型、数据集、回调等源码,以及数据准备、训练、推理、评估等脚本,可训练或微调从 125M 到 70B 参数的 HuggingFace 与 MPT 模型。该代码库还用于训练 DBRX(132B 总参数、36B 激活参数的 MoE 模型),并已开源多个 MPT 模型。提供预构建 Docker 镜像、注册表机制和 CLI 工具,支持自定义组件。

访问官网

工具介绍

LLM Foundry 是用于训练、微调、评估和推理部署大语言模型的代码库,依托 Composer 和 MosaicML 平台,目标是易用、高效、灵活,支持快速实验最新技术。

仓库主要目录:llmfoundry/ 为模型、数据集、回调、工具等源码;scripts/ 包含各类 LLM 工作负载脚本:data_prep/ 将原始文本转为 StreamingDataset 格式;train/ 训练或微调 HuggingFace 与 MPT 模型,参数范围 125M 至 70B,train/benchmarking 用于分析训练吞吐与 MFU;inference/ 将模型转换为 HuggingFace 或 ONNX 格式并生成响应,inference/benchmarking 用于分析推理延迟与吞吐;eval/ 在学术或自定义上下文学习任务上评估 LLM;mcli/ 使用 MCLI 和 MosaicML 平台启动上述工作负载;TUTORIAL.md 提供深入教程、示例工作流与常见问题。

DBRX 是由 Databricks Mosaic 团队训练的最新开源 LLM,采用 Mixture-of-Experts(MoE)架构,使用优化版本的 Composer、LLM Foundry 和 MegaBlocks 训练,总参数 132B,激活参数 36B,已发布两个 DBRX 模型。模型权重和代码对研究人员和商业实体均授权可用,许可详见 LICENSE,可接受使用政策见相关链接,更多信息见 https://github.com/databricks/dbrx 。

Mosaic Pretrained Transformers(MPT)是 GPT 风格模型,具备 Flash Attention(效率)、ALiBi(上下文长度外推)以及缓解损失尖峰的稳定性改进。作为 MosaicML Foundation 系列的一部分,已开源多个 MPT 模型。本地试用可按 scripts/inference/README.md 中的说明,使用 hf_generate.py 或 hf_chat.py 脚本提示 HF 模型。社区贡献包括:ReplitLM(replit-code-v1-3b,2.7B 因果语言模型,专注代码补全,在 Stack Dedup v1.2 子集上训练,覆盖 Java、Python、C++ 等 20 种语言)、LLaVa-MPT(视觉指令微调,赋予 MPT 多模态能力)、ggml(面向消费级硬件高效推理的优化 MPT 版本)、GPT4All(本地运行的聊天系统,现已支持 MPT)、Q8MPT-Chat(Intel 提供的 8 位优化 CPU 版 MPT)。社区教程视频包括:使用 MPT-7B 与 Langchain、MPT-7B StoryWriter 介绍、单 GPU 微调 MPT-7B、在 Google Colab 上微调 MPT-7B-Instruct。欢迎通过 PR 贡献。

相关博客:Introducing DBRX: A New State-of-the-Art Open LLM;LLM Training and Inference with Intel Gaudi2 AI Accelerators;Training LLMs at Scale with AMD MI250 GPUs;Training LLMs with AMD MI250 GPUs and MosaicML;Announcing MPT-7B-8K: 8K Context Length for Document Understanding;MPT-30B: Raising the bar for open-source foundation models;Introducing MPT-7B;Benchmarking LLMs on H100;Blazingly Fast LLM Evaluation;GPT3 Quality for $500k;Billion parameter GPT training made easy。

硬件和软件要求:该代码库已在 NVIDIA A100 和 H100 上使用 PyTorch 2.4 测试。也可能适用于消费级 NVIDIA 卡和 AMD 卡等其他设备,但未主动测试。若在其他系统上使用成功或失败,请在 Github issue 中告知,以便更新支持矩阵。

MosaicML Docker 镜像:强烈推荐使用预构建镜像,见 https://hub.docker.com/orgs/mosaicml/repositories 。mosaicml/pytorch 镜像固定特定 PyTorch 和 CUDA 版本,稳定且很少更新。mosaicml/llm-foundry 镜像在每次主分支提交时构建新标签,可选择特定提交哈希,如 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。假设已安装 PyTorch、CMake 和 packaging,否则可通过 pip install cmake packaging torch 安装。

开始使用需克隆仓库并设置环境。使用 Docker(推荐):强烈建议在 Docker 容器中工作(见上述推荐镜像),按步骤克隆仓库并安装依赖。不使用 Docker(不推荐):应创建并使用虚拟环境。

TransformerEngine 和 amp_fp8 支持:NVIDIA H100 GPU 支持 FP8;Docker 镜像中已安装 Flash Attention 和 Transformer。若不用 Docker 镜像,可安装这些包。有关启用 TransformerEngine 层和 amp_fp8 的更多细节,见相关链接。

AMD(BETA 支持):在 AMD GPU 测试中,环境设置包括……最后安装 ROCm 启用的 flash attention(说明见链接)。尚无一切完美工作的 Docker 镜像,可能需要升级/降级某些包(例如需要降级到 numpy==1.23.5)才能无问题运行。

Intel Gaudi 设备上的 LLM Foundry 支持为实验性,请使用 habana_alpha 分支并查看该分支 README,其中包含安装说明和已知问题。Intel Gaudi2 加速器上的训练和推理性能结果见博客:https://www.databricks.com/blog/llm-training-and-inference-intel-gaudi2-ai-accelerators 。注意:尝试快速开始前务必完成上述安装步骤。

端到端工作流示例:准备 C4 数据集子集,训练 MPT-125M 模型 10 个批次,将模型转换为 HuggingFace 格式,在 Winograd 挑战上评估模型,并生成对提示的响应(仅为演示工具的快速开始,要获得好质量需训练超过 10 个批次)。注意:上述训练所用的 composer 命令指 Composer 库的分布式启动器。若有可写的 HuggingFace 认证令牌,可选上传模型到 Hub:导出令牌,并在调用 inference/convert_composer_to_hf.py 时取消包含 --hf_repo_for_upload ... 的行的注释。

注册表:可使用注册表自定义工作流而无需分叉库。LLM Foundry 的部分组件可注册,如模型、日志器、回调。这意味着可为这些组件注册新选项,然后在 yaml 配置中使用。发现可注册组件:可使用 llmfoundry registry cli 命令。目前提供两个命令:llmfoundry registry get [--group] 列出所有注册表及其组件,可选指定特定注册表,示例:llmfoundry registry get --group loggers 或 llmfoundry registry get;llmfoundry registry find <group> <name> 获取特定注册组件的信息,示例:llmfoundry registry find loggers wandb。对任何命令使用 --help 获取更多信息。这些命令还可帮助理解每个注册表的组成,因为每个注册表包含将打印的 docstring。总体概念是每个注册表定义接口,注册到该注册表的组件必须实现该接口。如果库的某部分目前不可扩展但你认为应该可扩展,请开 issue!

如何注册:有几种方式注册新组件:

  1. Python 入口点:如果构建自己的包并带有注册组件,可通过 Python 入口点指定。若构建大型扩展并覆盖许多组件,这是预期用法。注意通过入口点注册的内容将覆盖直接在代码中注册的组件。例如,以下将 MyLogger 类注册到 llm_foundry.loggers 注册表,键为 my_logger。若通过入口点开发新组件,需注意 Python 入口点是 Python 环境全局的,这意味着如果有多个包注册相同键的组件,最后安装的将被使用。这对覆盖 LLM Foundry 中的组件可能有用,但如果不小心也可能导致意外行为。此外,如果更改 pyproject.toml,需重新安装包以使更改生效。可通过 pip install -e . --no-deps 快速安装以避免重新安装依赖。
  2. 直接调用 register:也可在代码中直接注册组件。
  3. 装饰器:也可使用装饰器直接从代码注册组件。 对于直接调用和装饰器两种方式,如果使用 LLM Foundry 训练/评估脚本,需要提供 code_paths 参数,这是为注册组件需要执行的文件列表。例如,可能有一个名为 foundry_imports.py 的文件包含相关内容。然后在 yaml 配置中为训练/评估脚本提供 code_paths。如果构建小型扩展、只覆盖少数组件、不想创建整个包,这是预期用法。

了解更多:查看 TUTORIAL.md 继续学习 LLM Foundry,教程重点介绍示例工作流、指向仓库中其他资源并回答常见问题。如果代码遇到问题,请直接在此仓库提交 Github issue。如果想在 MosaicML 平台上训练 LLM,请联系 demo@mosaicml.com。