Buckets:
| # SDNQ | |
| [SDNQ](https://github.com/Disty0/sdnq) (SD.Next Quantization), geniş bir ağırlık dtype aralığını (int8'den 2-bit'e kadar, FP8 ve diğer düşük bitlik float formatları) destekleyen, isteğe bağlı SVD düzeltmesi, Hadamard rotasyonu ve daha hızlı çıkarım için kuantize INT8/FP8 matmul içeren, eğitim gerektirmeyen bir kuantizasyon arka ucudur. CUDA, ROCm, XPU, MPS ve CPU üzerinde çalışır. | |
| Bu arka ucu kullanmak için `sdnq` kütüphanesini yükleyin. | |
| ```bash | |
| pip install sdnq | |
| ``` | |
| ## Önceden kuantize edilmiş bir kontrol noktası yükleyin | |
| Önceden kantize edilmiş bir SDNQ kontrol noktasının kantizasyon yapılandırması, `config.json` dosyasında saklanır; bu nedenle herhangi bir model gibi yüklenir ve `quantization_config` argümanı gerekmez. Tek gereklilik, `sdnq`'nin kurulu olmasıdır. | |
| ```python | |
| import torch | |
| from diffusers import DiffusionPipeline | |
| pipe = DiffusionPipeline.from_pretrained( | |
| "Disty0/Z-Image-Turbo-SDNQ-uint4-svd-r32", | |
| dtype=torch.bfloat16, | |
| ).to("cuda") # or "mps", "xpu", "cpu" | |
| image = pipe("a cat holding a sign that says hello").images[0] | |
| image.save("output.png") | |
| ``` | |
| > [!TIP] | |
| > SDNQ-kuantize edilmiş bir Transformers modelini, örneğin kuantize edilmiş bir metin kodlayıcıyı veya modüler bir boru hattında bağımsız bir LLM bileşenini, tek başına yüklediğinizde `DIFFUSERS_SDNQ_TRANSFORMERS=1` değerini (Diffusers içe aktarılmasından önce) ayarlayın. Bu, `sdnq`'nin Transformers ile kendini kaydetmesine ve kuantize edilmiş modelin doğru şekilde yüklenmesine olanak tanır. SDNQ-kuantize edilmiş bir diffusers transformer'ı bununla birlikte yüklendiğinde buna gerek yoktur, çünkü o transformer'ın yüklenmesi zaten `sdnq`'yi içe aktarır ve kaydeder. Varsayılan olarak kapalıdır, böylece SDNQ kullanmayan boru hatları asla `sdnq`'yi içe aktarmaz. | |
| ## Bir modeli anlık olarak kuantize edin | |
| Bir modeli yükleme sırasında nicelleştirmek için `from_pretrained` fonksiyonuna [SDNQConfig](/docs/diffusers/main/tr/api/quantization#diffusers.SDNQConfig) geçirin. Belirli pipeline bileşenlerini nicelleştirmek için [PipelineQuantizationConfig](/docs/diffusers/main/tr/api/quantization#diffusers.PipelineQuantizationConfig) kullanın. | |
| ```python | |
| import torch | |
| from diffusers import DiffusionPipeline, PipelineQuantizationConfig, SDNQConfig | |
| pipeline_quant_config = PipelineQuantizationConfig( | |
| quant_mapping={"transformer": SDNQConfig(weights_dtype="uint4", use_svd=True)} | |
| ) | |
| pipe = DiffusionPipeline.from_pretrained( | |
| "Tongyi-MAI/Z-Image-Turbo", | |
| quantization_config=pipeline_quant_config, | |
| dtype=torch.bfloat16, | |
| ).to("cuda") # or "mps", "xpu", "cpu" | |
| ``` | |
| Veya tek bir model bileşenini doğrudan kuantize edin. | |
| ```python | |
| import torch | |
| from diffusers import ZImageTransformer2DModel, SDNQConfig | |
| transformer = ZImageTransformer2DModel.from_pretrained( | |
| "Tongyi-MAI/Z-Image-Turbo", | |
| subfolder="transformer", | |
| quantization_config=SDNQConfig(weights_dtype="int8"), | |
| dtype=torch.bfloat16, | |
| ) | |
| ``` | |
| Tüm argümanlar [`sdnq.SDNQConfig`](https://github.com/Disty0/sdnq) sınıfına iletilir. Desteklenen dtype ve seçeneklerin tam listesi için SDNQ dokümantasyonuna başvurun. | |
| ## Hangi katmanların kuantize edileceğini seçme | |
| Bazı katmanlar diğerlerine göre kuantizasyona daha hassastır ve hassas olanların atlanması, hafif bir bellek maliyeti karşılığında kaliteyi artırır. SDNQ bunu kutudan çıktığı gibi ele alır: otomatik olarak uygulanan yerleşik atlama listeleri (genel bir liste ve birçok mimari için model bazlı listeler) ile birlikte gelir, böylece standart hassas katmanlar herhangi bir yapılandırma gerektirmeden kuantize edilmeden kalır. Daha ince kontrol için, katman başına kuantizasyon hatasını ölçüp kayıp eşiğinin üzerindeki katmanları atlayarak katmanları dinamik olarak seçebilir. Ayrıntılar için [SDNQ dinamik kuantizasyon kılavuzu](https://github.com/vladmandic/sdnext/wiki/SDNQ-Quantization#dynamic-loss-threshold)'na başvurun. | |
| ## Kantize matmul ile daha hızlı çıkarım | |
| Varsayılan olarak SDNQ, her matmul işleminden önce ağırlıkları hesaplama veri türüne (compute dtype) geri dönüştürür. Bunun yerine quantized matmul etkinleştirildiğinde, matmul işlemi doğrudan düşük hassasiyetli bir veri türünde (INT8/FP8/FP16) çalıştırılır; bu da çalışan bir [Triton](https://github.com/triton-lang/triton) kurulumuna sahip donanımlarda (CUDA, ROCm veya XPU) daha hızlıdır. | |
| Yüklenmiş bir modelde `apply_sdnq_options_to_model` ile etkinleştirin; bu fonksiyon modelin mevcut kuantizasyon yapılandırmasını okur ve seçeneği yerinde yeniden uygular. Bu, `SDNQConfig` geçirilmeyen önceden kuantize edilmiş kontrol noktaları için de geçerlidir. | |
| ```python | |
| import torch | |
| from diffusers import DiffusionPipeline | |
| from sdnq.common import use_torch_compile as triton_is_available | |
| from sdnq.loader import apply_sdnq_options_to_model | |
| pipe = DiffusionPipeline.from_pretrained( | |
| "Disty0/Z-Image-Turbo-SDNQ-uint4-svd-r32", | |
| dtype=torch.bfloat16, | |
| ).to("cuda") # or "mps", "xpu", "cpu" | |
| if triton_is_available and (torch.cuda.is_available() or torch.xpu.is_available()): | |
| pipe.transformer = apply_sdnq_options_to_model(pipe.transformer, use_quantized_matmul=True) | |
| pipe.text_encoder = apply_sdnq_options_to_model(pipe.text_encoder, use_quantized_matmul=True) | |
| ``` | |
| ## torch.compile | |
| SDNQ quantize edilmiş modeller, [group offloading](../optimization/memory#group-offloading) ile birlikte dahil olmak üzere ek hızlandırmalar için [torch.compile](../optimization/fp16#torchcompile) ile uyumludur. | |
| ```python | |
| transformer.compile(fullgraph=True) | |
| ``` | |
| ## Kantize edilmiş bir modeli kaydet | |
| Kantize modeller `save_pretrained` ile serialize edilebilir ve `quantization_config` olmadan yeniden yüklenebilir. | |
| ```python | |
| transformer.save_pretrained("z-image-turbo-sdnq-int8") | |
| ``` | |
| ## Kaynaklar | |
| - [SDNQ deposu](https://github.com/Disty0/sdnq) | |
| - [Hub'daki önceden kuantize edilmiş SDNQ modelleri](https://huggingface.co/models?search=sdnq) | |
Xet Storage Details
- Size:
- 6.09 kB
- Xet hash:
- 3ed56a564ee958d3bd843c1169b263f2a07e2ef94a3ba8c3f1c5d07d53eb2c05
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.