본문으로 바로가기
검색
회원가입로그인

딥러닝 모델 쉽게 양자화하기

정한 Rycont
정한 Rycont
조회수 1,597

함께 보기

양자화는 딥러닝 모델을 경량화하는 방법중 하나입니다. 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 양자화 모델은 다음 링크에 배포되었습니다.

https://huggingface.co/rycont/kakaobrain__kogpt-6b-8bit