Transformers documentation
Füzyon eşleme (deneysel özellik)
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:
- from_pretrained(), açık
fusion_configargümanını kullanır veyaconfig.fusion_configdeğerine geri döner. - Füzyon kayıt defteri, istenen füzyon adlarını doğrular.
- 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. - Fused replacement sınıfları register_patch_mapping() üzerinden kaydedilir.
- Yapılandırma dosyasından
~WeightTransformkuralları türetilir; böylece checkpoint yükleme işlemi, ağırlıkları birleştirilmiş çalışma zamanı yerleşimine eşleyebilir. - 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=Falseparametresini 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_embeddingsEtkinleştirme:fusion_config = {"patch_embeddings": True}Etki: Uygun
nn.Conv3dyama gömme projeksiyonlarını, çalışma zamanında eşdeğer düzleştirilmişnn.Linearprojeksiyonlarıyla değiştirir.
Füzyon eşlemesini genişletme
Yeni bir füzyon ailesi eklemek için:
is_fusablebir yargıç (predicate) ekleyin. Bu, keşfedilen bir modülün füzyonla uyumlu olup olmadığını belirler.- İsteğe bağlı olarak
target_modules_patternsekleyin. 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. make_fused_classfabrikası 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.- Füzyonlanmış yerleşim (fused layout) için kontrol noktası (checkpoint) dönüşümü gerekiyorsa bir
make_transformsfabrikası ekleyin. Bu, verilen bir yapılandırma için ağırlıkları orijinal ve füzyonlanmış yerleşimler arasında eşleyen~WeightTransformkurallarını döndürür. - Yeni
ModuleFusionSpec'ifusion_mapping.pydosyasına kaydedin.
Kayıt yapıldıktan sonra, yeni füzyon fusion_config üzerinden kullanılabilir hale gelir.
Dahili API
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.
Uygun modüller bulunamadığında yayımlanan günlük mesajını döndürür.
module'ün bu füzyon ailesiyle uyumlu olup olmadığını döndürür.
Uygun bir modül sınıfı için çalışma zamanı değiştirme sınıfını oluşturun.
Birleştirilmiş çalışma zamanı yerleşimini yüklemek ve kaydetmek için gereken ağırlık dönüşümlerini oluşturun.
Uyumluluk gösteren Conv3d yama gömme işlemlerini, düzleştirilmiş Linear projeksiyonlarına birleştirin.
transformers.fusion_mapping._register_module_fusion
< source >( 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
< source >( 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_REGISTRYile 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