Buckets:

mishig's picture
|
download
raw
11 kB
# Başlangıç
Kantizasyon, orijinal verinin hassasiyetini korumaya çalışırken veriyi daha az bit ile temsil etmeye odaklanır. Bu genellikle, aynı bilgiyi daha az bit ile temsil etmek için bir veri türünü dönüştürmek anlamına gelir. Örneğin, model ağırlıklarınız 32 bit kayan nokta olarak saklanıyor ve 16 bit kayan nokta olarak kantize ediliyorsa, bu model boyutunu yarıya indirir; bu da depolamayı kolaylaştırır ve bellek kullanımını azaltır. Daha düşük hassasiyet, daha az bit ile hesaplamaların yapılması daha az zaman aldığı için çıkarımı da hızlandırabilir.
Diffusers, [Flux](../api/pipelines/flux) gibi büyük difüzyon modellerinin daha erişilebilir hale getirilmesi için birden fazla kuantizasyon arka ucunu destekler. Bu kılavuz, bir pipeline'ın önceden eğitilmiş veya kuantize edilmemiş bir checkpoint'ten başlatılırken [PipelineQuantizationConfig](/docs/diffusers/main/tr/api/quantization#diffusers.PipelineQuantizationConfig) sınıfını kullanarak nasıl kuantize edileceğini gösterir.
## Hattın seviyesinde kuantizasyon
Kantizasyon yapılandırmasına ne kadar özelleştirme uygulamak istediğinize bağlı olarak [PipelineQuantizationConfig](/docs/diffusers/main/tr/api/quantization#diffusers.PipelineQuantizationConfig)'i kullanmanın iki yolu vardır.
- temel kullanım senaryoları için `quant_backend`, `quant_kwargs` ve `components_to_quantize` argümanlarını tanımlayın
- daha ince ayarlı kuantizasyon kontrolü için, bireysel model bileşenleri için kuantizasyon yapılandırmasını sağlayan bir `quant_mapping` tanımlayın
### Temel kuantizasyon
Aşağıdaki parametrelerle [PipelineQuantizationConfig](/docs/diffusers/main/tr/api/quantization#diffusers.PipelineQuantizationConfig) sınıfını başlatın.
- `quant_backend`, kullanılacak kuantizasyon arka ucunu belirtir. Şu anda desteklenen arka uçlar şunlardır: `bitsandbytes_4bit`, `bitsandbytes_8bit`, `gguf`, `quanto` ve `torchao`.
- `quant_kwargs`, kullanılacak kuantizasyon argümanlarını belirtir.
> [!TIP]
> Bu `quant_kwargs` argümanları her backend için farklıdır. Her backend için argümanları görüntülemek için [Quantization API](../api/quantization) belgelerine başvurun.
- `components_to_quantize`, pipeline'in hangi bileşenlerinin (bileşenlerin) kuantize edileceğini belirtir. Genellikle, transformer gibi en yoğun hesaplama gerektiren bileşenleri kuantize etmeniz gerekir. [FluxPipeline](/docs/diffusers/main/tr/api/pipelines/flux#diffusers.FluxPipeline) gibi birden fazla metin kodlayıcı içeren bir pipeline varsa, kuantize edilecek diğer bir bileşen olarak metin kodlayıcıyı da değerlendirmeniz gerekir. Aşağıdaki örnek, [FluxPipeline](/docs/diffusers/main/tr/api/pipelines/flux#diffusers.FluxPipeline) içindeki T5 metin kodlayıcıyı kuantize ederken CLIP modelini olduğu gibi bırakır.
`components_to_quantize`, birden fazla model için bir liste veya tek bir model için bir dize kabul eder.
Aşağıdaki örnek, [BitsAndBytesConfig](/docs/diffusers/main/tr/api/quantization#diffusers.BitsAndBytesConfig) içinden `load_in_4bit`, `bnb_4bit_quant_type` ve `bnb_4bit_compute_dtype` argümanlarıyla bitsandbytes arka ucunu yükler.
```py
import torch
from diffusers import DiffusionPipeline
from diffusers.quantizers import PipelineQuantizationConfig
pipeline_quant_config = PipelineQuantizationConfig(
quant_backend="bitsandbytes_4bit",
quant_kwargs={"load_in_4bit": True, "bnb_4bit_quant_type": "nf4", "bnb_4bit_compute_dtype": torch.bfloat16},
components_to_quantize=["transformer", "text_encoder_2"],
)
```
Hattı (pipeline) nicelleştirmek (quantize) için `pipeline_quant_config` değerini [from_pretrained()](/docs/diffusers/main/tr/api/pipelines/overview#diffusers.DiffusionPipeline.from_pretrained) fonksiyonuna iletin.
```py
pipe = DiffusionPipeline.from_pretrained(
"black-forest-labs/FLUX.1-dev",
quantization_config=pipeline_quant_config,
dtype=torch.bfloat16,
).to("cuda") # or "mps", "xpu", "cpu"
image = pipe("photo of a cute dog").images[0]
```
### Gelişmiş kuantizasyon
`quant_mapping` argümanı, bir iş akışındaki her bir bileşenin nasıl nicelendirileceğine dair daha fazla seçenek sunar; örneğin farklı nicelendirme altyapılarını birleştirmek gibi.
[PipelineQuantizationConfig](/docs/diffusers/main/tr/api/quantization#diffusers.PipelineQuantizationConfig) nesnesini başlatın ve ona bir `quant_mapping` iletin. `quant_mapping`, pipeline'daki transformer ve metin kodlayıcı gibi her bir bileşen için kuantizasyon seçeneklerini belirtmenizi sağlar.
Aşağıdaki örnek, transformer ve metin kodlayıcı için iki kuantizasyon arka ucunu, [QuantoConfig](/docs/diffusers/main/tr/api/quantization#diffusers.QuantoConfig) ve [transformers.BitsAndBytesConfig](https://huggingface.co/docs/transformers/main/en/main_classes/quantization#transformers.BitsAndBytesConfig)'i kullanır.
```py
import torch
from diffusers import DiffusionPipeline
from diffusers import BitsAndBytesConfig as DiffusersBitsAndBytesConfig
from diffusers.quantizers.quantization_config import QuantoConfig
from diffusers.quantizers import PipelineQuantizationConfig
from transformers import BitsAndBytesConfig as TransformersBitsAndBytesConfig
pipeline_quant_config = PipelineQuantizationConfig(
quant_mapping={
"transformer": QuantoConfig(weights_dtype="int8"),
"text_encoder_2": TransformersBitsAndBytesConfig(
load_in_4bit=True, compute_dtype=torch.bfloat16
),
}
)
```
[Transformers](https://huggingface.co/docs/transformers/main_classes/quantization#transformers.BitsAndBytesConfig) içinde ayrı bir bitsandbytes arka ucu bulunur. Transformers'tan gelen bileşenler için [transformers.BitsAndBytesConfig](https://huggingface.co/docs/transformers/main/en/main_classes/quantization#transformers.BitsAndBytesConfig) içe aktarıp kullanmanız gerekir. Örneğin, [FluxPipeline](/docs/diffusers/main/tr/api/pipelines/flux#diffusers.FluxPipeline) içindeki `text_encoder_2`, Transformers'tan bir [T5EncoderModel](https://huggingface.co/docs/transformers/main/en/model_doc/t5#transformers.T5EncoderModel) olduğu için [diffusers.BitsAndBytesConfig](/docs/diffusers/main/tr/api/quantization#diffusers.BitsAndBytesConfig) yerine [transformers.BitsAndBytesConfig](https://huggingface.co/docs/transformers/main/en/main_classes/quantization#transformers.BitsAndBytesConfig) kullanmanız gerekir.
> [!TIP]
> Bu ayrı importları yönetmek istemiyorsanız veya her pipeline bileşeninin nereden geldiğinden emin değilseniz, yukarıdaki [temel kuantizasyon](#basic-quantization) yöntemini kullanın.
```py
import torch
from diffusers import DiffusionPipeline
from diffusers import BitsAndBytesConfig as DiffusersBitsAndBytesConfig
from diffusers.quantizers import PipelineQuantizationConfig
from transformers import BitsAndBytesConfig as TransformersBitsAndBytesConfig
pipeline_quant_config = PipelineQuantizationConfig(
quant_mapping={
"transformer": DiffusersBitsAndBytesConfig(load_in_4bit=True, bnb_4bit_compute_dtype=torch.bfloat16),
"text_encoder_2": TransformersBitsAndBytesConfig(
load_in_4bit=True, compute_dtype=torch.bfloat16
),
}
)
```
Hattı (pipeline) nicelleştirmek (quantize) için `pipeline_quant_config` değerini [from_pretrained()](/docs/diffusers/main/tr/api/pipelines/overview#diffusers.DiffusionPipeline.from_pretrained) fonksiyonuna iletin.
```py
pipe = DiffusionPipeline.from_pretrained(
"black-forest-labs/FLUX.1-dev",
quantization_config=pipeline_quant_config,
dtype=torch.bfloat16,
).to("cuda") # or "mps", "xpu", "cpu"
image = pipe("photo of a cute dog").images[0]
```
## Önceden kuantize edilmiş kontrol noktalarını yükleme
Bazı kuantizasyon arka uçları, Hub'a zaten kuantize edilmiş olarak yüklenmiş kontrol noktalarını (checkpoint) yüklemeyi destekler. Bu durumda, kuantizasyon yapılandırması modelin `config.json` dosyasında saklanır ve otomatik olarak okunur — bir [PipelineQuantizationConfig](/docs/diffusers/main/tr/api/quantization#diffusers.PipelineQuantizationConfig) oluşturmanıza veya `quantization_config` argümanını iletmenize gerek yoktur.
```py
import torch
from diffusers import DiffusionPipeline
pipe = DiffusionPipeline.from_pretrained(
"rootonchair/ERNIE-Image-Turbo-nunchaku-lite-nvfp4",
dtype=torch.bfloat16,
).to("cuda") # or "mps", "xpu", "cpu"
```
Aşağıdaki arka uçlar, önceden kantlanmış kontrol noktalarını kutudan çıktığı gibi yüklemeyi destekler.
| Arka uç | Notlar |
|---|---|
| [bitsandbytes](./bitsandbytes) | Config, `config.json` dosyasında saklanır; ek argüman gerekmez. Hem anlık olarak nicelleştirmeyi hem de önceden nicelleştirilmiş checkpoint'leri yüklemeyi destekler. |
| [torchao](./torchao) | Yukarıdakiyle aynı. |
| [GGUF](./gguf) | Model sınıflarıyla `from_single_file` kullanır; pipeline düzeyinde yükleme desteklenmez. |
| [BFL](./bfl) | Black Forest Labs `fp8r` ve `nvfp4` tek dosyalık checkpoint'leri `from_single_file` ile yükler; pipeline düzeyinde yükleme desteklenmez. |
| [AutoRound](./autoround) | Yalnızca yükleme desteklenir; önce AutoRound CLI veya Python API ile kuantizasyon yapın. |
| [Nunchaku Lite](./nunchaku) | Config, `config.json` dosyasında saklanır; `kernels` paketi gerektirir. Yalnızca yükleme desteklenir. |
| [ModelOpt](./modelopt) | Yalnızca önceden kuantize edilmiş modellerin yüklenmesi desteklenir. |
| [SDNQ](./sdnq) | Hem anlık kuantizasyonu hem de önceden kuantize edilmiş modellerin yüklenmesini destekler; `sdnq` paketini gerektirir. |
## Kaynaklar
Quantization hakkında daha fazla bilgi edinmek için aşağıdaki kaynaklara göz atın.
- Eğer kuantizasyona yeniyseniz, DeepLearning.AI iş birliğiyle hazırlanan ve başlangıç seviyesine uygun aşağıdaki kurslara göz atmanızı öneririz.
- [Hugging Face ile Kuantizasyon Temelleri](https://www.deeplearning.ai/short-courses/quantization-fundamentals-with-hugging-face/)
- [Derinlemesine Kuantizasyon](https://www.deeplearning.ai/short-courses/quantization-in-depth/)
- Yeni bir kuantizasyon yöntemi eklemekle ilgileniyorsanız, [Yeni kuantizasyon yöntemi katkı rehberi](https://huggingface.co/docs/transformers/main/en/quantization/contribute)ne başvurun.
- Transformers kuantizasyonu [Genel Bakış](https://huggingface.co/docs/transformers/quantization/overview#when-to-use-what) sayfası, farklı kuantizleme altyapılarının avantaj ve dezavantajlarına genel bir bakış sunar.
- Her bir kuantizasyon arka ucuna kısa bir giriş, bir arka uç seçme yöntemi ve kuantizasyonun diğer bellek optimizasyonlarıyla birleştirilmesi hakkında bilgi için [Diffusers'ta Kuantizasyon Arka Uçlarını Keşfetme](https://huggingface.co/blog/diffusers-quantization) blog yazısını okuyun.

Xet Storage Details

Size:
11 kB
·
Xet hash:
818c044e7c802bf51615c51ef2ca01a39ee45094504ac22359ef0d04472f2481

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.