Report
0. Overview
이 Report는 Edge Device 환경의 토마토 Smart Farm에서 Real-time inference가 가능한 Domain-specific SLM 개발 과정을 기술한다. Model 경량화와 성능 최적화를 위해 아래와 같은 4 단계 Pipeline을 적용한다.
- Dataset Construction
- Pruning
- LoRA Fine Tuning
- Quantization 해당 파이프라인을 통해 제한된 하드웨어 리소스 내에서 안정적인 성능 확보가 주 목표이다.
1. Dataset Construction
Domain-specific Model 학습을 위해 토마토 재배 환경에 대한 QA Dataset을 구축한다.
1.1. Data 수집
- 농촌진흥청: 토마토 재배 가이드
- Cornell Extension 병해충 메뉴얼
- ??
- ??
- ??
1.2. Data Synthesis
- Opus 4.1을 활용해 QA Data 합성
- Category
- 생육 관리
- 병해충
- 온습도
- 비료
- 조명
- 이산화탄소
1.3. Data Format(Prompt)
Q: [STATUS: {SENSOR_STATUS}] {UESR_QUESTION}
A: [{WARNING}] {ANSWER}
1.4. Quality Verification
데이터 신뢰도 및 품질 향상을 위해 아래와 같은 3단계 검증을 수행한다.
- Structure: 모든 데이터가 유효한 JSON 구조와 필수 필드를 갖추었는지 검증
- Deduplication: 코사인 유사도 0.85 이상인 중복 항목 127개 제거
- Terminology Verification: 자체 구축 Terminology dictionalry(1,247개)과 일치율 검증하여 평균 87.3% 달성 70% 미만 Sample 폐기
2. Pruning
Model Parameter 수를 줄여 inference efficiency 증대 위해 Pruning을 적용한다.
- 대상: Feed-Forward Network(FFN)의 Neuren만 제거 대상
- 이유 및 증거가 타당하지 않음
- 보존: Attention Head는 Layer 당 4개로 수가 적어 제거 시 성능 저하가 크기에 보존
- 증거 자료 필요
- 결과: 25%의 Pruning Rate가 성능과 Model Size 간 최적 균형점임을 확인
- Total Parameter 수 14.5% 감소
2.1. Nueren Importance
| 지표 | 가중치 | Description |
|---|---|---|
| Average Activation | 0.8 | 지속적으로 활성화되며 Model 핵심 기능에 기여하는 Nueren 보호 |
| Maximum Activation | 0.1 | 특정 상황에서만 반응하는 Nueren을 보조 지표로 활용 |
| Activity Ratio | 0.1 | Dead Neuren 식별 및 우선 제거 |
2.2. Layer-wise Difference Protection Strategy
| Layer Group | Landscape | Scale | Description |
|---|---|---|---|
| 초기 Layer | 0-8 | 0.2 | 범용 언어 패턴 담당하므로 적극적 Pruning |
| 중간 Layer | 9-17 | 1.0 | 기준 강도 Pruning |
| 후기 Layer | 18-25 | 2.2 | 도메인 특화 지식이 집중되어 있어 최대한 보호 |
2.3. Stability Measures
- Layer 당 최소 800개 Nueren 유지
- 이 수치인 이유 없음
- Layer 당 최대 제거율 30%로 제한
- 이 수치인 이유 없음
- 특정 레이어 주변 제거량 50%로 축소해 급격한 변화 방지
- 이 수치인 이유 없음
- Dead Neuron 우선 제거
3. LoRA Based Fine-Tuning
Pruned Model에 적용하여 개별 효과를 정량적으로 파악할 수 없다.
3.1. Best Hyperparameter
| Item | Value |
|---|---|
| Target Modules | q, k, v, o, up, down, gate_proj |
| LoRA Rank | 16 |
| LoRA Alpha | 2(Hardware) |
| Gradient Accumulation Steps | 8(실질 Batch Size 16) |
| Epochs | 3 |
3.3. Rank Expreiment Results
| Rank | Number of Learning Parameter | BLEU | ROUGE-L |
|---|---|---|---|
| 4 | 약 0.8M | 0.0912 | 0.1985 |
| 8 | 약 1.6M | 0.1157 | 0.2193 |
| 16 | 약 3.2M | 0.1343 | 0.2384 |
| 32 | 약 6.4M | 0.1351 | 0.2399 |
| Rank 16이 효율 및 성능 최적 균형점으로 판단하여 최종 채택 |
4. Quantization
- Merge Model: Pruned Model에 학습된 LoRA Adapter를 Merge해 Total Model 생성
- Change Format: Total Model을 llama.cpp를 이용해 GGUF Format으로 변환
- Quantization: GGUF Model에 Q4_K_M Quantization 적용
4.1. Q4_K_M Method
다른 기법에 대한 언급이나 시도가 없음(최적이 아닐 수 있음) 가중치를 4bit로 압축하면서도 Block 별 Scale과 Zero-point를 유지하는 Block-wise Quantization.
- Memory 절감: 기존 F32 Model 대비 메모리 사용량 약 4배 감소
- 정밀도 손실 최소화
5. Conclusion
- Pruning: Parameter 14.5% 제거
- LoRA Fine Tuning: 손실된 성능 복원 및 Domain 지식 주입
- 4Bit Quantization: Memory 사용량 75% 절감 시도하지 않았으나 단순 연산 상 Raspberry Pi와 같은 저전력 Edge Device에서 Real-time inference가 가능할 것으로 예상