Transformers documentation
Nhập tiện ích
Nhập tiện ích
Trang này trình bày các tiện ích của transformers để cho phép nhập đối tượng theo kiểu lười (lazy) và nhanh chóng.
Mặc dù chúng tôi hướng tới việc giảm thiểu các phụ thuộc, một số mô hình có yêu cầu phụ thuộc cụ thể mà không thể tránh được. Chúng tôi không muốn tất cả người dùng của transformers phải cài đặt các phụ thuộc đó để sử dụng các mô hình khác, do đó chúng tôi đánh dấu chúng là phụ thuộc mềm (soft dependencies) thay vì phụ thuộc cứng (hard dependencies).
Bộ công cụ transformers không được thiết kế để báo lỗi khi import một model có một dependency cụ thể; thay vào đó, một object mà bạn thiếu dependency sẽ báo lỗi khi gọi bất kỳ method nào trên nó. Ví dụ, nếu torchvision chưa được cài đặt, các fast image processors sẽ không khả dụng.
Đối tượng này vẫn có thể được nhập:
>>> from transformers import DetrImageProcessor
>>> print(DetrImageProcessor)
<class 'transformers.models.detr.image_processing_detr.DetrImageProcessor'>Tuy nhiên, các phương thức trên đối tượng đó kiểm tra các phụ chọn tùy chọn khi được gọi. Ví dụ, nếu torchvision không khả dụng,
gọi này sẽ gây ra ImportError:
>>> DetrImageProcessor.from_pretrained("facebook/detr-resnet-50")
ImportError:
DetrImageProcessor 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.Hãy xem cách chỉ định các phụ thuộc đối tượng cụ thể.
Chỉ định Phụ thuộc Đối tượng
Dựa trên tên tệp
Tất cả các đối tượng dưới một tên tệp nhất định đều có sự phụ thuộc tự động vào công cụ được liên kết với tên tệp đó
PyTorch: Tất cả các tệp bắt đầu bằng modeling_ đều có phụ thuộc PyTorch tự động
Tokenizers: Tất cả các tệp bắt đầu bằng tokenization_ và kết thúc bằng _fast đều có phụ thuộc tự động vào tokenizers
Vision: Tất cả các tệp bắt đầu bằng image_processing_ đều có phụ thuộc tự động vào nhóm phụ thuộc vision;
tại thời điểm viết, nhóm này chỉ chứa phụ thuộc pillow.
Vision + Torch + Torchvision: Tất cả các tệp bắt đầu bằng image_processing_ và kết thúc bằng _fast đều có sự phụ thuộc tự động vào vision, torch và torchvision.
Tất cả các phụ thuộc tự động này được thêm vào bên trên các phụ thuộc tường minh được mô tả chi tiết bên dưới.
Phụ thuộc đối tượng tường minh
Chúng tôi thêm một phương thức có tên requires được dùng để chỉ định rõ ràng các phụ thuộc của một đối tượng nhất định. Ví dụ, lớp Trainer có hai phụ thuộc bắt buộc: torch và accelerate. Dưới đây là cách chúng tôi chỉ định các phụ thuộc bắt buộc này:
from .utils.import_utils import requires
@requires(backends=("torch", "accelerate"))
class Trainer:
...Các backend có thể được thêm vào đây là tất cả các backend khả dụng trong module import_utils.py.
Ngoài ra, có thể chỉ định các phiên bản cụ thể trong mỗi backend. Ví dụ, đây là cách bạn chỉ định yêu cầu torch>=2.6 trên lớp Trainer:
from .utils.import_utils import requires
@requires(backends=("torch>=2.6", "accelerate"))
class Trainer:
...Bạn có thể chỉ định các toán tử sau: ==, >, >=, <, <=, !=.
Phương thức
transformers.utils.import_utils.define_import_structure
( module_path: strprefix: str | None = None )
Phương pháp này nhận module_path làm đầu vào và tạo ra một cấu trúc import mà _LazyModule có thể xử lý được.
Dưới đây là một ví dụ về cấu trúc import đầu ra ở cấp độ src.transformers.models:
{ frozenset({‘tokenizers’}): { ‘albert.tokenization_albert_fast’: {‘AlbertTokenizer’} }, frozenset(): { ‘albert.configuration_albert’: {‘AlbertConfig’}, ‘align.processing_align’: {‘AlignProcessor’}, ‘align.configuration_align’: {‘AlignConfig’, ‘AlignTextConfig’, ‘AlignVisionConfig’}, ‘altclip.configuration_altclip’: {‘AltCLIPConfig’, ‘AltCLIPTextConfig’, ‘AltCLIPVisionConfig’}, ‘altclip.processing_altclip’: {‘AltCLIPProcessor’} } }
Cấu trúc import là một dict được định nghĩa với các frozenset làm khóa, và các dict ánh xạ từ chuỗi sang các tập hợp đối tượng.
Nếu prefix không phải là None, nó sẽ thêm tiền tố đó vào tất cả các khóa trong dict được trả về.
Trình trang trí này cho phép hai điều:
- Gắn một tuple
__backendsvào một đối tượng để xem các backend cần thiết để đối tượng đó thực thi chính xác mà không cần khởi tạo nó - Chuỗi ‘@requires’ được sử dụng để nhập động các đối tượng
transformers.requires_backends
< source >( objbackends )
Phương thức tự động gây ra ngoại lệ trong trường hợp các backend được chỉ định không khả dụng. Nó thường được sử dụng trong quá trình
Các backend nên được định nghĩa trong BACKEND_MAPPING được định nghĩa trong transformers.utils.import_utils.