기존 LLM을 맞춤형으로 사용하기 위한 과제로, 사전학습된 모델(이미 존재하는 데이터를 학습함)이어서 생기는 문제가 있습니다.
- 맞춤형 출력(Tailored Outputs)이 필요함
- 부족한 콘텍스트(Missing Context)로 특정 문서가 사전 학습 데이터에 포함되지 않음
- 전문 용어(Specialized Vocabulary)와 같은 고유한 용어나 개념을 다루지 못함
이와 같은 문제를 해결하고 LLM을 맞춤화하기 위한 튜닝(Tuning)이 필요함
LLM 맞춤화 방법 (4가지)
- Prompt Engineering: 입력 프롬프트를 설계 및 개선하여 모델 출력을 조정
- 별도의 전문지식이 필요하지 않음
- 모델 파라미터를 학습하지 않고(사전 학습된 모델은 이미 파라미터가 학습되어 있음) 입력 프롬프트를 설계해서 출력 형식을 유도
- 장점: 저비용으로 모델 학습 없이 구현 가능, 코드 작성 없이 빠른 적용 가능
- 단점: 복잡한 도메인이나 데이터에서 정확도가 떨어질 수 있음
- RAG(Retrieval Augmented Generation): 검색기 추가
- 기존의 사전학습 모델에 기업의 사내 데이터베이스 등 연결해 검색기 추가
- 대기업의 경우, 데이터 유출 문제에 민감. LLM을 사용해도 유로 api를 사용하지 않고, 오픈소스를 파인튜닝해서 사용하는 추세. 유료 API를 사용해도 모니터링을 해서 데이터가 입력되지는 못하도록 하고 있음
- 제미나이에 사진이나 파일을 올리고 이를 참고해서 답변을 하도록 하는 것도 RAG
- 단점: 모델 전체 재학습(풀파인튜닝) 보다는 비용이 덜 들지만(장점: 비용효율성), 프롬프트 엔지니어링보다는 비용이 듦, 콘텍스트가 부족한 태스크에서는 효과가 제한적
- Full Fine Tuning: 모든 파라미터를 업데이트해 특정 태스크에 맞춤
- 사전 학습된 LLM을 소규모 태스크 데이터셋으로 추가 학습해 특정 태스크에 최적화 함
- 단점: 파라미터 수가 많아 학습을 위해 많은 계산 자원이 필요 - 높은 비용
- PEFT(Parameter-Efficient Fine-Tuning): 선택한 소수의 파라미터만 업데이트
- 계산량이 줄어 빠른 학습 속도
- 사전 학습 데이터가 보존되어 기존 가중치가 거의 유지됨
- 대표적인 모델: LoRA(Low-Rank Adaptation). 어댑터 행렬 2개를 가지고 있다
- 일부 내용만 튜닝한다
PEFT 실습 (순서 참고)
- 데이터셋 로드
- KLUE-STS / KLUE: Sts가 문장 유사도를 뜻함 (STS: Semantic Textual Similarity(문장 의미 유사도))
- https://huggingface.co/datasets/mteb/KLUE-STS
- https://huggingface.co/datasets/klue/klue
- 데이터셋이 테이블 형태이므로 Pandas에 대한 이해가 필요
- 원본은 문장 유사도(0~5) 데이터이지만, 여기서는 고유사도=긍정 / 저유사도=부정으로 변환해 간단 분류 데이터로 사용
- 데이터 수집 (KLUE-STS → 이진 분류용 변환)
- 'binary-label': 1 - 유사도 높음 / : 0 - 유사도 낮음
- 데이터셋 로드 후 내 모델에 맞게 데이터셋을 수정한다
- 샘플을 눈으로 검증하는 과정이 매우 중요하다. 몇 개 샘플을 읽어보면서 문장의 유사도가 잘 정리됐는지 확인하자
- 최소 전처리
- clean_text 함수를 통해 processed_text가 나온다
- clean_text 함수: 텍스트 전처리 - 의미 자체를 바꾸는 것은 아니고, 과한 전처리는 진행하지 않으며, 이상한 문자가 들어간 건 아닌지 확인하는 정도로 진행
- processed_text 칼럼을 만들어서 정제된 전처리 텍스트를 배치한다.

