Huggingface Bitsandbytes
What is Bitsandbytes?
Quantization(양자화)는 모델에서 숫자 값의 정밀도를 낮추는 데 사용되는 기술입니다.
양자화는 32비트 부동 소수점 숫자와 같은 고정밀 데이터 유형을 사용하는 대신 8비트 정수와 같은 저정밀 데이터 유형을 사용하여 값을 나타냅니다. 이 프로세스는 메모리 사용량을 크게 줄이고 모델 실행 속도를 높이면서도 허용 가능한 정확도를 유지할 수 있습니다.
모델 정량화 프로세스에 더 쉽게 접근할 수 있도록 Hugging Face는 Bitsandbytes 라이브러리와 원활하게 통합했습니다. 이러한 통합은 양자화 프로세스를 간소화하고 사용자가 단 몇 줄의 코드만으로 효율적인 모델을 구축할 수 있도록 지원합니다.
Copy % pip install transformer bitsandbytes accelerate Load 4-bit Quantization
이 통합의 주요 기능 중 하나는 4비트 양자화 모델을 로드할 수 있는 기능입니다. from_pretrained메서드를 호출할 때load_in_4bit=True` 인수를 설정하면 이 작업을 수행할 수 있습니다. 이렇게 하면 메모리 사용량을 약 4배까지 줄일 수 있습니다.
Copy from transformers import AutoModelForCausalLM , AutoTokenizer
model_id = " bigscience/bloom-1b7 "
tokenizer = AutoTokenizer . from_pretrained ( model_id )
model_4bit = AutoModelForCausalLM . from_pretrained (
model_id ,
device_map = " auto " ,
load_in_4bit = True
) 불러온 model의 메모리 용량을 확인해 보겠습니다.
Model을 로드할 때 4bit, 8bit 양자화 지정 외에 다른 기능을 활용할 수 있습니다.
Compute Data type
bnb_4bit_compute_dtype 인수에서 다른 값(예: torch.bfloat16)으로 설정하여 계산 중에 사용되는 데이터 유형을 수정할 수 있습니다.
이렇게 하면 특정 시나리오에서 속도가 향상될 수 있습니다. 다음은 예시입니다:
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