딥러닝 모델 쉽게 양자화하기
함께 보기
양자화는 딥러닝 모델을 경량화하는 방법중 하나입니다. Huggingface의 transformers 라이브러리가 제공하는 툴킷을 사용하면 Huggingface에 업로드된 모델을 간편하게 양자화할 수 있습니다. 이번 글에서는 카카오브레인의 KoGPT 6B (kakaobrain/kogpt) 모델을 양자화하고 성능 변화를 알아보겠습니다.
환경 설정
transformers, accelerate, bitsandbytes 라이브러리가 필요합니다. 특히 Transformers는 4.29 이후의 버전이 필요하기 때문에, 업데이트를 권장합니다.
pip install -q -U bitsandbytes transformers accelerate
양자화 하기
from transformers import AutoModelForCausalLM
model = AutoModelForCausalLM.from_pretrained(
'kakaobrain/kogpt',
revision = 'KoGPT6B-ryan1.5b-float16',
load_in_8bit = True,
device_map = 'auto'
)
from_pretrained
로 모델을 불러올 때 load_in_8bit
옵션을 함께 주면 모델을 불러올 때 int8로 양자화할 수 있습니다.
모델 배포하기
tokenizer = AutoTokenizer.from_pretrained(
'kakaobrain/kogpt',
revision = 'KoGPT6B-ryan1.5b-float16'
)
토크나이저도 불러오겠습니다. 토크나이저를 양자화하진 않지만, 사용자 편의를 위해 모델과 함께 배포하고자 합니다.
양자화한 모델과 토크나이저를 함께 huggingface에 업로드 해보겠습니다.
!pip install huggingface_hub
from huggingface_hub import notebook_login
notebook_login()
Notebook 환경에서는 위 코드를 통해 Huggingface에 로그인할 수 있습니다. 로그인할 때 인증 토큰을 요구하는데, 다음의 URL에서 얻을 수 있습니다.
https://huggingface.co/settings/tokens
model.push_to_hub("rycont/kakaobrain__kogpt-6b-8bit")
tokenizer.push_to_hub("rycont/kakaobrain__kogpt-6b-8bit")
원하는 저장소 이름을 지어서 Huggingface Hub에 업로드하였습니다. fp16으로 배포된 기존 모델의 크기는 12.3GB였지만, int8로 양자화한 모델은 6.7GB로 압축되었습니다. 제가 양자화한 KoGPT Int8 양자화 모델은 다음 링크에 배포되었습니다.