Buckets:
| # Kantize modelleri derleme ve aktarma | |
| Model optimizasyonu genellikle [çalıştırma hızı](./fp16) ile [ Bellek kullanımı](./memory) arasında ödünleşimler gerektirir. Örneğin, [önbelleğe alma](./cache) çalıştırma hızını artırabilir ancak ara dikkat katmanlarının çıktılarını depolaması gerektiğinden bellek tüketimini de artırır. Daha dengeli bir optimizasyon stratejisi, modelin kuantizlenmesi, [torch.compile](./fp16#torchcompile) ve çeşitli [aktarma yöntemleri](./memory#offloading) ile birleştirilir. | |
| > [!TIP] | |
| > Derleme ve bu derlemelerin burada nasıl uygulanabileceğini öğrenmek için [torch.compile](./fp16#torchcompile) kılavuzunu inceleyin. Örneğin, bölgesel derleme, hızlanmalardan vazgeçmeden derleme süresini önemli ölçüde azaltabilir. | |
| Görsel üretiminde, kuantizasyonun ve [model offloading](./memory#model-offloading)'in birleştirilmesi genellikle kalite, hız ve bellek arasında en iyi dengeyi sağlar. Grup offloading, hesaplama çekirdeği daha hızlı bittiyse veri aktarımının *tamamen* örtüşmesi genellikle mümkün olmadığından görsel üretimde o kadar etkili değildir. Bu durum, CPU ile GPU arasında bazı iletişim maliyetlerine yol açar. | |
| Video üretimi için, video modelleri daha çok hesaplama sınırlı olduğundan, kuantizasyonun ve [group-offloading](./memory#group-offloading)'in birleştirilmesi genellikle daha iyi sonuç verir. | |
| Aşağıdaki tablo, Flux için optimizasyon stratejisi kombinasyonlarını ve bunların gecikme ile bellek kullanımı üzerindeki etkilerini karşılaştırmaktadır. | |
| | kombinasyon | gecikme (s) | bellek-kullanımı (GB) | | |
| |---|---|---| | |
| | quantization | 32.602 | 14.9453 | | |
| | quantization, torch.compile | 25.847 | 14.9448 | | |
| | quantization, torch.compile, model CPU offloading | 32.312 | 12.2369 | | |
| Bu sonuçlar, RTX 4090 üzerinde Flux ile test edilmiştir. transformer ve text_encoder bileşenleri kuantize edilmiştir. Kendi modelinizi değerlendirmekle ilgileniyorsanız, test betiğine (benchmarking script) başvurun. | |
| Bu kılavuz, [bitsandbytes](../quantization/bitsandbytes#torchcompile) ile bir kuantize modelin nasıl derleneceğini ve offload edileceğini gösterecektir. [PyTorch nightly](https://pytorch.org/get-started/locally/) ve bitsandbytes'in en son sürümünü kullandığınızdan emin olun. | |
| Bu örnekte bitsandbytes kullanıyoruz, ancak [TorchAO](../quantization/torchao) gibi diğer kuantizasyon altyapıları da bu özellikleri destekler. | |
| ```bash | |
| pip install -U bitsandbytes | |
| ``` | |
| ## Quantization ve torch.compile | |
| Bir modelin bellek gereksinimini azaltmak için [kantizasyonunu](../quantization/overview) yapıp çıkarımı hızlandırmak için [derlemesini](./fp16#torchcompile) yaparak başlayın. | |
| bitsandbytes modellerini derlerken dinamik çıktıları işlemek için [Dynamo](https://docs.pytorch.org/docs/stable/torch.compiler_dynamo_overview.html) yapılandırmasını `capture_dynamic_output_shape_ops = True` olarak ayarlayın. | |
| ```py | |
| import torch | |
| from diffusers import DiffusionPipeline | |
| from diffusers.quantizers import PipelineQuantizationConfig | |
| torch._dynamo.config.capture_dynamic_output_shape_ops = True | |
| # quantize | |
| 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"], | |
| ) | |
| pipeline = DiffusionPipeline.from_pretrained( | |
| "black-forest-labs/FLUX.1-dev", | |
| quantization_config=pipeline_quant_config, | |
| dtype=torch.bfloat16, | |
| ).to("cuda") # or "mps", "xpu", "cpu" | |
| # compile | |
| pipeline.transformer.to(memory_format=torch.channels_last) | |
| pipeline.transformer.compile(mode="max-autotune", fullgraph=True) | |
| pipeline(""" | |
| 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 | |
| """ | |
| ).images[0] | |
| ``` | |
| ## Kantizasyon, torch.compile ve offloading | |
| Kantizasyon ve torch.compile'in yanı sıra, bellek kullanımını daha da azaltmanız gerekiyorsa offloading'i deneyin. Offloading, hesaplama gereksinimlerine göre çeşitli katmanları veya model bileşenlerini CPU'dan GPU'ya taşır. | |
| Offloading sırasında aşırı yeniden derlemeyi önlemek için [Dynamo](https://docs.pytorch.org/docs/stable/torch.compiler_dynamo_overview.html) `cache_size_limit` değerini yapılandırın ve bitsandbytes modellerini derlerken dinamik çıktıları işlemek için `capture_dynamic_output_shape_ops = True` ayarlayın. | |
| [Model CPU offloading](./memory#model-offloading), transformer modeli gibi bireysel bir pipeline bileşenini, hesaplama için gerektiğinde GPU'ya taşır. Aksi takdirde, bileşen CPU'ya aktarılır. | |
| ```py | |
| import torch | |
| from diffusers import DiffusionPipeline | |
| from diffusers.quantizers import PipelineQuantizationConfig | |
| torch._dynamo.config.cache_size_limit = 1000 | |
| torch._dynamo.config.capture_dynamic_output_shape_ops = True | |
| # quantize | |
| 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"], | |
| ) | |
| pipeline = DiffusionPipeline.from_pretrained( | |
| "black-forest-labs/FLUX.1-dev", | |
| quantization_config=pipeline_quant_config, | |
| dtype=torch.bfloat16, | |
| ).to("cuda") # or "mps", "xpu", "cpu" | |
| # model CPU offloading | |
| pipeline.enable_model_cpu_offload() | |
| # compile | |
| pipeline.transformer.compile() | |
| pipeline( | |
| "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" | |
| ).images[0] | |
| ``` | |
| [Grup dışa aktarma](./memory#group-offloading), transformer modeli gibi tek bir pipeline bileşeninin iç katmanlarını hesaplama için GPU'ya taşır ve gerekmediğinde dışa aktarır. Aynı zamanda, bir sonraki katmanı çalıştırma için önceden yüklemek üzere [CUDA stream](./memory#cuda-stream) özelliğini kullanır. | |
| Hesaplama ve veri aktarımını üst üste bindirerek, model CPU dışa aktarımından daha hızlıdır ve aynı zamanda bellek tasarrufu sağlar. | |
| ```py | |
| # pip install ftfy | |
| import torch | |
| from diffusers import AutoModel, DiffusionPipeline | |
| from diffusers.hooks import apply_group_offloading | |
| from diffusers.utils import export_to_video | |
| from diffusers.quantizers import PipelineQuantizationConfig | |
| from transformers import UMT5EncoderModel | |
| torch._dynamo.config.cache_size_limit = 1000 | |
| torch._dynamo.config.capture_dynamic_output_shape_ops = True | |
| # quantize | |
| 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"], | |
| ) | |
| text_encoder = UMT5EncoderModel.from_pretrained( | |
| "Wan-AI/Wan2.1-T2V-14B-Diffusers", subfolder="text_encoder", dtype=torch.bfloat16 | |
| ) | |
| pipeline = DiffusionPipeline.from_pretrained( | |
| "Wan-AI/Wan2.1-T2V-14B-Diffusers", | |
| quantization_config=pipeline_quant_config, | |
| dtype=torch.bfloat16, | |
| ).to("cuda") # or "mps", "xpu", "cpu" | |
| # group offloading | |
| onload_device = torch.device("cuda") | |
| offload_device = torch.device("cpu") | |
| pipeline.transformer.enable_group_offload( | |
| onload_device=onload_device, | |
| offload_device=offload_device, | |
| offload_type="leaf_level", | |
| use_stream=True, | |
| non_blocking=True | |
| ) | |
| pipeline.vae.enable_group_offload( | |
| onload_device=onload_device, | |
| offload_device=offload_device, | |
| offload_type="leaf_level", | |
| use_stream=True, | |
| non_blocking=True | |
| ) | |
| apply_group_offloading( | |
| pipeline.text_encoder, | |
| onload_device=onload_device, | |
| offload_type="leaf_level", | |
| use_stream=True, | |
| non_blocking=True | |
| ) | |
| # compile | |
| pipeline.transformer.compile() | |
| prompt = """ | |
| The camera rushes from far to near in a low-angle shot, | |
| revealing a white ferret on a log. It plays, leaps into the water, and emerges, as the camera zooms in | |
| for a close-up. Water splashes berry bushes nearby, while moss, snow, and leaves blanket the ground. | |
| Birch trees and a light blue sky frame the scene, with ferns in the foreground. Side lighting casts dynamic | |
| shadows and warm highlights. Medium composition, front view, low angle, with depth of field. | |
| """ | |
| negative_prompt = """ | |
| Bright tones, overexposed, static, blurred details, subtitles, style, works, paintings, images, static, overall gray, worst quality, | |
| low quality, JPEG compression residue, ugly, incomplete, extra fingers, poorly drawn hands, poorly drawn faces, deformed, disfigured, | |
| misshapen limbs, fused fingers, still picture, messy background, three legs, many people in the background, walking backwards | |
| """ | |
| output = pipeline( | |
| prompt=prompt, | |
| negative_prompt=negative_prompt, | |
| num_frames=81, | |
| guidance_scale=5.0, | |
| ).frames[0] | |
| export_to_video(output, "output.mp4", fps=16) | |
| ``` | |
Xet Storage Details
- Size:
- 9.08 kB
- Xet hash:
- 5b28e7f2cb62ca693a9478d0211fba5b4f4ef39197078d77d004a6486abec436
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.