Buckets:
| # 시작하기 | |
| Quantization은 원래 데이터의 정밀도를 유지하면서 더 적은 비트로 데이터를 표현하는 데 초점을 맞춥니다. 이는 일반적으로 동일한 정보를 더 적은 비트로 표현하기 위해 데이터 유형을 변환하는 것을 의미합니다. 예를 들어, 모델 가중치가 32비트 부동소수점으로 저장되어 있고 이를 16비트 부동소수점으로 양자화하면 모델 크기가 절반으로 줄어 저장하기가 쉬워지고 메모리 사용량이 감소합니다. 더 낮은 정밀도는 더 적은 비트로 계산을 수행하는 데 시간이 덜 걸리기 때문에 추론 속도도 향상시킬 수 있습니다. | |
| Diffusers는 [Flux](../api/pipelines/flux)와 같은 대규모 diffusion 모델을 보다 쉽게 사용할 수 있도록 여러 quantization backends를 지원합니다. 이 가이드에서는 사전 학습된 체크포인트나 비양자화 체크포인트에서 파이프라인을 초기화하는 동안 [PipelineQuantizationConfig](/docs/diffusers/main/ko/api/quantization#diffusers.PipelineQuantizationConfig) 클래스를 사용하여 파이프라인을 양자화하는 방법을 보여줍니다. | |
| ## Pipeline-level 양자화 | |
| 양자화 설정에 적용할 커스터마이징 수준에 따라 [PipelineQuantizationConfig](/docs/diffusers/main/ko/api/quantization#diffusers.PipelineQuantizationConfig)를 사용하는 방법은 두 가지가 있습니다. | |
| - 기본 사용 사례의 경우 `quant_backend`, `quant_kwargs`, `components_to_quantize` 인수를 정의합니다 | |
| - 세밀한 양자화 제어를 위해 개별 모델 구성 요소에 대한 양자화 구성을 제공하는 `quant_mapping`을 정의합니다 | |
| ### 기본 양자화 | |
| 다음 매개변수로 [PipelineQuantizationConfig](/docs/diffusers/main/ko/api/quantization#diffusers.PipelineQuantizationConfig)를 초기화합니다. | |
| - `quant_backend`는 사용할 양자화 백엔드를 지정합니다. 현재 지원되는 백엔드에는 `bitsandbytes_4bit`, `bitsandbytes_8bit`, `gguf`, `quanto`, `torchao`가 있습니다. | |
| - `quant_kwargs`는 사용할 양자화 인수를 지정합니다. | |
| > [!TIP] | |
| > 이 `quant_kwargs` 인수는 백엔드마다 다릅니다. 각 백엔드의 인수를 보려면 [Quantization API](../api/quantization) 문서를 참조하세요. | |
| - `components_to_quantize`는 파이프라인의 어떤 구성 요소를 양자화할지 지정합니다. 일반적으로 Transformer와 같이 계산 집약적인 구성 요소를 양자화해야 합니다. [FluxPipeline](/docs/diffusers/main/ko/api/pipelines/flux#diffusers.FluxPipeline)처럼 텍스트 인코더가 여러 개 있는 파이프라인의 경우, 텍스트 인코더도 양자화 대상으로 고려할 수 있습니다. 아래 예시는 [FluxPipeline](/docs/diffusers/main/ko/api/pipelines/flux#diffusers.FluxPipeline)에서 T5 텍스트 인코더만 양자화하고 CLIP 모델은 그대로 유지합니다. | |
| `components_to_quantize`는 여러 모델을 위한 목록 또는 단일 모델을 위한 문자열을 받아들입니다. | |
| 아래 예제는 [BitsAndBytesConfig](/docs/diffusers/main/ko/api/quantization#diffusers.BitsAndBytesConfig)에서 `load_in_4bit`, `bnb_4bit_quant_type`, `bnb_4bit_compute_dtype` 인수를 사용하여 bitsandbytes 백엔드를 로드합니다. | |
| ```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"], | |
| ) | |
| ``` | |
| `pipeline_quant_config`를 [from_pretrained()](/docs/diffusers/main/ko/api/pipelines/overview#diffusers.DiffusionPipeline.from_pretrained)에 전달하여 파이프라인을 양자화합니다. | |
| ```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] | |
| ``` | |
| ### 고급 양자화 | |
| `quant_mapping` 인수는 파이프라인의 각 개별 구성 요소를 양자화하는 방법에 대해 더 많은 옵션을 제공합니다. 예를 들어, 서로 다른 양자화 백엔드를 결합하는 것 등이 있습니다. | |
| [PipelineQuantizationConfig](/docs/diffusers/main/ko/api/quantization#diffusers.PipelineQuantizationConfig)을 초기화하고 `quant_mapping`을 전달합니다. `quant_mapping`을 사용하면 transformer, text encoder와 같은 파이프라인의 각 구성 요소에 대한 양자화 옵션을 지정할 수 있습니다. | |
| 아래 예시에서는 transformer와 text encoder에 각각 두 가지 양자화 백엔드인 [QuantoConfig](/docs/diffusers/main/ko/api/quantization#diffusers.QuantoConfig)와 [transformers.BitsAndBytesConfig](https://huggingface.co/docs/transformers/main/en/main_classes/quantization#transformers.BitsAndBytesConfig)를 사용합니다. | |
| ```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)에는 별도의 bitsandbytes 백엔드가 있습니다. Transformers에서 가져온 구성 요소의 경우 [transformers.BitsAndBytesConfig](https://huggingface.co/docs/transformers/main/en/main_classes/quantization#transformers.BitsAndBytesConfig)를 가져와서 사용해야 합니다. 예를 들어, [FluxPipeline](/docs/diffusers/main/ko/api/pipelines/flux#diffusers.FluxPipeline)의 `text_encoder_2`는 Transformers의 [T5EncoderModel](https://huggingface.co/docs/transformers/main/en/model_doc/t5#transformers.T5EncoderModel)이므로 [diffusers.BitsAndBytesConfig](/docs/diffusers/main/ko/api/quantization#diffusers.BitsAndBytesConfig) 대신 [transformers.BitsAndBytesConfig](https://huggingface.co/docs/transformers/main/en/main_classes/quantization#transformers.BitsAndBytesConfig)를 사용해야 합니다. | |
| > [!TIP] | |
| > 이러한 개별 import를 관리하지 않거나 각 pipeline 구성 요소의 출처가 불분명한 경우, 위의 [기본 양자화](#basic-quantization) 방법을 사용하세요. | |
| ```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 | |
| ), | |
| } | |
| ) | |
| ``` | |
| `pipeline_quant_config`를 [from_pretrained()](/docs/diffusers/main/ko/api/pipelines/overview#diffusers.DiffusionPipeline.from_pretrained)에 전달하여 파이프라인을 양자화합니다. | |
| ```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] | |
| ``` | |
| ## 사전 양자화 체크포인트 로드 | |
| 일부 양자화 백엔드는 이미 양자화되어 Hub에 업로드된 체크포인트를 로드하는 것을 지원합니다. 이 경우 양자화 구성은 모델의 `config.json`에 저장되며 자동으로 읽힙니다. 따라서 [PipelineQuantizationConfig](/docs/diffusers/main/ko/api/quantization#diffusers.PipelineQuantizationConfig)를 생성하거나 `quantization_config` 인수를 전달할 필요가 없습니다. | |
| ```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" | |
| ``` | |
| 다음 백엔드들은 사전 양자화 체크포인트를 기본적으로 로드할 수 있습니다. | |
| | 백엔드 | The input is a single word "Notes". | |
| 참고 | | |
| |---|---| | |
| | [bitsandbytes](./bitsandbytes) | Config는 `config.json`에 저장되며, 추가 인자가 필요하지 않습니다. 온플라이 양자화 및 사전 양자화된 체크포인트 로딩을 모두 지원합니다. | | |
| | [torchao](./torchao) | 위와 동일합니다. | | |
| | [GGUF](./gguf) | Model 클래스와 함께 `from_single_file`를 사용합니다. pipeline 수준의 로딩은 지원되지 않습니다. | | |
| | [BFL](./bfl) | Black Forest Labs의 `fp8r` 및 `nvfp4` 단일 파일 체크포인트를 `from_single_file`로 로드합니다. 파이프라인 수준의 로딩은 지원되지 않습니다. | | |
| | [AutoRound](./autoround) | 로드만 지원됩니다. 먼저 AutoRound CLI 또는 Python API를 사용하여 양자화하세요. | | |
| | [Nunchaku Lite](./nunchaku) | Config는 `config.json`에 저장되며 `kernels` 패키지가 필요합니다. 로딩만 지원됩니다. | | |
| | [ModelOpt](./modelopt) | 모델만 로드하는 것이 지원됩니다. | | |
| | [SDNQ](./sdnq) | `sdnq` 패키지가 필요합니다. 실시간 양자화 및 사전 양자화 모델 로딩을 모두 지원합니다. | | |
| ## 리소스 | |
| 양자화에 대해 자세히 알아보려면 아래 리소스를 확인하세요. | |
| - 양자화에 처음 접하시는 경우, DeepLearning.AI와 협력하여 만든 초보자 친화적인 다음 코스를 확인해 보시는 것을 권장합니다. | |
| - [Hugging Face를 활용한 양자화 기초](https://www.deeplearning.ai/short-courses/quantization-fundamentals-with-hugging-face/) | |
| - [양자화 심층 분석](https://www.deeplearning.ai/short-courses/quantization-in-depth/) | |
| - 새로운 양자화 방법을 추가하는 데 관심이 있다면 [새로운 양자화 방법 기여 가이드](https://huggingface.co/docs/transformers/main/en/quantization/contribute)를 참조하세요. | |
| - Transformers 양자화 [개요](https://huggingface.co/docs/transformers/quantization/overview#when-to-use-what)는 다양한 양자화 백엔드의 장단점을 요약합니다. | |
| - 각 양자화 백엔드에 대한 간략한 소개, 백엔드 선택 방법, 그리고 양자화를 다른 메모리 최적화 기법과 결합하는 방법에 대해서는 [Exploring Quantization Backends in Diffusers](https://huggingface.co/blog/diffusers-quantization) 블로그 포스트를 참고하세요. | |
Xet Storage Details
- Size:
- 11.1 kB
- Xet hash:
- 15e537a6d469d66f59239b1d2f9c7f52fd59c99ba95eeafee2b46448c9f35e40
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.