Transformers documentation

Lập bản đồ hợp nhất (tính năng thử nghiệm)

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v5.22.2).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Lập bản đồ hợp nhất (tính năng thử nghiệm)

Fusion mapping cung cấp một cách chọn tham gia để thay thế các submodule của mô hình khi tải, đồng thời giữ nguyên định dạng checkpoint gốc.

Nó được xây dựng dựa trên:

Fusion mapping là một tính năng tải thử nghiệm. Nó thay đổi cấu trúc module thời gian chạy và có thể ảnh hưởng đến hành vi của mô hình. Chỉ sử dụng nó khi bạn thực sự muốn một bố cục thời gian chạy đã được hợp nhất.

Bắt đầu nhanh

Fusion được kích hoạt thông qua from_pretrained() với fusion_config:

from transformers import AutoModelForImageTextToText


model = AutoModelForImageTextToText.from_pretrained(
    "Qwen/Qwen2-VL-2B-Instruct",
    fusion_config={"patch_embeddings": True},
)

Mặc định, không áp dụng fusion. Nếu fusion_config được lưu trong cấu hình mô hình, from_pretrained() sẽ tự động tái sử dụng nó.

Cách hoạt động

Đăng ký Fusion diễn ra trước khi mô hình được khởi tạo:

  1. from_pretrained() sử dụng đối số fusion_config được chỉ định rõ ràng hoặc quay lại dùng config.fusion_config.
  2. Bảng đăng ký hợp nhất xác thực các tên hợp nhất được yêu cầu.
  3. Mỗi fusion được kích hoạt sẽ khởi tạo meta của lớp model đích, tùy chọn lọc các module ứng viên theo tên, và sử dụng is_fusable(...) để phát hiện các lớp module tương thích.
  4. Các lớp thay thế đã hợp nhất được đăng ký thông qua register_patch_mapping().
  5. Các quy tắc ~WeightTransform khớp được tạo từ cấu hình để việc nạp checkpoint có thể ánh xạ trọng số vào bố cục runtime đã hợp nhất.
  6. Mặc định, save_pretrained() sử dụng đường dẫn chuyển đổi ngược để khôi phục bố cục checkpoint gốc. Truyền save_original_format=False để giữ lại bố cục runtime đã chuyển đổi.

Điều này cho phép một fusion sử dụng cấu trúc module runtime khác nhau trong khi vẫn tải từ định dạng checkpoint gốc, và mặc định cũng lưu lại về định dạng đó.

Lưu ý: Với cơ chế monkey-patching hiện tại, việc đăng ký fusion là ở cấp lớp: một lớp module tương thích được ánh xạ đến một lớp thay thế đã fusion.

Các họ hợp nhất hiện tại

Hiện tại, fusion_config hỗ trợ một họ hợp nhất:

  • patch_embeddings Bật bằng cách:

    fusion_config = {"patch_embeddings": True}

    Hiệu ứng: Thay thế các phép chiếu nhúng patch nn.Conv3d tương thích bằng các phép chiếu nn.Linear phẳng tương đương tại thời điểm chạy.

Mở rộng ánh xạ hợp nhất

Để thêm một họ fusion mới:

  1. Thêm một tiên đề is_fusable. Tiên đề này quyết định xem một module được phát hiện có tương thích với sự hợp nhất hay không.
  2. Tùy chọn thêm target_modules_patterns. Điều này làm cho bước khám phá trở nên rõ ràng hơn bằng cách lọc trước các tên module ứng viên trước is_fusable(...).
  3. Thêm nhà máy make_fused_class. Hàm này trả về lớp thay thế thời gian chạy cho một lớp module tương thích.
  4. Thêm một nhà máy make_transforms nếu bố cục hợp nhất cần chuyển đổi checkpoint. Điều này trả về các quy tắc ~WeightTransform ánh xạ trọng số giữa bố cục gốc và bố cục hợp nhất cho một cấu hình nhất định.
  5. Đăng ký ModuleFusionSpec mới trong fusion_mapping.py.

Sau khi đăng ký, phép hợp nhất mới sẽ có sẵn thông qua fusion_config.

API nội bộ

lớp transformers.fusion_mapping.ModuleFusionSpec

< >

( )

Công thức cơ bản cho một họ hợp nhất.

Một spec fusion quyết định các module nào đủ điều kiện cho một fusion, cách xây dựng lớp thay thế runtime, và các phép biến đổi trọng số nào cần thiết để ánh xạ checkpoint giữa bố cục gốc và bố cục đã fusion.

get_empty_log

< >

( model_name: str )

Trả về thông báo nhật ký được phát ra khi không tìm thấy các module tương thích.

is_fusable

< >

( module: Module )

Trả về việc module có tương thích với họ hợp nhất này hay không.

make_fused_class

< >

( original_cls: type )

Xây dựng lớp thay thế thời gian chạy cho một lớp module tương thích.

make_transforms

< >

( config: PretrainedConfig )

Xây dựng các phép biến đổi trọng số cần thiết để nạp và lưu bố cục runtime đã hợp nhất.

lớp transformers.fusion_mapping.PatchEmbeddingsFusionSpec

< >

( )

Nối các nhúng patch Conv3d tương thích thành các phép chiếu Linear đã được làm phẳng.

transformers.fusion_mapping._register_module_fusion

< >

( config: PretrainedConfigfusion_name: strspec: ModuleFusionSpec )

Đăng ký một họ hợp nhất cho cls.

Hàm này cập nhật hai bộ đăng ký toàn cục được sử dụng bởi quá trình nạp hợp nhất:

  • bảng đăng ký monkey-patching, để các lớp module tương thích được thay thế trước khi khởi tạo
  • bản ánh xạ chuyển đổi checkpoint, để các module runtime đã hợp nhất vẫn được nạp từ bố cục checkpoint gốc

Ghi chú:

  • các biến đổi checkpoint xung đột sẽ thất bại nhanh

transformers.fusion_mapping.register_fusion_patches

< >

( configfusion_config: collections.abc.Mapping[str, bool | collections.abc.Mapping[str, typing.Any]] | None = None )

Đăng ký các phép hợp nhất runtime được yêu cầu cho cls.

Hàm này:

  • kiểm tra fusion_config đối chiếu với _FUSION_REGISTRY
  • giải quyết các nhóm hợp nhất được kích hoạt theo thứ tự của người dùng
  • đăng ký các monkey patch và các biến đổi checkpoint trước khi khởi tạo mô hình
Update on GitHub