- # 빠른 품질 확인: 빈 값이 너무 많으면 정제 규칙을 완화해야 할 수 있습니다.
그렇다고 너무 정제돼서 빈 값은 없는 정도로 전처리 하기 위해 확인하는 과정
- empty_ratio = (df['processed_text'].str.strip() == '').mean()
- 그다음에, 정제한 데이터 파일을 csv 파일로 내보낸다
- LoRA 파인튜닝 라이브러리 설치 (필수 패키지 설치)
- PEFT: Parameter-Efficient Fine-Tuning 라이브러리로 LoRA 구현 제공
- Transformers: Hugging Face의 사전학습 모델 및 Trainer API
- Accelerate: 분산 학습 및 mixed precision 지원
- 모델 및 토크나이저: 토크나이저와 베이스 모델 로드
- 한국어 BERT 모델(KLUE BERT)
- 토크나이저 로드 - 모델 이름만 주면 자동으로 그에 맞는 토크나이저 로드
- tokenizer = AutoTokenizer.from_pretrained(model_name)
- 베이스 모델의 파라미터 정보(전체 파라미터 수, 모델 크기) 확인
- LoRA 설정
- 파라미터 계산
- LoRA Config 정의: 아래 항목들 정도만 조정
- r (rank): LoRA 행렬의 랭크. 낮을수록 파라미터 수 감소
- lora_alpha: 스케일링 팩터. 학습률과 함께 조정
- target_modules: LoRA를 적용할 레이어 (BERT의 query, value attention)
- 베이스 모델의 파라미터는 동결되었고, LoRA 레이어의 파라미터를 조정하는 것
- get_peft_model() 함수: 이제 베이스 모델에 LoRA 레이어를 추가하여 PEFT 모델로 변환
- 디바이스 배치: 모델을 GPU로 이동
- 파라미터 계산
- 모델 테스트를 위한 데이터셋 준비
- KlueSentimentDataset: KLUE 감성 분석용 커스텀 데이터셋
- 데이터 분할 (Train/Val/Test)
- 학습(64%): 모델 가중치 업데이트용
- 검증(16%): 학습 중 성능 모니터링 및 조기 종료 판단
- 테스트(20%): 최종 모델 성능 평가
- 데이터셋 객체 생성(PyTorch Dataset)
- 학습 설정을 통한 모델 트레이닝 자동화
- 평가 메트릭 정의: Accuracy는 정확도 메트릭으로 모델 성능을 측정 - 감성 분석은 이진 분류이므로 정확도가 직관적인 평가 지표
- Training Arguments 설정 (학습 설정)
- learning_rate: LoRA는 2e-4가 권장 (전체 파인튜닝보다 높음)
- num_train_epochs: 3 에폭으로 과적합 방지
- eval_strategy="epoch": 매 에폭마다 검증 수행
- load_best_model_at_end: 최고 성능 모델 자동 선정
- Trainer 생성 - Hugging Face Trainer: 학습/평가 루프를 자동화하는 고수준 API
- LoRA 파인튜닝
- trainer.train(): 자동으로 에폭/배치 반복 수행하면서 트레이닝 학습을 시행한다
- 검증 데이터를 평가하면서 모델 성능 측정, 과적합 여부를 파악
- 테스트로 실전 평가
- 테스트 정확도가 실전 성능의 지표
- 분류 리포트 확인
- Precision: 유사로 예측한 것 중 실제 유사 비율
- Recall: 실제 유사 중 올바르게 예측한 비율
- F1-score: Precision과 Recall의 조화 평균
- 마지막으로, 반드시 파인튜닝 전/후 비교 (베이스라인 vs LoRA) - 같은 테스트 셋에서파인튜닝 전(베이스 모델)과 파인튜닝 후(LoRA) 성능을 비교
모델 최적화에 대하여...
비용 효율성을 고려한 최적화가 중요함
성능 하나만 보지 말고, 비용 효율성과 속도를 같이 고려해 최적화하기
(모델 최적화 - 비용, 성능, 속도에 있어서 개선을 했다는 내용을 포트폴리오에 넣는 것이 중요)
*유료 API는 토큰 사용량이 많기 때문에 필요한 때에만 사용할 수 있도록
기업 입장에서도 모델 최적화를 잘할 사람을 원함
'컴퓨터공학 + HCI > AI' 카테고리의 다른 글
| AI Agent - LangGraph로 멀티 에이전트 구현하기 (1) | 2026.01.06 |
|---|---|
| AI Agent - LangGraph로 에이전트 구현하기 (0) | 2026.01.06 |
| AI Agent - Tool(도구) 개요와 실습 (0) | 2026.01.06 |
| AI Agent 개요 및 구조 (0) | 2026.01.06 |
| 논문 리뷰 - Graph Retrieval-Augmented Generation: A Survey (2024) (0) | 2026.01.06 |
