😒 저 저 저 개념없는 나/⛓️ DL & ML

[LLM] LLM Fine Tuning 공부 | 인턴

우주수첩 2023. 10. 19. 11:59
728x90

허깅페이스와 LoRA를 사용하여 단일 Amazon SageMaker GPU에서 대규모 언어 모델(LLM) 훈련하기 : aws 기술 블로그

  • 파운데이션 모델 (foundation model) : 대규모 데이터셋과 여러 작업을 통해 훈련된 대규모 모델은 훈련되지 않은 특정 작업에도 일반화 성능이 높게 나타나는 모델.
  • 파인 튜닝(Fine-Tunning) : 특정 도메인이나 작업에 대한 대규모 모델의 성능을 개선하기 위해 더 작은 작업별 데이터 셋으로 모델을 추가로 훈련하는 것.
  • 단점
    • LLM의 정확도를 성공적으로 개선, 원본 모델의 모든 가중치 수정 필요 → 비용 부담
    • 원본 모델과 동일한 크기의 모델을 생성 → 저장소 용량 부담
  • 요약
    • 파인 튜닝 데이터셋 크기가 훨씬 작기 때문에 사전 훈련 보다 빠르지만 여전히 상당한 컴퓨팅 성능과 메모리를 필요로 한다.

 

허깅페이스의 시도

  • git : https://github.com/huggingface/notebooks/tree/main/sagemaker/24_train_bloom_peft_lora
  • 효율적인 파라미터 파인 튜닝(PEFT; Parameter-Efficient Fine-Tuning) 라이브러리 도입.
    • 기존 모델 가중치를 동결하고 훨씬 작은 추가 파라미터 셋만 훈련하여 모델 레이어를 교체 혹은 확장 가능.
    ⇒ 컴퓨팅 메모리 측면에서 훨씬 적은 비용으로 훈련 수행 가능.

 

 

파인 튜닝 시에 필요한 컴퓨팅 및 메모리 요구사항 축소 방법

  • LoRA(Low-Rank Adaptation)
  • 양자화(Quantization)

LoRA(Low-Rank Adaptation)

  • 예측 성능의 손실 없이 신규 작업에 맞게 파인 튜닝하는데 필요한 모델 파라미터 수와 컴퓨팅을 크게 줄여주는 기법.
  • 더 적은 순위 분해 가중치 행렬을 신규 작업에 맞게 최적화 한 다음, 조정된 가중치를 원래 모델에 다시 합산.

가중치 gradient가 적다 == 파인 튜닝 시 컴퓨팅 및 GPU 메모리를 덜 사용한다.

  • 이점
    • LLM이 가장 중요한 입력 및 출력 토큰에 집중하고, 중복되거나 덜 중요한 토큰은 무시할 수 있다는 직관적인 이점이 존재.
    참고논문 : https://arxiv.org/pdf/2106.09685.pdf

양자화

  • bitsandbytes 허깅페이스 통합 LLM.int8() 메서드를 사용하여 고정된 BloomZ 모델 파라미털르 정량화 하거나 가중치 및 바이어스 값을 float16에서 int8로 반올림하여 정밀도를 낮출 수 있다.
  • 양자롸를 진행하면 BloomZ에 필요한 메모리가 약 4배 감소하므로 예측 성능의 큰 손실 없이 A10 GPU 인스턴에 모델을 탑재할 수 있다.
  • 메모리 요구사항을 줄이고 추론 속도를 향상시킨다.

참고 링크 : https://huggingface.co/blog/hf-bitsandbytes-integration

 

LoRA 적용 예시

def create_peft_config(model):
    from peft import (
        get_peft_model,
        LoraConfig,
        TaskType,
        prepare_model_for_int8_training,
    )

    peft_config = LoraConfig(
        task_type=TaskType.CAUSAL_LM,
        inference_mode=False,
        r=8, # Lora attention dimension.
        lora_alpha=32, # the alpha parameter for Lora scaling.
        lora_dropout=0.05, # the dropout probability for Lora layers.
        target_modules=["query_key_value"],
    )

    # prepare int-8 model for training
    model = prepare_model_for_int8_training(model)
    model = get_peft_model(model, peft_config)
    model.print_trainable_parameters()
    return model
  • print_trainable_parameters 메소드의 출력에 따르면 파라미터 수가 70억개 에서 390만 개로 줄어들었음을 확인.

 

 

 

https://aws.amazon.com/ko/blogs/tech/train-a-large-language-model-on-a-single-amazon-sagemaker-gpu-with-hugging-face-and-lora/

 

허깅페이스와 LoRA를 사용하여 단일 Amazon SageMaker GPU에서 대규모 언어 모델(LLM) 훈련하기 | Amazon Web

이 글은 AWS Machine Learning Blog에 게시된 Train a Large Language Model on a single Amazon SageMaker GPU with Hugging Face and LoRA by Philipp Schmid, Doug Kelly, and Robert Fisher을 한국어로 번역 및 편집하였습니다. 원문은 허깅

aws.amazon.com

 

 

728x90