菜单

核心架构

相关源文件

Hugging Face Transformers 库的核心架构确立了基础设计模式和抽象,从而实现可扩展的模型加载、跨框架兼容性以及跨 500 多种模型架构的统一接口。该架构实现了几个关键模式:惰性加载、基于映射的自动解析和框架抽象层。

本页介绍了基础架构组件。有关具体的模型实现,请参阅模型实现。有关训练基础设施,请参阅训练系统。有关生成功能,请参阅生成系统。有关管道抽象,请参阅管道系统

架构设计模式

Transformers 库实现了三个核心架构模式,这些模式使数百种模型类型能够实现可扩展性和灵活性。

惰性加载架构

使用 _LazyModule 进行惰性加载

基于映射的解析系统

框架抽象层

来源

基础类

该库的架构围绕三个基础类展开,这些类在所有模型实现中建立了通用接口和行为。

PretrainedConfig - 配置管理

配置类层次结构

CONFIG_MAPPING_NAMESsrc/transformers/models/auto/configuration_auto.py36-387 定义了从模型类型到配置类的映射

PreTrainedModel - 模型基类

模型加载与状态管理

MODEL_MAPPING_NAMESsrc/transformers/models/auto/modeling_auto.py32-357 将模型类型映射到基类模型

PreTrainedTokenizerBase - 分词接口

分词器解析系统

TOKENIZER_MAPPING_NAMESsrc/transformers/models/auto/tokenization_auto.py57-413 定义了分词器解析

来源

自动解析系统

自动解析系统通过基于映射的查找和惰性实例化实现动态类解析,从而在 300 多种模型架构中实现统一接口。

_LazyAutoMapping - 核心解析引擎

惰性自动映射架构

自动类解析过程

模型类型解析和类加载

该系统使用 model_type_to_module_name() 函数将模型类型转换为 Python 模块路径

模块导入结构

特定任务模型解析

该系统通过专用映射提供特定任务的自动类

多任务自动解析

来源

后端感知加载架构

该库根据可用后端实现条件加载,从而在缺少依赖项时实现优雅降级。

条件导入系统

后端可用性检查

缺失依赖项的虚拟对象模式

来自 src/transformers/utils/dummy_pt_objects.py573-654

导入结构管理

动态导入结构生成

来自 src/transformers/__init__.py1015-1029

框架特定类解析

多框架模型支持

来源

跨框架兼容性模式

该库通过抽象基类和共享通用接口的框架特定实现来支持跨框架兼容性。

框架抽象层次结构

基类架构

生成Mixin模式

框架特定生成实现

来自 src/transformers/__init__.py530-547 显示框架特定生成导入

框架检测与加载

运行时框架检测

来源

可扩展性与集成模式

该架构提供了定义良好的扩展点,可以通过既定模式添加新模型、组件和后端。

自定义模型集成模式

模型注册工作流程

来自 src/transformers/models/auto/configuration_auto.py532-603 中的模型注册模式

Mixin组合架构

基于能力的Mixins

后端扩展点

添加新框架支持

来源

幕后:核心工具

核心架构依赖于几个处理常见操作的工具

缓存管理

该库维护一个已下载模型和文件的缓存,以避免重复下载。这通过 Hugging Face Hub 库进行管理,该库提供了下载和缓存文件的功能。

关键组件

  • cached_file:从缓存检索文件或下载文件
  • get_checkpoint_shard_files:处理分片模型文件
  • 跨不同环境的缓存位置管理

来源

权重初始化

权重初始化是模型创建的关键部分。该库提供了用于以下方面的实用工具:

  • 标准初始化模式
  • 模型加载期间控制初始化
  • 特定模型类型的特殊处理
  • 绑定权重管理

来源

设备管理

设备管理工具处理

  • 在设备之间移动模型(CPU、GPU 等)
  • 获取模型参数的设备
  • 处理设备特定操作
  • 支持分布式训练设置

来源

总结

Transformers 库的核心架构为使用 Transformer 模型提供了灵活且可扩展的基础。其关键组件包括:

  1. 定义通用接口的基类(PreTrainedModelPretrainedConfigPreTrainedTokenizerBase
  2. 支持轻松使用预训练模型的加载和保存机制
  3. 提供统一接口以处理不同模型类型的自动类
  4. 跨 PyTorch、TensorFlow 和 Flax 的框架兼容性
  5. 用于定制和扩展库的扩展点

该架构使库能够支持数百种模型架构,同时为用户保持一致的接口。

来源