The Transformers Library:模型定义的标准化

发布于 2025 年 5 月 15 日
在 GitHub 上更新

一句话总结:未来,我们的目标是让 Transformers 成为跨框架的支点:如果一个模型架构得到 transformers 的支持,那么你可以期待它在生态系统的其他部分也得到支持。


Transformers 创建于 2019 年,紧随 BERT Transformer 模型的发布。自那时起,我们一直致力于添加最先进的架构,最初专注于 NLP,然后扩展到音频和计算机视觉。如今,transformers 已成为 Python 生态系统中 LLM 和 VLM 的默认库。

Transformers 现在支持 300 多个模型架构,平均每周新增约 3 个架构。我们致力于及时发布这些架构;对最受追捧的架构(Llamas、Qwens、GLMs 等)提供零日支持。

一个模型定义库

Transformers standardizing model definitions

随着时间的推移,Transformers 已成为 ML 生态系统的核心组件,成为模型多样性方面最完整的工具包之一;它已集成到所有流行的训练框架中,如 Axolotl、Unsloth、DeepSpeed、FSDP、PyTorch-Lightning、TRL、Nanotron 等。

最近,我们一直与最流行的推理引擎(vLLM、SGLang、TGI 等)紧密合作,使它们将 transformers 作为后端。增加的价值是巨大的:一旦模型添加到 transformers 中,它就立即在这些推理引擎中可用,**同时利用每个引擎提供的优势**:推理优化、专用内核、动态批处理等。

例如,下面是您如何在 vLLM 中使用 transformers 后端:

from vllm import LLM

llm = LLM(model="new-transformers-model", model_impl="transformers")

只需要这些,新模型就可以在 vLLM 中享受超快且生产级的服务!

更多详情请阅读 vLLM 文档


我们还与 llama.cppMLX 紧密合作,以使 transformers 和这些建模库之间的实现具有出色的互操作性。例如,多亏了社区的巨大努力,现在可以非常轻松地在 transformers 中加载 GGUF 文件进行进一步的微调。反之,transformers 模型可以轻松地 转换为 GGUF 文件,以供 llama.cpp 使用。

MLX 也是如此,transformers 的 safetensors 文件与 MLX 的模型直接兼容。

我们非常自豪 transformers 格式正在被社区采用,带来了我们都从中受益的互操作性。使用 Unsloth 训练模型,使用 SGLang 部署它,并将其导出到 llama.cpp 在本地运行!我们致力于继续支持社区向前发展。

致力于更简单的模型贡献

为了让社区更容易地使用 transformers 作为模型定义的参考,我们努力大幅降低模型贡献的门槛。我们已经为此努力了几年,但在接下来的几周内,我们将显著加速这一进程。

  • 每个模型的建模代码将进一步简化;为最重要的组件(KV 缓存、不同的注意力函数、内核优化)提供清晰简洁的 API。
  • 我们将废弃冗余组件,转而采用简单、单一的方式使用我们的 API:通过废弃慢速分词器来鼓励高效分词,并类似地使用快速矢量化视觉处理器。
  • 我们将继续加强对**模块化**模型定义的工作,目标是让新模型只需绝对最小的代码更改。六千行的贡献、新模型二十个文件的更改已成为过去。

这会如何影响你?

作为模型用户,这意味着什么

作为模型用户,未来您会发现您使用的工具之间有更多的互操作性。

这并不意味着我们打算让您在实验中只能使用 transformers;相反,这意味着由于这种建模标准化,您可以期望您用于训练、推理和生产的工具能够高效地协同工作。

作为模型创建者,这意味着什么

作为模型创建者,这意味着一次贡献就能让您的模型在所有集成了该建模实现的相关库中可用。多年来,我们多次看到这种情况:发布模型压力很大,集成到所有重要库中通常会耗费大量时间。

通过以社区驱动的方式标准化模型实现,我们希望降低跨库的贡献门槛。


我们坚信这个新的方向将有助于标准化一个经常面临碎片化风险的生态系统。我们很乐意听取您对团队决定采取的方向的反馈,以及我们为实现目标可以做出哪些改变。请访问 Hugging Face Hub 上的 transformers-community 支持选项卡

社区

太棒了!Transformers 成为尽可能多模型在发布首日的默认访问点,*并且*能够使用选择的推理引擎,这是一个史诗般的目标!

如果一个模型架构受到 transformers 的支持,那么你可以期待它在生态系统的其他部分也得到支持。

这很有趣,但似乎无论 TLDR 如何,Llama.CPP 都维护自己的实现,因此不会从 Transformers 中新架构的任何“零日支持”中受益。我一度希望 Llama 能直接与 Transformer 兼容。

目前尚不清楚那里有什么变化,如果有的话。

·
文章作者

很好的问题 @usbphone

您完全正确,llama.cpp 维护自己的实现;不过,我们一直与团队紧密合作,以实现更好的互操作性:在两边框架之间进行导出(从 transformers 到 llama.cpp,反之亦然)。

此外,随着最近 VLM 的频繁发布,我们一直直接与 @ngxson 合作,以便当实现已存在于 transformers 中时,在 llama.cpp 中实现零日(或零周)支持。

我们不会有“自动零日支持”,因为这两个库有不同的后端;但我们仍然可以通过提高两者兼容性来尝试,从而缩短实现所需的时间。

谢谢 @lysandre 。如果我听起来过于消极,深表歉意,这是一个非常好的目标。

既然我怀疑 Llama.cpp 不会像 VLM 那样直接实现 Transformers(尽管那会很好),也许可以使用 Llama 提供的低级 C 绑定来创建一个中间项目。我相信 llama-cpp-python 和类似项目就是这样工作的。

话又说回来,我也不确定有多少好处,但值得思考。

注册登录 发表评论