LLaMA-Factory와 Ollama, SpringAI를 활용한 맞춤형 미세조정 모델 구축

초기 설정 및 환경 구성

모델의 전반적인 성능을 향상시키기 위해 전체 사전 학습 파라미터를 재학습하는 것은 비용과 시간 측면에서 부담이 큽니다. 이를 해결하기 위해 LoRA( Low-Rank Adaptation) 기법을 활용한 미세조정이 주목받고 있으며, 이는 특정 도메인에 특화된 지식을 모델에 통합할 수 있게 해줍니다. 예를 들어, 채용 관련 작업에서는 지원자 역량 평가나 직무 설명서 생성 등에 특화된 데이터로 학습해야 합니다.

이 과정을 간편하게 수행할 수 있도록 도와주는 프레임워크로 LLaMA-Factory가 있습니다. 이 도구는 다음과 같은 작업에 적합합니다:

  • 텍스트 분류 (감성 분석, 주제 식별)
  • 시퀀스 태깅 (명사구 인식, 품사 태깅)
  • 자동 생성 (요약, 대화 생성)
  • 기계 번역 (특정 언어 쌍 최적화)

GPU 환경 준비 (모던 클라우드 환경 기준)

모델 학습은 일반적으로 고성능 GPU 환경에서 수행됩니다. 컴퓨팅 자원이 제한된 경우, 클라우드 기반의 노트북 환경을 사용하는 것이 효과적입니다. 예를 들어, ModelScope의 가용한 노트북 서비스에서 CUDA 및 관련 라이브러리가 사전 설치된 최신 GPU 환경을 선택하여 바로 시작할 수 있습니다.

LLaMA-Factory 설치

환경 설정 후, 터미널에서 다음 명령어를 순차 실행하여 프레임워크를 설치합니다:

git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.git
cd LLaMA-Factory
pip install -e "./[torch,metrics]"

설치 중 오류 발생 시, 의존성 제거 후 재설치를 시도하세요:

pip install --no-deps -e .

정상 설치 여부 확인을 위해 아래 명령어를 입력합니다:

llamafactory-cli version

데이터셋 준비 및 형식 정의

미세조정의 첫 단계는 목적에 맞는 데이터 세트 확보입니다. 일반적으로 다음 세 가지 필드로 구성된 JSON 형식이 권장됩니다:

  • instruction: 사용자가 제시한 명령 또는 질문
  • input: 추가적인 맥락 정보
  • output: 모델이 생성해야 할 바람직한 응답
{
  "instruction": "위 항목들의 총 비용을 계산해줘.",
  "input": "자동차: $3000, 옷: $100, 책: $20",
  "output": "총 비용은 $3000 + $100 + $20 = $3120입니다."
}

자체 데이터셋을 사용하려면 dataset_info.json 파일에 해당 데이터셋의 메타정보를 등록해야 합니다. 이 파일은 프로젝트 내 data/ 폴더 하위에 위치하며, 각 데이터셋의 이름, 경로, 언어 등을 정의합니다.

모델 학습 설정 및 실행

학습 설정은 YAML 기반의 구성 파일을 통해 이루어집니다. 예시 파일은 examples/train_lora/llama3_lora_sft.yaml에 존재합니다. 핵심 설정 항목은 다음과 같습니다:

### model
model_name_or_path: LLM-Research/Meta-Llama-3-8B-Instruct

### dataset
dataset: identity, alpaca_en_demo

모델이 모던 클라우드 플랫폼에서 제공되는 경우, 환경 변수를 설정하여 온라인 자원을 활용하도록 합니다:

export USE_MODELSCOPE_HUB=1

학습을 시작하려면 다음 명령어를 실행합니다:

llamafactory-cli train examples/train_lora/llama3_lora_sft.yaml

학습 모니터링 및 결과 확인

학습 중 GPU 사용률을 실시간으로 확인하고 싶다면, nvitop를 설치하면 됩니다:

pip install nvitop
nvitop -m auto

학습 완료 후, 결과는 saves/checkpoint-*/ 폴더에 저장됩니다. 여기서 중요한 정보들은 다음과 같습니다:

  • Epoch 수: 전체 데이터셋을 반복한 횟수 (예: 3회)
  • Loss 값: 손실 함수의 감소 추세 (1.81 정도로 감소 → 학습 효과 양호)
  • 파일 크기: LoRA 어댑터는 원본 모델보다 매우 작음 (예: 약 80.1MB)
  • 손실 그래프: 학습 진행 과정에서 손실이 점차 감소함을 시각화

모델 추론 (Inference)

학습된 모델을 테스트하기 위해, examples/inference/ 디렉터리에 있는 설정 파일을 활용합니다:

llamafactory-cli chat examples/inference/llama3_lora_sft.yaml

실행 후 채팅 인터페이스가 열리며, 입력한 질의에 대해 모델이 답변을 생성합니다. 필요 시 설정값을 동적으로 수정할 수 있습니다:

llamafactory-cli train examples/train_lora/llama3_lora_sft.yaml \
    learning_rate=1e-5 \
    logging_steps=1

모델 병합 (Merge) 및 배포 준비

LoRA 어댑터는 원본 모델과 별개로 유지되지만, 실제 운영 환경에서는 하나의 통합 모델로 합쳐야 합니다. 이를 위해 llamafactory-cli export 명령어를 사용합니다:

llamafactory-cli export examples/merge_lora/llama3_lora_sft.yaml

병합된 모델은 output/ 폴더에 생성되며, 원본 모델 구조와 동일하게 되어 있어 호환성이 보장됩니다. 이후 추론 시에는 이 병합된 모델 경로를 참조해야 합니다.

OLLAMA 형식으로 변환 및 사용

다양한 인프라에서 사용하기 위해, 학습된 모델을 Ollama가 인식할 수 있는 포맷으로 변환할 수 있습니다. 기본적으로 모델 구조는 gguf 형식으로 변환되며, 이는 로컬에서 효율적인 실행을 가능하게 합니다.

변환 후, Ollama CLI를 통해 모델을 로드하고 실행할 수 있습니다:

ollama create my-custom-model -f ./models/my-custom-model.yaml
ollama run my-custom-model

Spring AI 통합 및 서버 연동

최종적으로, 개발된 모델을 웹 애플리케이션에 통합하려면 Spring AI 프레임워크를 활용하면 됩니다. Spring Boot 기반의 서비스에서 @Bean으로 모델을 등록하고, REST API 형태로 요청을 처리할 수 있습니다.

이를 통해 기업 내부 시스템, 고객 챗봇, 문서 생성 시스템 등 다양한 상황에 맞춤형 인공지능 기능을 쉽게 적용할 수 있습니다.

태그: LLaMA-Factory Ollama Spring AI LoRA Model Fine-tuning

5월 29일 06:42에 게시됨