본문 바로가기

인공지능

가난한 자의 파인튜닝 솔루션: Unsloth로 효율적인 모델 튜닝하기

728x90
반응형

파인튜닝의 세계에서 한정된 자원으로도 최대의 성과를 내기란 쉽지 않습니다. 오늘은 "가난한 자의 파인튜닝 솔루션"이라 불리는 Unsloth에 대해 알아보겠습니다. 이 도구는 고성능 GPU 없이도 언어 모델을 효율적으로 파인튜닝할 수 있게 해주는 멋진 툴입니다. 파인튜닝의 효율을 극대화하기 위해 어떤 기술들이 사용되었는지, 그리고 어떻게 활용할 수 있는지 살펴보겠습니다.

Unsloth란 무엇인가?

Unsloth는 파인튜닝 효율화를 목표로 하는 툴로, Michael과 Daniel Han 형제가 개발한 프로젝트입니다. 적은 자원으로도 강력한 성능을 발휘할 수 있도록 설계된 이 도구는 LLM(대형 언어 모델)의 파인튜닝 과정에서 필요한 메모리 사용량을 줄이고 학습 속도를 크게 향상시킵니다. Unsloth는 NVIDIA의 GTX 1070과 같은 저사양 GPU부터 최신 H100에 이르기까지 다양한 GPU를 지원하며, 허깅페이스 생태계와도 완벽히 호환됩니다.

Unsloth의 강점은 크게 세 가지로 요약할 수 있습니다.

  1. 학습 속도 향상: 전통적인 학습 기법보다 학습 속도가 빠르며, 대부분의 모델 및 GPU 조합에서 우수한 성능을 발휘합니다.
  2. 메모리 사용량 감소: 메모리 효율화 기술을 적용하여 대형 모델도 단일 GPU에서 파인튜닝할 수 있습니다.
  3. 다양한 하드웨어 및 라이브러리 호환성: 다양한 GPU 모델과 허깅페이스의 여러 라이브러리(SFTTrainer, DPOTrainer 등)와 호환되어, 사용자가 익숙한 환경에서 쉽게 작업할 수 있습니다.
반응형

Unsloth는 어떻게 효율화를 이루었나?

Unsloth가 어떻게 파인튜닝 효율을 극대화했는지 궁금하실 겁니다. Unsloth는 여러 최적화 기술을 통해 학습 속도와 메모리 사용량을 줄였습니다. 주요 기술들을 살펴보겠습니다.

1. Intelligent Weight Upcasting (지능형 가중치 업캐스팅)

일반적인 QLoRA(양자화된 Low-Rank Adaption)를 사용할 때 학습 안정성을 위해 모델의 일부 계층을 FP32로 변환합니다. Unsloth는 개별 모델(Mistral, LLaMA 등)에 최적화된 방식을 적용하여 메모리와 연산 효율성을 극대화합니다.

2. Manual Autograd (수동 그래디언트 계산)

Pytorch의 자동 미분 시스템인 Autograd는 편리하지만 LoRA와 같은 파인튜닝 과정에서는 비효율적일 수 있습니다. Unsloth는 자동 미분을 수동으로 최적화하여 연산 비용을 줄였습니다.

3. Triton 커널

Unsloth는 OpenAI가 개발한 고성능 컴퓨팅 언어인 Triton을 사용해 학습 코드의 핵심 부분을 재작성하여 성능을 향상시켰습니다. 이를 통해 GPU 코드의 성능을 간단히 최적화할 수 있었습니다.

4. xFormers 프레임워크 사용

Unsloth는 Flash-Attention 등 최적화된 트랜스포머 구성 요소를 사용하여 학습 가속화를 도모하고 메모리 사용량을 줄였습니다.


Unsloth 사용법: Gemma-2-9b 모델 파인튜닝 예시

이제 Unsloth를 설치하고 실제로 어떻게 모델을 파인튜닝하는지 알아보겠습니다. 여기서는 Gemma-2-9b 모델을 Google Colab에서 파인튜닝하는 과정을 간단히 소개합니다.

