2️⃣Bitsandbytes

Huggingface Bitsandbytes

What is Bitsandbytes?

Quantization(양자화)는 모델에서 숫자 값의 정밀도를 낮추는 데 사용되는 기술입니다.

양자화는 32비트 부동 소수점 숫자와 같은 고정밀 데이터 유형을 사용하는 대신 8비트 정수와 같은 저정밀 데이터 유형을 사용하여 값을 나타냅니다. 이 프로세스는 메모리 사용량을 크게 줄이고 모델 실행 속도를 높이면서도 허용 가능한 정확도를 유지할 수 있습니다.

모델 정량화 프로세스에 더 쉽게 접근할 수 있도록 Hugging Face는 Bitsandbytes 라이브러리와 원활하게 통합했습니다. 이러한 통합은 양자화 프로세스를 간소화하고 사용자가 단 몇 줄의 코드만으로 효율적인 모델을 구축할 수 있도록 지원합니다.

  • Quantization

  • Integrations

  • Optimizers

%pip install transformer bitsandbytes accelerate

Load 4-bit Quantization

이 통합의 주요 기능 중 하나는 4비트 양자화 모델을 로드할 수 있는 기능입니다. from_pretrained메서드를 호출할 때load_in_4bit=True` 인수를 설정하면 이 작업을 수행할 수 있습니다. 이렇게 하면 메모리 사용량을 약 4배까지 줄일 수 있습니다.

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의 메모리 용량을 확인해 보겠습니다.

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