100 lines
3.9 KiB
Markdown
100 lines
3.9 KiB
Markdown
|
|
<!--Copyright 2025 The HuggingFace Team. All rights reserved.
|
||
|
|
|
||
|
|
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
|
||
|
|
the License. You may obtain a copy of the License at
|
||
|
|
|
||
|
|
http://www.apache.org/licenses/LICENSE-2.0
|
||
|
|
|
||
|
|
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
|
||
|
|
an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
|
||
|
|
specific language governing permissions and limitations under the License.
|
||
|
|
|
||
|
|
⚠️ Note that this file is in Markdown but contain specific syntax for our doc-builder (similar to MDX) that may not be
|
||
|
|
rendered properly in your Markdown viewer.
|
||
|
|
|
||
|
|
-->
|
||
|
|
|
||
|
|
# Import Utilities
|
||
|
|
|
||
|
|
This page goes through the transformers utilities to enable lazy and fast object import.
|
||
|
|
While we strive for minimal dependencies, some models have specific dependencies requirements that cannot be
|
||
|
|
worked around. We don't want for all users of `transformers` to have to install those dependencies to use other models,
|
||
|
|
we therefore mark those as soft dependencies rather than hard dependencies.
|
||
|
|
|
||
|
|
The transformers toolkit is not made to error-out on import of a model that has a specific dependency; instead, an
|
||
|
|
object for which you are lacking a dependency will error-out when calling any method on it. As an example, if
|
||
|
|
`torchvision` isn't installed, the fast image processors will not be available.
|
||
|
|
|
||
|
|
This object is still importable:
|
||
|
|
|
||
|
|
```python
|
||
|
|
>>> from transformers import DetrImageProcessorFast
|
||
|
|
>>> print(DetrImageProcessorFast)
|
||
|
|
<class 'DetrImageProcessorFast'>
|
||
|
|
```
|
||
|
|
|
||
|
|
However, no method can be called on that object:
|
||
|
|
|
||
|
|
```python
|
||
|
|
>>> 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.org/get-started/locally/ and follow the ones that match your environment.
|
||
|
|
Please note that you may need to restart your runtime after installation.
|
||
|
|
```
|
||
|
|
|
||
|
|
Let's see how to specify specific object dependencies.
|
||
|
|
|
||
|
|
## Specifying Object Dependencies
|
||
|
|
|
||
|
|
### Filename-based
|
||
|
|
|
||
|
|
All objects under a given filename have an automatic dependency to the tool linked to the filename
|
||
|
|
|
||
|
|
**PyTorch**: All files starting with `modeling_` have an automatic PyTorch dependency
|
||
|
|
|
||
|
|
**Tokenizers**: All files starting with `tokenization_` and ending with `_fast` have an automatic `tokenizers` dependency
|
||
|
|
|
||
|
|
**Vision**: All files starting with `image_processing_` have an automatic dependency to the `vision` dependency group;
|
||
|
|
at the time of writing, this only contains the `pillow` dependency.
|
||
|
|
|
||
|
|
**Vision + Torch + Torchvision**: All files starting with `image_processing_` and ending with `_fast` have an automatic
|
||
|
|
dependency to `vision`, `torch`, and `torchvision`.
|
||
|
|
|
||
|
|
All of these automatic dependencies are added on top of the explicit dependencies that are detailed below.
|
||
|
|
|
||
|
|
### Explicit Object Dependencies
|
||
|
|
|
||
|
|
We add a method called `requires` that is used to explicitly specify the dependencies of a given object. As an
|
||
|
|
example, the `Trainer` class has two hard dependencies: `torch` and `accelerate`. Here is how we specify these
|
||
|
|
required dependencies:
|
||
|
|
|
||
|
|
```python
|
||
|
|
from .utils.import_utils import requires
|
||
|
|
|
||
|
|
@requires(backends=("torch", "accelerate"))
|
||
|
|
class Trainer:
|
||
|
|
...
|
||
|
|
```
|
||
|
|
|
||
|
|
Backends that can be added here are all the backends that are available in the `import_utils.py` module.
|
||
|
|
|
||
|
|
Additionally, specific versions can be specified in each backend. For example, this is how you would specify
|
||
|
|
a requirement on torch>=2.6 on the `Trainer` class:
|
||
|
|
|
||
|
|
```python
|
||
|
|
from .utils.import_utils import requires
|
||
|
|
|
||
|
|
@requires(backends=("torch>=2.6", "accelerate"))
|
||
|
|
class Trainer:
|
||
|
|
...
|
||
|
|
```
|
||
|
|
|
||
|
|
You can specify the following operators: `==`, `>`, `>=`, `<`, `<=`, `!=`.
|
||
|
|
|
||
|
|
## Methods
|
||
|
|
|
||
|
|
[[autodoc]] utils.import_utils.define_import_structure
|
||
|
|
|
||
|
|
[[autodoc]] utils.import_utils.requires
|