Diffusers documentation

Dikkat arka uçları

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

and get access to the augmented documentation experience

to get started

Dikkat arka uçları

Dikkat yönlendirici (attention dispatcher) deneysel bir özelliktir. Herhangi bir geri bildiriminiz varsa veya sorunlarla karşılaşırsanız lütfen bir sorun (issue) açın.

Diffusers, dikkat yönlendiricisi aracılığıyla daha az bellek ve hesaplama gerektiren çeşitli optimize edilmiş dikkat algoritmaları sunar. Yönlendirici, farklı dikkat uygulamaları arasında yönetimi ve geçişi sağlamak için bir yönlendirici olarak çalışır ve bunlarla etkileşim için birleşik bir arayüz sunar.

Mevcut dikkat ailelerinin genel bir bakış için aşağıdaki tabloya, daha eksiksiz bir liste için ise Mevcut arka uçlar bölümüne başvurun.

attention ailesiana özellik
FlashAttentiondöşeme ve yeniden hesaplama yoluyla bellek okuma/yazma işlemlerini en aza indirir
ROCm için AI Tensor MotoruAMD ROCm hızlandırıcıları için optimize edilmiş FlashAttention uygulaması
SageAttentiondikkati int8'e kuantize eder
PyTorch yerliscaled_dot_product_attention kullanan yerleşik PyTorch uygulaması
xFormersçeşitli dikkat çekirdekleri için destek içeren bellek-verimli dikkat

Bu kılavuz, farklı dikkat (attention) arka uçlarını (backends) nasıl ayarlayıp kullanacağınızı gösterecektir.

set_attention_backend

set_attention_backend() metodu, modeldeki tüm modülleri iterasyonla gezer ve kullanılacak uygun dikkat (attention) arka ucunu ayarlar. Dikkat arka ucu ayarı, reset_attention_backend() çağrılana kadar geçerliliğini korur.

Aşağıdaki örnek, kernels kütüphanesinden FlashAttention-3 için _flash_3_hub uygulamasını nasıl etkinleştirebileceğinizi gösterir; bu sayede herhangi bir kurulum gerektirmeden Hub'daki optimize edilmiş hesaplama çekirdeklerini anında kullanabilirsiniz.

FlashAttention-3 en az Ampere GPU'ları gerektirir.

import torch
from diffusers import QwenImagePipeline

pipeline = QwenImagePipeline.from_pretrained(
    "Qwen/Qwen-Image", dtype=torch.bfloat16, device_map="cuda"  # or "mps", "xpu", "cpu"
)
pipeline.transformer.set_attention_backend("_flash_3_hub")

prompt = """
cinematic film still of a cat sipping a margarita in a pool in Palm Springs, California
highly detailed, high budget hollywood movie, cinemascope, moody, epic, gorgeous, film grain
"""
pipeline(prompt).images[0]

Varsayılan dikkat arka ucunu geri yüklemek için reset_attention_backend() çağrısını yapın.

pipeline.transformer.reset_attention_backend()

attention_backend bağlam yöneticisi

attention_backend bağlam yöneticisi, bir model için bir dikkat (attention) arka ucunu bağlam içinde geçici olarak ayarlar. Bağlam dışında, varsayılan dikkat (PyTorch’un yerleşik ölçekli nokta çarpımı dikkati) kullanılır. Bir iş akışının farklı bölümleri için farklı arka uçlar kullanmak veya farklı arka uçları test etmek istiyorsanız bu işe yarar.

import torch
from diffusers import QwenImagePipeline

pipeline = QwenImagePipeline.from_pretrained(
    "Qwen/Qwen-Image", dtype=torch.bfloat16, device_map="cuda"  # or "mps", "xpu", "cpu"
)
prompt = """
cinematic film still of a cat sipping a margarita in a pool in Palm Springs, California
highly detailed, high budget hollywood movie, cinemascope, moody, epic, gorgeous, film grain
"""

with attention_backend("_flash_3_hub"):
    image = pipeline(prompt).images[0]

Çoğu dikkat (attention) arka ucu, grafik kırılmaları olmadan torch.compile destekler ve çıkarımı (inference) daha da hızlandırmak için kullanılabilir.

Uzak çekirdeklere güvenme

Hub arka uçları ve diğer çekirdek destekli özellikler (örneğin GGUF ve Nunchaku Lite), hesaplama çekirdeklerini kernels ile Hub'dan indirir ve kodlarını yerel olarak çalıştırır.

Varsayılan olarak kernels, yalnızca Hub'da güvenilir bir çekirdek yayıncısı tarafından yayınlandığında bir çekirdeği yükler. kernels-community kuruluşu altında yayınlanan çekirdekler güvenilirdir, bu nedenle Diffusers bunları ek bir yapılandırma gerektirmeden yükler. _flash_3_hub, flash_hub, sage_hub ve diğer Hub dikkat arka uçlarının tümü kernels-community depolarına çözümlenir.

Diğer yayıncılardan gelen çekirdekler denetlenmez. Bunlardan birini yüklemek, Diffusers'ın garantisi olmayan kodu indirir ve çalıştırır; bu nedenle Diffusers, DIFFUSERS_TRUST_REMOTE_KERNELS ortam değişkeniyle açıkça onay vermedikçe bu özelliği devre dışı bırakır. Bu değişken ayarlandığında, Diffusers kernels bileşenine trust_remote_code=True parametresini iletir ve böylece güvenilmeyen yayıncılardan da çekirdekler yüklenir.

