대규모 언어 모델(LLM)의 파인튜닝은 막대한 컴퓨팅 리소스와 복잡한 환경 설정으로 인해 진입 장벽이 높은 작업입니다. 다양한 파인튜닝 기법을 실험하려면 수많은 서드파티 라이브러리와 프레임워크를 설치해야 하며, 환경 구성 단계에서 포기하는 경우도 많습니다. 이러한 문제를 해결하기 위해 등장한 오픈소스 프로젝트가 바로 LLaMA Factory입니다. 이 프레임워크는 높은 실행 효율을 제공하며, 직관적인 웹 기반 시각화 인터페이스를 통해 파인튜닝 과정을 쉽게 관리할 수 있습니다.
LLM 파인튜닝의 핵심 기술
LLM 파인튜닝에는 엄청난 계산 비용이 수반되므로, 이를 극복하기 위한 다양한 효율적 파인튜닝(PEFT) 기법이 개발되었습니다. 이는 크게 최적화 기반 기법과 계산 기반 기법으로 나눌 수 있습니다.
최적화 기반 기법
- 동결 파인튜닝(Freeze-tuning): 모델의 대부분의 가중치를 고정하고 디코더의 일부 레이어만 학습시킵니다. 학습 비용은 크게 줄어드나, 모델의 전체적인 성능 저하가 발생할 수 있습니다.
- GaLore (Gradient Low-Rank Projection): 그래디언트를 저차원 공간으로 투영하여 전체 파라미터 학습과 유사한 효과를 내면서 메모리 사용량을 획기적으로 줄입니다. 중복성이 큰 대규모 모델에서 특히 유용합니다.
- LoRA (Low-Rank Adaptation): 사전 학습된 가중치는 그대로 유지한 채, 특정 레이어에 작은 저차원 행렬을 추가하여 학습합니다. 순전파 시 원본 가중치와 저차원 행렬을 결합하여 사용하고, 역전파 시에는 추가된 작은 행렬만 업데이트합니다. 이를 통해 메모리 오버헤드를 최소화할 수 있습니다.
- QLoRA (Quantized LoRA): LoRA에 양자화(Quantization) 기술을 결합한 방식입니다. FP16/FP32 가중치를 INT4/INT8로 압축하여 메모리 점유율을 극단적으로 낮춥니다. 작은 모델에서도 풀 파인튜닝에 버금가는 성능을 발휘합니다.
- DoRA (Weight-Decomposed Low-Rank Adaptation): 사전 학습 가중치를 크기(magnitude)와 방향(direction) 성분으로 분해한 뒤, 방향 성분에만 LoRA를 적용합니다. 방향 성분이 작업 관련 지식을 더 많이 포함한다는 가정하에, 동일한 메모리 비용으로 LoRA보다 높은 성능을 달성할 수 있습니다.
LLaMA Factory는 이러한 최적화 기법들을 모듈화하여 통합 구현했기 때문에, 사용자는 복잡한 코딩 없이 UI에서 옵션만 선택하면 쉽게 적용할 수 있습니다.
계산 기반 기법
- 혼합 정밀도 학습 및 활성화 재계산: FP16과 같은 낮은 정밀도를 사용하여 메모리를 절약하고, 활성화 값을 필요할 때 다시 계산하여 메모리 점유율을 낮춥니다.
- Flash Attention 및 S2 Attention: 어텐션 레이어의 계산 프로세스를 하드웨어 친화적으로 재구성하여 속도를 높이거나, 긴 시퀀스 처리 시 메모리 병목 현상을 해결합니다.
- Unsloth: LoRA 레이어의 역전파 과정을 최적화하여 그래디언트 계산에 필요한 FLOPs를 줄이고 학습 속도를 가속화합니다.
LLaMA Factory의 주요 특징
LLaMA Factory는 100개 이상의 LLM을 노코드로 파인튜닝할 수 있도록 설계된 통합 프레임워크입니다. 주요 지원 기능은 다음과 같습니다.
- 지원 모델: LLaMA, Mistral, Qwen, Gemma, Baichuan, ChatGLM 등 다양한 아키텍처 지원.
- 학습 파이프라인: 사전 학습(PT), 지도 파인튜닝(SFT), 보상 모델링(RM), PPO, DPO, ORPO 등.
- 정밀도 옵션: 32비트 풀 파인튜닝, 16비트 동결/LoRA, 2/4/8비트 QLoRA (AQLM, AWQ, GPTQ 등 지원).
- 최신 알고리즘: GaLore, DoRA, LongLoRA, LLaMA Pro, LoftQ 등.
- 모니터링 도구: LlamaBoard, TensorBoard, Weights & Biases(Wandb), MLflow 연동.
환경 구축 및 모델 다운로드
LLaMA Factory를 사용하기 위한 기초 환경을 설정하고, 파인튜닝에 사용할 기반 모델을 다운로드합니다. 아래 스크립트는 가상 환경 구성과 모델 다운로드 프로세스를 재구성한 예시입니다.
# 1. 레포지토리 복제 및 가상 환경 설정
git clone https://github.com/hiyouga/LLaMA-Factory.git
cd LLaMA-Factory
# Python 3.10 기반의 가상 환경 생성 및 활성화 (venv 사용 예시)
python3.10 -m venv .venv
source .venv/bin/activate
# 필수 의존성 패키지 설치 (PyTorch 및 메트릭 포함)
pip install --upgrade pip
pip install -e ".[torch,metrics]"
# 2. Hugging Face CLI를 활용한 모델 다운로드 (Qwen 모델 예시)
pip install huggingface_hub
huggingface-cli download Qwen/Qwen1.5-7B-Chat --local-dir ./models/Qwen1.5-7B-Chat
WebUI를 통한 파인튜닝 실습
LLaMA Factory는 직관적인 웹 인터페이스(LLaMA Board)를 제공합니다. 다음 명령어를 실행하여 WebUI를 시작합니다.
# 특정 GPU(예: 0번)를 지정하여 WebUI 서버 실행
CUDA_VISIBLE_DEVICES=0 llamafactory-cli webui
서버가 구동되면 브라우저에서 인터페이스에 접속하여 다음과 같이 학습 파라미터를 구성합니다.
기본 모델 설정
- Model Name: 학습할 기반 모델을 선택합니다 (예: Qwen1.5-7B-Chat).
- Model Path: 로컬에 다운로드한 모델의 경로를 지정합니다 (예:
./models/Qwen1.5-7B-Chat). - Finetuning Method:
lora를 선택하여 효율적인 파인튜닝을 진행합니다.
학습(Train) 탭 상세 설정
- Training Stage:
Supervised Fine-Tuning (SFT)을 선택하여 지시문 튜닝을 수행합니다. - Dataset:
data디렉토리 내의 데이터셋을 선택합니다. 예제로 내장된identity데이터셋을 사용하여 모델의 자기 인식(Self-cognition) 응답을 커스텀할 수 있습니다. - Learning Rate: 초기 학습률은
5e-5로 설정하며, 스케줄러는cosine을 권장합니다. - Epochs: 데이터셋 크기에 맞게 설정합니다. 작은 데이터셋의 경우
30정도로 늘려 수렴을 유도합니다. - Compute Type: GPU가 지원하는 경우
bf16을 선택하여 학습 안정성과 속도를 확보합니다. - Gradient Accumulation Steps: 배치 크기를 가상으로 늘리기 위해
4또는8로 설정하여 메모리 효율을 높입니다.
설정을 마친 후 'Preview Command'를 통해 생성된 CLI 명령어를 확인하고, 'Start' 버튼을 눌러 학습을 개시합니다. 우측 하단 차트에서 Loss 곡선이 수렴하는지 실시간으로 모니터링할 수 있습니다.
모델 평가 및 대화(Chat) 테스트
학습이 완료되면 'Chat' 탭으로 이동합니다. 'Refresh Checkpoints'를 클릭하여 방금 생성된 체크포인트를 로드한 뒤, 커스텀한 프롬프트(예: "너의 이름은 무엇이니?")를 입력하여 파인튜닝 결과를 검증합니다.
LLaMA Factory의 내부 아키텍처
LLaMA Factory는 크게 세 가지 핵심 모듈로 구성되어 있어 확장성과 유지보수성을 확보하고 있습니다.
- Model Loader: 100개 이상의 다양한 LLM 아키텍처를 파인튜닝에 적합하도록 초기화하고 로드하는 역할을 담당합니다.
- Data Worker: 50개 이상의 데이터셋 포맷을 처리할 수 있도록 설계된 파이프라인으로, 텍스트 전처리 및 토큰화 작업을 효율적으로 수행합니다.
- Trainer: 다양한 PEFT 기법과 학습 알고리즘(SFT, RM, PPO 등)을 통합 관리하며, 분산 학습 및 그래디언트 최적화를 처리합니다.
이러한 모듈들은 LLaMA Board라는 시각화 레이어와 결합되어, 사용자가 백그라운드 로직을 직접 구현하지 않고도 복잡한 LLM 파인튜닝 워크플로우를 완벽하게 제어할 수 있도록 지원합니다.