Transformers 文档

导入工具

Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

导入工具

本页面将介绍 Transformers 的实用工具,以实现延迟和快速对象导入。虽然我们力求将依赖项降至最低,但某些模型具有无法解决的特定依赖项要求。我们不希望所有 `transformers` 用户都必须安装这些依赖项才能使用其他模型,因此我们将这些依赖项标记为软依赖项而不是硬依赖项。

Transformers 工具包不会在导入具有特定依赖项的模型时出错;相反,当调用其任何方法时,您缺少依赖项的对象会出错。例如,如果未安装 `torchvision`,则快速图像处理器将不可用。

此对象仍可导入

>>> from transformers import DetrImageProcessorFast
>>> print(DetrImageProcessorFast)
<class 'DetrImageProcessorFast'>

但是,无法在此对象上调用任何方法

>>> DetrImageProcessorFast.from_pretrained()
ImportError: 
DetrImageProcessorFast requires the Torchvision library but it was not found in your environment. Check out the instructions on the
installation page: https://pytorch.ac.cn/get-started/locally/ and follow the ones that match your environment.
Please note that you may need to restart your runtime after installation.

让我们看看如何指定特定对象依赖项。

指定对象依赖项

基于文件名

给定文件名下的所有对象都与链接到该文件名的工具具有自动依赖关系

TensorFlow: 所有以 `modeling_tf_` 开头的文件都具有自动 TensorFlow 依赖项。

Flax: 所有以 `modeling_flax_` 开头的文件都具有自动 Flax 依赖项

PyTorch: 所有以 `modeling_` 开头且不符合上述(TensorFlow 和 Flax)条件的文件都具有自动 PyTorch 依赖项

分词器: 所有以 `tokenization_` 开头并以 `_fast` 结尾的文件都具有自动 `tokenizers` 依赖项

视觉: 所有以 `image_processing_` 开头的文件都具有对 `vision` 依赖组的自动依赖项;在撰写本文时,这仅包含 `pillow` 依赖项。

视觉 + Torch + Torchvision: 所有以 `image_processing_` 开头并以 `_fast` 结尾的文件都具有对 `vision`、`torch` 和 `torchvision` 的自动依赖项。

所有这些自动依赖项都添加到下面详述的显式依赖项之上。

显式对象依赖项

我们添加了一个名为 `requires` 的方法,用于显式指定给定对象的依赖项。例如,`Trainer` 类有两个硬依赖项:`torch` 和 `accelerate`。以下是我们指定这些所需依赖项的方式

from .utils.import_utils import requires

@requires(backends=("torch", "accelerate"))
class Trainer:
    ...

此处可添加的后端是 `import_utils.py` 模块中可用的所有后端。

此外,可以在每个后端中指定特定版本。例如,您可以这样指定 `Trainer` 类对 torch>=2.6 的要求

from .utils.import_utils import requires

@requires(backends=("torch>=2.6", "accelerate"))
class Trainer:
    ...

您可以指定以下运算符:`==`、`>`、`>=`、`<`、`<=`、`!=`。

方法

transformers.utils.import_utils.define_import_structure

( module_path: str prefix: typing.Optional[str] = None )

此方法以 `module_path` 作为输入,并创建一个可供 `_LazyModule` 使用的导入结构。

以下是 `src.transformers.models` 级别上的输出导入结构示例

{ frozenset({‘tokenizers’}): { ‘albert.tokenization_albert_fast’: {‘AlbertTokenizerFast’} }, frozenset(): { ‘albert.configuration_albert’: {‘AlbertConfig’, ‘AlbertOnnxConfig’}, ‘align.processing_align’: {‘AlignProcessor’}, ‘align.configuration_align’: {‘AlignConfig’, ‘AlignTextConfig’, ‘AlignVisionConfig’}, ‘altclip.configuration_altclip’: {‘AltCLIPConfig’, ‘AltCLIPTextConfig’, ‘AltCLIPVisionConfig’}, ‘altclip.processing_altclip’: {‘AltCLIPProcessor’} } }

导入结构是一个字典,以 frozenset 作为键,以字符串到对象集的字典作为值。

如果 `prefix` 不为 None,它将把该前缀添加到返回字典中的所有键。

transformers.utils.import_utils.requires

< >

( backends = () )

此装饰器实现了两件事

  • 将 `__backends` 元组附加到对象以查看其正确执行所需的后端,而无需实例化它
  • `@requires` 字符串用于动态导入对象
< > 在 GitHub 上更新