Transformers documentation

Pemetaan fusi (fitur eksperimental)

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

Pemetaan fusi (fitur eksperimental)

Pemetaan fusion menyediakan cara opt-in untuk mengganti submodul model saat pemuatan sambil mempertahankan format checkpoint asli.

Dibangun di atas:

Pemetaan fusi adalah fitur pemuatan eksperimental. Fitur ini mengubah struktur modul runtime dan dapat memengaruhi perilaku model. Gunakan hanya jika Anda secara eksplisit menginginkan tata letak runtime yang terfusi.

Mulai cepat

Fusion is enabled through from_pretrained() with fusion_config:

from transformers import AutoModelForImageTextToText


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

Secara default, tidak ada fusi yang diterapkan. Jika fusion_config disimpan dalam konfigurasi model, from_pretrained() akan memakainya secara otomatis.

Cara kerjanya

Pendaftaran fusi terjadi sebelum model diinstansiasi:

  1. from_pretrained() menggunakan argumen fusion_config yang eksplisit atau kembali ke config.fusion_config.
  2. Registry fusi memvalidasi nama-nama fusi yang diminta.
  3. Setiap fusion yang diaktifkan melakukan meta-inisialisasi pada kelas model target, secara opsional memfilter modul kandidat berdasarkan nama, dan menggunakan is_fusable(...) untuk menemukan kelas modul yang kompatibel.
  4. Kelas pengganti yang digabungkan didaftarkan melalui register_patch_mapping().
  5. Aturan ~WeightTransform yang cocok dihasilkan dari config sehingga pemuatan checkpoint dapat memetakan bobot ke tata letak runtime yang telah digabungkan.
  6. Secara default, save_pretrained() menggunakan jalur konversi terbalik untuk memulihkan tata letak checkpoint asli. Lewati save_original_format=False untuk mempertahankan tata letak runtime yang telah dikonversi.

Hal ini memungkinkan sebuah fusion menggunakan struktur modul runtime yang berbeda sambil tetap memuat dari format checkpoint asli, dan secara default menyimpan kembali ke format tersebut.

Catatan: Dengan mekanisme monkey-patching saat ini, pendaftaran fusion berada di level kelas: satu kelas modul yang kompatibel dipetakan ke satu kelas pengganti yang ter-fuse.

Keluarga fusi saat ini

Saat ini, fusion_config mendukung satu keluarga fusi:

  • patch_embeddings Aktifkan dengan:

    fusion_config = {"patch_embeddings": True}

    Efek: Menggantikan proyeksi patch embedding nn.Conv3d yang kompatibel dengan proyeksi nn.Linear yang diratakan dan ekuivalen pada saat runtime.

Memperluas pemetaan fusi

Untuk menambahkan keluarga fusi baru:

  1. Tambahkan predikat is_fusable. Ini menentukan apakah modul yang ditemukan kompatibel dengan fusi.
  2. Opsional, tambahkan target_modules_patterns. Hal ini membuat langkah penemuan lebih eksplisit dengan memfilter nama modul kandidat terlebih dahulu sebelum is_fusable(...).
  3. Tambahkan pabrik make_fused_class. Ini mengembalikan kelas pengganti runtime untuk kelas modul yang kompatibel.
  4. Tambahkan pabrik make_transforms jika tata letak yang digabungkan memerlukan konversi checkpoint. Ini mengembalikan aturan ~WeightTransform yang memetakan bobot antara tata letak asli dan tata letak yang digabungkan untuk konfigurasi tertentu.
  5. Daftarkan ModuleFusionSpec baru di fusion_mapping.py.

Setelah terdaftar, fusion baru menjadi tersedia melalui fusion_config.

API Internal

kelas transformers.fusion_mapping.ModuleFusionSpec

< >

( )

Resep dasar untuk keluarga fusion.

Spesifikasi fusion menentukan modul mana yang memenuhi syarat untuk fusion, bagaimana membangun kelas pengganti runtime, dan transformasi bobot apa yang diperlukan untuk memetakan checkpoint antara tata letak asli dan yang telah difusi.

get_empty_log

< >

( model_name: str )

Kembalikan pesan log yang dikeluarkan ketika tidak ada modul yang kompatibel ditemukan.

is_fusable

< >

( module: Module )

Kembalikan apakah module kompatibel dengan keluarga fusi ini.

make_fused_class

< >

( original_cls: type )

Bangun kelas pengganti runtime untuk kelas modul yang kompatibel.

make_transforms

< >

( config: PretrainedConfig )

Bangun transformasi bobot yang diperlukan untuk memuat dan menyimpan tata letak runtime yang telah digabungkan.

kelas transformers.fusion_mapping.PatchEmbeddingsFusionSpec

< >

( )

Fuse patch embeddings Conv3d yang kompatibel menjadi proyeksi Linear yang diratakan.

transformers.fusion_mapping._register_module_fusion

< >

( config: PretrainedConfigfusion_name: strspec: ModuleFusionSpec )

Daftarkan satu keluarga fusi untuk cls.

Fungsi ini memperbarui dua registri global yang digunakan oleh fused loading:

  • registry monkey-patching, sehingga kelas modul yang kompatibel diganti sebelum inisialisasi
  • pemetaan konversi checkpoint, sehingga modul runtime yang ter-fusi masih dimuat dari tata letak checkpoint asli

Catatan:

  • transform checkpoint yang saling bertentangan gagal dengan cepat

transformers.fusion_mapping.register_fusion_patches

< >

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

Daftarkan fusi runtime yang diminta untuk cls.

Fungsi ini:

  • memvalidasi fusion_config terhadap _FUSION_REGISTRY
  • menyelesaikan keluarga fusi yang diaktifkan sesuai urutan pengguna
  • mendaftarkan monkey patches dan transformasi checkpoint sebelum instansiasi model
Update on GitHub