Transformers documentation

Füzyon eşleme (deneysel özellik)

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

and get access to the augmented documentation experience

to get started

Füzyon eşleme (deneysel özellik)

Fusion mapping, orijinal checkpoint biçimini koruyarak model alt modüllerinin yükleme sırasında değiştirilmesine izin veren isteğe bağlı bir yöntem sunar.

Şunların üzerine inşa edilir:

  • Model örneklemesi öncesinde modül sınıflarını değiştirmek için Monkey patching.
  • Orijinal ve birleştirilmiş çalışma zamanı yerleşimleri arasında ağırlıkları eşlemek için dinamik ağırlık yükleme.

Fusion mapping deneysel bir yükleme özelliğidir. Çalışma zamanı modül yapısını değiştirir ve model davranışını etkileyebilir. Yalnızca açıkça birleştirilmiş bir çalışma zamanı yerleşimi istediğinizde kullanın.

Hızlı başlangıç

Fusion, fusion_config ile from_pretrained() üzerinden etkinleştirilir:

from transformers import AutoModelForImageTextToText


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

Varsayılan olarak hiçbir füzyon uygulanmaz. fusion_config model yapılandırmasında saklanıyorsa, from_pretrained() bunu otomatik olarak yeniden kullanır.

Nasıl çalışır

Füzyon kaydı, model örneklenmeden önce gerçekleşir:

  1. from_pretrained(), açık fusion_config argümanını kullanır veya config.fusion_config değerine geri döner.
  2. Füzyon kayıt defteri, istenen füzyon adlarını doğrular.
  3. Her etkinleştirilen füzyon, hedef model sınıfını meta-olarak başlatır, aday modülleri isteğe bağlı olarak adlarına göre filtreler ve uyumlu modül sınıflarını keşfetmek için is_fusable(...) kullanır.
  4. Fused replacement sınıfları register_patch_mapping() üzerinden kaydedilir.
  5. Yapılandırma dosyasından ~WeightTransform kuralları türetilir; böylece checkpoint yükleme işlemi, ağırlıkları birleştirilmiş çalışma zamanı yerleşimine eşleyebilir.
  6. Varsayılan olarak, save_pretrained() orijinal checkpoint yerleşimini geri yüklemek için ters dönüşüm yolunu kullanır. Bunun yerine dönüştürülmüş çalışma zamanı yerleşimini korumak için save_original_format=False parametresini iletin.

Bu, bir füzyonun orijinal kontrol noktası biçiminden yüklemeye devam ederken farklı bir çalışma zamanı modülü yapısı kullanmasına ve varsayılan olarak yine bu biçime kaydetmesine olanak tanır.

Not: Güncel monkey-patching mekanizmasıyla, füzyon kaydı sınıf düzeyindedir: bir uyumlu modül sınıfı, bir füzyonlu değiştirme sınıfına eşlenir.

Güncel füzyon aileleri

Şu anda fusion_config bir füzyon ailesini destekler:

  • patch_embeddings Etkinleştirme:

    fusion_config = {"patch_embeddings": True}

    Etki: Uygun nn.Conv3d yama gömme projeksiyonlarını, çalışma zamanında eşdeğer düzleştirilmiş nn.Linear projeksiyonlarıyla değiştirir.

Füzyon eşlemesini genişletme

Yeni bir füzyon ailesi eklemek için:

  1. is_fusable bir yargıç (predicate) ekleyin. Bu, keşfedilen bir modülün füzyonla uyumlu olup olmadığını belirler.
  2. İsteğe bağlı olarak target_modules_patterns ekleyin. Bu, is_fusable(...) çağrısından önce aday modül adlarını önceden filtreleyerek keşif adımını daha açık hale getirir.
  3. make_fused_class fabrikası ekleyin. Bu, uyumlu bir modül sınıfı için çalışma zamanı yer değiştirme sınıfını döndürür.
  4. Füzyonlanmış yerleşim (fused layout) için kontrol noktası (checkpoint) dönüşümü gerekiyorsa bir make_transforms fabrikası ekleyin. Bu, verilen bir yapılandırma için ağırlıkları orijinal ve füzyonlanmış yerleşimler arasında eşleyen ~WeightTransform kurallarını döndürür.
  5. Yeni ModuleFusionSpec'i fusion_mapping.py dosyasına kaydedin.

Kayıt yapıldıktan sonra, yeni füzyon fusion_config üzerinden kullanılabilir hale gelir.

Dahili API

sınıf transformers.fusion_mapping.ModuleFusionSpec

< >

( )

Füzyon ailesi için temel tarif.

Füzyon spesifikasyonu, hangi modüllerin füzyon için uygun olduğunu, çalışma zamanı yer değiştirme sınıfının nasıl oluşturulacağını ve kontrol noktalarının orijinal ve füzyonlu yerleşimler arasında eşlenmesi için gerekli ağırlık dönüşümlerini belirler.

get_empty_log

< >

( model_name: str )

Uygun modüller bulunamadığında yayımlanan günlük mesajını döndürür.

is_fusable

< >

( module: Module )

module'ün bu füzyon ailesiyle uyumlu olup olmadığını döndürür.

make_fused_class

< >

( original_cls: type )

Uygun bir modül sınıfı için çalışma zamanı değiştirme sınıfını oluşturun.

make_transforms

< >

( config: PretrainedConfig )

Birleştirilmiş çalışma zamanı yerleşimini yüklemek ve kaydetmek için gereken ağırlık dönüşümlerini oluşturun.

sınıf transformers.fusion_mapping.PatchEmbeddingsFusionSpec

< >

( )

Uyumluluk gösteren Conv3d yama gömme işlemlerini, düzleştirilmiş Linear projeksiyonlarına birleştirin.

transformers.fusion_mapping._register_module_fusion

< >

( config: PretrainedConfigfusion_name: strspec: ModuleFusionSpec )

cls için bir füzyon ailesi kaydedin.

Bu fonksiyon, füzyonlu yükleme tarafından kullanılan iki küresel kayıt defterini günceller:

  • maymun yaması (monkey-patching) kayıt defteri, böylece uyumlu modül sınıfları başlatılmadan önce değiştirilir
  • kontrol noktası dönüştürme eşlemesi, böylece birleştirilmiş çalışma zamanı modülleri hâlâ orijinal kontrol noktası yerleşiminden yüklenir

Notlar:

  • çakışan checkpoint dönüşümleri hızlı şekilde başarısız olur

transformers.fusion_mapping.register_fusion_patches

< >

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

cls için istenen çalışma zamanı füzyonlarını kaydedin.

Bu fonksiyon:

  • fusion_config öğesini _FUSION_REGISTRY ile doğrular
  • kullanıcı sırasına göre etkinleştirilmiş füzyon ailelerini çözer
  • model örneklendirilmeden önce maymun yamalarını ve kontrol noktası dönüşümlerini kaydeder
Update on GitHub