export DIFFUSERS_TRUST_REMOTE_KERNELS=true

Bu ayarı, çekirdek deposunu inceledikten sonra etkinleştirin; çünkü indirilen kodun makinenizde çalışmasına izin verir. Bu ayar olmadan, güvenilir olmayan bir yayıncıdan çekirdek yüklenmeye çalışıldığında bir hata oluşur. Diffusers bu kontrolü kendisi yaptığından, bu kural trust_remote_code argümanından önce gelen kernels<0.14.0 sürümü için de geçerlidir. DIFFUSERS_DISABLE_REMOTE_CODE=true değerini ayarlamak, uzak kodu küresel olarak devre dışı bırakır ve DIFFUSERS_TRUST_REMOTE_KERNELS değişkenine öncelik tanır.

Kontroller

Dikkat yönlendiricisi, sorunlara yol açmadan önce yaygın hataları yakalayan hata ayıklama kontrolleri içerir.

  1. Device checks, sorgu, anahtar ve değer tensörlerinin aynı cihazda bulunduğunu doğrular.
  2. Veri türü kontrolleri, tensörlerin eşleşen dtypes'a sahip olduğunu ve bfloat16 veya float16 kullanıldığını doğrular.
  3. Shape checks, tensor boyutlarını doğrular ve dikkat maskelerinin nedensel bayraklarla karıştırılmasını önler.

Bu kontrolleri etkinleştirmek için DIFFUSERS_ATTN_CHECKS ortam değişkenini ayarlayın. Kontroller her dikkat işleminde ek yük oluşturduğundan varsayılan olarak devre dışıdır.

export DIFFUSERS_ATTN_CHECKS=yes

Kontroller artık her dikkat (attention) işleminden önce çalıştırılır.

import torch

query = torch.randn(1, 10, 8, 64, dtype=torch.bfloat16, device="cuda")  # or "mps", "xpu", "cpu"
key = torch.randn(1, 10, 8, 64, dtype=torch.bfloat16, device="cuda")
value = torch.randn(1, 10, 8, 64, dtype=torch.bfloat16, device="cuda")

try:
    with attention_backend("flash"):
        output = dispatch_attention_fn(query, key, value)
        print("✓ Flash Attention works with checks enabled")
except Exception as e:
    print(f"✗ Flash Attention failed: {e}")

Ayrıca kayıt defterini doğrudan yapılandırabilirsiniz.

from diffusers.models.attention_dispatch import _AttentionBackendRegistry

_AttentionBackendRegistry._checks_enabled = True

Kullanılabilir arka uçlar

Mevcut dikkat (attention) arka uçlarının ve varyantlarının tam listesi için aşağıdaki tabloya bakın.

Expand
Arka Uygulama AdıAileAçıklama
nativePyTorch yerlisiPyTorch'un scaled_dot_product_attention'ını kullanan varsayılan backend
flexFlexAttentionPyTorch FlexAttention uygulaması
_native_cudnnPyTorch yerlisiCuDNN-optimize edilmiş dikkat
_native_efficientPyTorch yerlisiHafıza-verimli dikkat
_native_flashPyTorch yerlisiPyTorch’un FlashAttention’ı
_native_mathPyTorch yerlisiMatematik tabanlı dikkat (yedek)
_native_npuPyTorch yerlisiNPU-optimized dikkat
_native_xlaPyTorch yerlisiXLA-optimize edilmiş dikkat
flashFlashAttentionFlashAttention-2
flash_hubFlashAttentionÇekirdeklerden FlashAttention-2
flash_varlenFlashAttentionDeğişken uzunluklu FlashAttention
flash_varlen_hubFlashAttentionÇekirdeklerden değişken uzunluklu FlashAttention
aiter_fa2_hubROCm için AI Tensor Enginekernels'ten AMD ROCm için FlashAttention-2
aiter_sage_hubROCm için AI Tensor Enginekernels'ten AMD RDNA4 (gfx1201) için kuantize edilmiş dikkat (INT8 QK, FP8 PV)
flash_4_hubFlashAttentionFlashAttention-4
_flash_3FlashAttentionFlashAttention-3
_flash_varlen_3FlashAttentionDeğişken uzunluklu FlashAttention-3
_flash_3_hubFlashAttentionkernels'ten FlashAttention-3
_flash_3_varlen_hubFlashAttentionÇekirdeklerden değişken uzunluklu FlashAttention-3
sageSageAttentionKantize edilmiş dikkat (INT8 QK)
sage_hubSageAttentionÇekirdeklerden kuantize edilmiş dikkat (INT8 QK)
sage_blackwell_hubSageAttentionkernels'ten SM120 Blackwell GPU'lar için SageAttention3 FP4 dikkati
sage_varlenSageAttentionDeğişken uzunluklu SageAttention
_sage_qk_int8_pv_fp8_cudaSageAttentionINT8 QK + FP8 PV (CUDA)
_sage_qk_int8_pv_fp8_cuda_sm90SageAttentionINT8 QK + FP8 PV (SM90)
_sage_qk_int8_pv_fp16_cudaSageAttentionINT8 QK + FP16 PV (CUDA)
_sage_qk_int8_pv_fp16_tritonSageAttentionINT8 QK + FP16 PV (Triton)
xformersxFormersHafıza-verimli dikkat
Update on GitHub