Transformers documentation
Pemetaan fusi (fitur eksperimental)
Pemetaan fusi (fitur eksperimental)
Pemetaan fusion menyediakan cara opt-in untuk mengganti submodul model saat pemuatan sambil mempertahankan format checkpoint asli.
Dibangun di atas:
- Monkey patching untuk mengganti kelas modul sebelum instansiasi model.
- Pemuatan bobot dinamis untuk memetakan bobot antara tata letak runtime asli dan yang digabungkan.
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:
- from_pretrained() menggunakan argumen
fusion_configyang eksplisit atau kembali keconfig.fusion_config. - Registry fusi memvalidasi nama-nama fusi yang diminta.
- 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. - Kelas pengganti yang digabungkan didaftarkan melalui register_patch_mapping().
- Aturan
~WeightTransformyang cocok dihasilkan dari config sehingga pemuatan checkpoint dapat memetakan bobot ke tata letak runtime yang telah digabungkan. - Secara default, save_pretrained() menggunakan jalur konversi terbalik untuk memulihkan tata letak checkpoint asli. Lewati
save_original_format=Falseuntuk 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_embeddingsAktifkan dengan:fusion_config = {"patch_embeddings": True}Efek: Menggantikan proyeksi patch embedding
nn.Conv3dyang kompatibel dengan proyeksinn.Linearyang diratakan dan ekuivalen pada saat runtime.
Memperluas pemetaan fusi
Untuk menambahkan keluarga fusi baru:
- Tambahkan predikat
is_fusable. Ini menentukan apakah modul yang ditemukan kompatibel dengan fusi. - Opsional, tambahkan
target_modules_patterns. Hal ini membuat langkah penemuan lebih eksplisit dengan memfilter nama modul kandidat terlebih dahulu sebelumis_fusable(...). - Tambahkan pabrik
make_fused_class. Ini mengembalikan kelas pengganti runtime untuk kelas modul yang kompatibel. - Tambahkan pabrik
make_transformsjika tata letak yang digabungkan memerlukan konversi checkpoint. Ini mengembalikan aturan~WeightTransformyang memetakan bobot antara tata letak asli dan tata letak yang digabungkan untuk konfigurasi tertentu. - Daftarkan
ModuleFusionSpecbaru difusion_mapping.py.
Setelah terdaftar, fusion baru menjadi tersedia melalui fusion_config.
API Internal
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.
Kembalikan pesan log yang dikeluarkan ketika tidak ada modul yang kompatibel ditemukan.
Kembalikan apakah module kompatibel dengan keluarga fusi ini.
Bangun kelas pengganti runtime untuk kelas modul yang kompatibel.
Bangun transformasi bobot yang diperlukan untuk memuat dan menyimpan tata letak runtime yang telah digabungkan.
Fuse patch embeddings Conv3d yang kompatibel menjadi proyeksi Linear yang diratakan.
transformers.fusion_mapping._register_module_fusion
< source >( 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
< source >( 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_configterhadap_FUSION_REGISTRY - menyelesaikan keluarga fusi yang diaktifkan sesuai urutan pengguna
- mendaftarkan monkey patches dan transformasi checkpoint sebelum instansiasi model