Bitsandbytes
Huggingface Bitsandbytes
What is Bitsandbytes?
Quantization(양자화)는 모델에서 숫자 값의 정밀도를 낮추는 데 사용되는 기술입니다.
양자화는 32비트 부동 소수점 숫자와 같은 고정밀 데이터 유형을 사용하는 대신 8비트 정수와 같은 저정밀 데이터 유형을 사용하여 값을 나타냅니다. 이 프로세스는 메모리 사용량을 크게 줄이고 모델 실행 속도를 높이면서도 허용 가능한 정확도를 유지할 수 있습니다.
모델 정량화 프로세스에 더 쉽게 접근할 수 있도록 Hugging Face는 Bitsandbytes 라이브러리와 원활하게 통합했습니다. 이러한 통합은 양자화 프로세스를 간소화하고 사용자가 단 몇 줄의 코드만으로 효율적인 모델을 구축할 수 있도록 지원합니다.
Quantization
Integrations
Optimizers
Load 4-bit Quantization
이 통합의 주요 기능 중 하나는 4비트 양자화 모델을 로드할 수 있는 기능입니다.
from_pretrained메서드를 호출할 때
load_in_4bit=True` 인수를 설정하면 이 작업을 수행할 수 있습니다. 이렇게 하면 메모리 사용량을 약 4배까지 줄일 수 있습니다.
불러온 model의 메모리 용량을 확인해 보겠습니다.
Extra Cases
Model을 로드할 때 4bit, 8bit 양자화 지정 외에 다른 기능을 활용할 수 있습니다.
Compute Data type
bnb_4bit_compute_dtype
인수에서 다른 값(예: torch.bfloat16
)으로 설정하여 계산 중에 사용되는 데이터 유형을 수정할 수 있습니다.
이렇게 하면 특정 시나리오에서 속도가 향상될 수 있습니다. 다음은 예시입니다:
NF4 Data type
NF4 데이터 유형은 정규 분포를 사용하여 초기화된 가중치를 위해 설계되었습니다. bnb_4bit_quant_type='nf4'
를 지정하여 사용할 수 있습니다:
Nested Quantization for Memory Efficiency
성능 저하 없이 메모리 효율성을 더욱 높이기 위해 중첩 양자화 기법을 사용할 것을 권장합니다. 이 기술은 특히 대규모 모델을 미세 조정할 때 유용하다는 것이 입증되었습니다:
Quantized Model from the Hub
정량화된 모델은 from_pretrained
메서드를 사용하여 쉽게 로드할 수 있습니다.
저장된 가중치가 양자화되었는지 확인하려면 모델 구성에서 quantization_config
속성을 확인합니다:
Support 8-bit Optimizer
Bitsandbytes는 다음과 같은 최적화 프로그램을 지원합니다:
Adagrad, Adagrad8bit, Adagrad32bit
Adam, Adam8bit, Adam32bit, PagedAdam, PagedAdam8bit, PagedAdam32bit
AdamW, AdamW8bit, AdamW32bit, PagedAdamW, PagedAdamW8bit, PagedAdamW32bit
LAMB, LAMB8bit, LAMB32bit
LARS, LARS8bit, LARS32bit, PytorchLARS
Lion, Lion8bit, Lion32bit, PagedLion, PagedLion8bit, PagedLion32bit
RMSprop, RMSprop8bit, RMSprop32bit
SGD, SGD8bit, SGD32bit
Last updated