1. Unsloth 설치하기

Unsloth 설치는 Conda나 pip를 통해 가능합니다. Colab 환경에서 다음과 같이 설치할 수 있습니다

!pip install "unsloth[colab-new] @ git+https://github.com/unslothai/unsloth.git"
!pip install --no-deps "xformers<0.0.27" "trl<0.9.0" peft accelerate bitsandbytes

2. FastLanguageModel 클래스

Unsloth에서 가장 중요한 클래스는 FastLanguageModel입니다. 이 클래스는 허깅페이스의 트랜스포머 라이브러리와의 통합을 통해 모델 로딩, 최적화, 학습 설정 등을 간편하게 지원합니다. 다음과 같이 사용할 수 있습니다

from unsloth import FastLanguageModel
import torch

max_seq_length = 2048
dtype = None
load_in_4bit = True

model, tokenizer = FastLanguageModel.from_pretrained(
    model_name="unsloth/gemma-2-9b",
    max_seq_length=max_seq_length,
    dtype=dtype,
    load_in_4bit=load_in_4bit,
)

FastLanguageModel 클래스는 모델 및 토크나이저 로드, 모델 레이어 최적화, 추론 최적화, 학습 최적화 등을 통합적으로 관리하여 사용자가 파인튜닝 작업을 더 쉽게 수행할 수 있도록 돕습니다.

3. PEFT 설정 및 학습 시작

다음으로 get_peft_model 메서드를 사용해 모델에 PEFT 설정을 적용합니다. 이를 통해 LoRA와 같은 최적화 기법을 이용해 메모리 사용을 줄이고 학습을 효율적으로 수행할 수 있습니다.

model = FastLanguageModel.get_peft_model(
    model,
    r=16,
    target_modules=["q_proj", "k_proj", "v_proj", "o_proj",
                    "gate_proj", "up_proj", "down_proj"],
    lora_alpha=16,
    lora_dropout=0,
    bias="none",
    use_gradient_checkpointing="unsloth",
    random_state=3407,
    use_rslora=False,
    loftq_config=None,
)

4. 학습 시작

이제 SFTTrainer를 사용하여 모델을 학습시킬 수 있습니다. 허깅페이스의 TrainingArguments와 함께 설정을 완료하고 학습을 진행합니다

from trl import SFTTrainer
from transformers import TrainingArguments
from unsloth import is_bfloat16_supported

trainer = SFTTrainer(
    model=model,
    tokenizer=tokenizer,
    train_dataset=dataset,
    dataset_text_field="text",
    max_seq_length=max_seq_length,
    dataset_num_proc=2,
    packing=False,
    args=TrainingArguments(
        per_device_train_batch_size=2,
        gradient_accumulation_steps=4,
        warmup_steps=5,
        max_steps=60,
        learning_rate=2e-4,
        fp16=not is_bfloat16_supported(),
        bf16=is_bfloat16_supported(),
        logging_steps=1,
        optim="adamw_8bit",
        weight_decay=0.01,
        lr_scheduler_type="linear",
        seed=3407,
        output_dir="outputs",
    ),
)

trainer.train()

728x90

Unsloth는 적은 자원으로도 효율적인 파인튜닝을 가능하게 해주는 도구로, 특히 고성능 GPU 없이도 효과적인 모델 학습을 원하는 사용자에게 큰 도움이 됩니다. Intelligent Weight Upcasting, Manual Autograd, Triton 커널, xFormers와 같은 최적화 기법을 통해 파인튜닝의 속도와 효율성을 극대화하고, 다양한 하드웨어 환경에서도 쉽게 사용할 수 있도록 설계된 것이 큰 장점입니다.

여러분도 Unsloth를 활용해 자신만의 LLM을 손쉽게 튜닝해 보세요. 앞으로도 파인튜닝의 새로운 가능성을 열어줄 이러한 도구들이 계속해서 발전하기를 기대합니다.

728x90
반응형