Buckets:
| # Quanto | |
| > [!WARNING] | |
| > Backend Quanto telah ditinggalkan dan akan dihapus pada versi 1.0.0. Pertimbangkan untuk beralih ke salah satu [backend kuantisasi](./overview) lain yang didukung, seperti [bitsandbytes](./bitsandbytes) atau [torchao](./torchao). | |
| [Quanto](https://github.com/huggingface/optimum-quanto) adalah backend kuantisasi PyTorch untuk [Optimum](https://huggingface.co/docs/optimum/en/index). Ia dirancang dengan mempertimbangkan fleksibilitas dan kesederhanaan: | |
| - Semua fitur tersedia dalam mode eager (berfungsi dengan model yang tidak dapat dilacak) | |
| - Mendukung pelatihan yang sadar kuantisasi | |
| - Model terkuantisasi kompatibel dengan `torch.compile` | |
| - Model terkuantisasi bersifat tidak bergantung pada perangkat (misalnya CUDA, XPU, MPS, CPU) | |
| Untuk menggunakan backend Quanto, Anda perlu menginstal `optimum-quanto>=0.2.6` dan `accelerate` terlebih dahulu. | |
| ```shell | |
| pip install optimum-quanto accelerate | |
| ``` | |
| Sekarang Anda dapat mengkuantisasi model dengan meneruskan objek `QuantoConfig` ke metode `from_pretrained()`. Meskipun pustaka Quanto mengizinkan pengkuantisasian modul `nn.Conv2d` dan `nn.LayerNorm`, saat ini Diffusers hanya mendukung pengkuantisasian bobot pada lapisan `nn.Linear` dari sebuah model. Cuplikan berikut menunjukkan cara menerapkan kuantisasi `float8` dengan Quanto. | |
| ```python | |
| import torch | |
| from diffusers import FluxTransformer2DModel, QuantoConfig | |
| model_id = "black-forest-labs/FLUX.1-dev" | |
| quantization_config = QuantoConfig(weights_dtype="float8") | |
| transformer = FluxTransformer2DModel.from_pretrained( | |
| model_id, | |
| subfolder="transformer", | |
| quantization_config=quantization_config, | |
| dtype=torch.bfloat16, | |
| ) | |
| pipe = FluxPipeline.from_pretrained(model_id, transformer=transformer, dtype=dtype) | |
| pipe.to("cuda") # or "mps", "xpu", "cpu" | |
| prompt = "A cat holding a sign that says hello world" | |
| image = pipe( | |
| prompt, num_inference_steps=50, guidance_scale=4.5, max_sequence_length=512 | |
| ).images[0] | |
| image.save("output.png") | |
| ``` | |
| ## Mengabaikan Kuantisasi pada modul tertentu | |
| Anda dapat melewati penerapan kuantisasi pada modul tertentu dengan menggunakan argumen `modules_to_not_convert` di `QuantoConfig`. Pastikan modul yang diteruskan ke argumen ini sesuai dengan kunci modul di `state_dict` | |
| ```python | |
| import torch | |
| from diffusers import FluxTransformer2DModel, QuantoConfig | |
| model_id = "black-forest-labs/FLUX.1-dev" | |
| quantization_config = QuantoConfig(weights_dtype="float8", modules_to_not_convert=["proj_out"]) | |
| transformer = FluxTransformer2DModel.from_pretrained( | |
| model_id, | |
| subfolder="transformer", | |
| quantization_config=quantization_config, | |
| dtype=torch.bfloat16, | |
| ) | |
| ``` | |
| ## Menggunakan `from_single_file` dengan Backend Quanto | |
| `QuantoConfig` kompatibel dengan `~FromOriginalModelMixin.from_single_file`. | |
| ```python | |
| import torch | |
| from diffusers import FluxTransformer2DModel, QuantoConfig | |
| ckpt_path = "https://huggingface.co/black-forest-labs/FLUX.1-dev/blob/main/flux1-dev.safetensors" | |
| quantization_config = QuantoConfig(weights_dtype="float8") | |
| transformer = FluxTransformer2DModel.from_single_file(ckpt_path, quantization_config=quantization_config, dtype=torch.bfloat16) | |
| ``` | |
| ## Menyimpan model terkuantisasi | |
| Diffusers mendukung serialisasi model Quanto menggunakan metode `~ModelMixin.save_pretrained`. | |
| Persyaratan serialisasi dan pemuatan berbeda untuk model yang dikuantisasi langsung dengan pustaka Quanto dan model yang dikuantisasi dengan Diffusers menggunakan Quanto sebagai backend. Saat ini, tidak mungkin memuat model yang dikuantisasi langsung dengan Quanto ke dalam Diffusers menggunakan `~ModelMixin.from_pretrained` | |
| ```python | |
| import torch | |
| from diffusers import FluxTransformer2DModel, QuantoConfig | |
| model_id = "black-forest-labs/FLUX.1-dev" | |
| quantization_config = QuantoConfig(weights_dtype="float8") | |
| transformer = FluxTransformer2DModel.from_pretrained( | |
| model_id, | |
| subfolder="transformer", | |
| quantization_config=quantization_config, | |
| dtype=torch.bfloat16, | |
| ) | |
| # save quantized model to reuse | |
| transformer.save_pretrained("<your quantized model save path>") | |
| # you can reload your quantized model with | |
| model = FluxTransformer2DModel.from_pretrained("<your quantized model save path>") | |
| ``` | |
| ## Menggunakan `torch.compile` dengan Quanto | |
| Saat ini backend Quanto mendukung `torch.compile` untuk tipe kuantisasi berikut: | |
| - Bobot `int8` | |
| ```python | |
| import torch | |
| from diffusers import FluxPipeline, FluxTransformer2DModel, QuantoConfig | |
| model_id = "black-forest-labs/FLUX.1-dev" | |
| quantization_config = QuantoConfig(weights_dtype="int8") | |
| transformer = FluxTransformer2DModel.from_pretrained( | |
| model_id, | |
| subfolder="transformer", | |
| quantization_config=quantization_config, | |
| dtype=torch.bfloat16, | |
| ) | |
| transformer = torch.compile(transformer, mode="max-autotune", fullgraph=True) | |
| pipe = FluxPipeline.from_pretrained( | |
| model_id, transformer=transformer, dtype=dtype | |
| ) | |
| pipe.to("cuda") # or "mps", "xpu", "cpu" | |
| images = pipe("A cat holding a sign that says hello").images[0] | |
| images.save("flux-quanto-compile.png") | |
| ``` | |
| ## Jenis Kuantisasi yang Didukung | |
| ### Bobot | |
| - float8 | |
| - int8 | |
| - int4 | |
| - int2 | |
Xet Storage Details
- Size:
- 5.13 kB
- Xet hash:
- 6a3c8371921ae6220a064bee93e439501842d8a85f64ac41c58d5331f2e70d47
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.