양자화 목표
모델 크기 축소 : 모델의 가중치와 활성화를 더 적은 비트 수로 표현 -> 저장 공간을 절약하고 전송 속도 증가 효과
연산 속도 향상 : 정수 연산을 사용하여 계산을 수행 -> 연산속도 향상
주요 양자화 기법
정수 양자화 (Integer Quantization) - 정수 사용
부동소수점 양자화 (Float16 Quantization) - 32비트 대신 16비트 부동소수점 사용
해상도 감소 (Precision Reduction) - 수치 해상도를 줄여서 모델의 계산을 간소화
장단점
장점 : 메모리 절약, 연산 속도 증가, 에너지 효율:
단점 : 정확도 감소
코드
model = AutoModelForCausalLM.from_pretrained(
base_model,
quantization_config=quant_config, # 양자화 설정
device_map={"": 0} # 0번장치(GPU)에서 실행
# device_map="auto" # 자동으로 장치 할당
)
model.config.use_cache = False #
model.config.pretraining_tp = 1 # 텐서 병렬 처리(Tensor Parallelism) 수준을 설정. 1은 병렬처리없이 단일 장치에서 실행
토큰화는 모델을 훈련시킬때 숫자를 변경하는 방법
베이스 모델의 토큰을 불러와서 사용할 수 있다
텍스트가 끝날때, 끝났다고 인지하는 방법
터미네이트를 지정
문장의끝 토큰을 지정
LoRA는 모델의 특정 부분을 적은 수의 파라미터로 업데이트하여 메모리 사용량을 줄이고 훈련 속도를 개선한다.
peft_params = LoraConfig(
lora_alpha=16,
lora_dropout=0.1,
r=32, ### r 값을 줄여 메모리 사용량 감소
bias="none",
task_type="CAUSAL_LM",
)
LoraConfig() : Hugging Face의 peft(Parameter-Efficient Fine-Tuning) 라이브러리에서 사용되는 클래스. 이 클래스는 Lora(Low-Rank Adaptation) 기법을 적용하기 위한 설정을 정의한다.
기존 지식 유지
기존 모델의 지식을 유지하면서도 새로운 데이터에 대한 특화된 성능을 추가
모델의 확장성
LoRA(LoRA: Low-Rank Adaptation)와 같은 기술을 사용하여 파라미터를 효율적으로 조정하는 경우, 기존 모델의 파라미터를 수정하지 않고도 새로운 기능을 추가
훈련 효율성
모델이 다양한 데이터에 대해 더 잘 반응하도록 개선할 수 있다.
학습시킨 질문을 프롬프트로 물어봐서 잘 대답하는지 확인
mergedModel = model.merge_and_unload()
hfAddr = "허깅페이스모델저장소"
mergedModel.push_to_hub(hfAddr)
tokenizer.push_to_hub(hfAddr)