# 교수님 피드백 (2025-12-18)

**일시**: 2025-12-18  
**주제**: On-Device 배포를 위한 메모리 최적화

---

## 핵심 피드백

### 1. 모델 리소스 최적화

**현재 문제점**:
- Jetson에서 실제로 들어가는 메모리가 16GB를 초과할 가능성
- FP16 → INT8로 변경하여 학습 필요

**목표**:
- 실제 모델 메모리 측정 필요
- 16GB에 가능할지 평균 메모리 소요를 봐야함
- 64를 이식하는 걸 고려

**RoboVLMs 실제 사용량 확인 필요**

---

## 견적 (제안된 구성)

### On-Device를 위한 "현실적" 구성 (권장)

**(2) INT8 Vision + INT4 LLM (권장 시나리오)**

예: LLM 1.3B~3B + ViT-B

| 구성 | 메모리 |
|------|--------|
| LLM 3B INT4 | ~1.5 GB |
| Vision Encoder INT8 | ~0.8~1.2 GB |
| Activation | ~1.5~2 GB |
| KV Cache (256 tokens 제한) | ~0.8~1.5 GB |
| TensorRT / CUDA | ~2 GB |
| OS + ROS2 | ~2~3 GB |

**👉 총합: 약 8~11 GB**

---

## 장비 입고 예정

- **디벨로퍼 kit**: 1월 2일날 입고, 그 다음주에 도착할 듯 (1월 첫째주~둘째주)
- **로봇**: 12월 말 도착 예정

---

## Todo

### On-device를 위해서 리소스 줄이기

**핵심 목표**:
- 어떻게든 메모리 리소스를 줄여서 온디바이스화를 해야함
- Action head는 놔두더라도
- **On-device를 성공시켜야 의미가 있을 듯함**

**논문 기여**:
- 이 경량화 과정을 논문에 집어넣어도 됨

---

## 제안된 수정 구조

### RoboVLM 원 구조

```
Image
→ Vision Encoder (FP16)
→ Vision-Language Fusion
→ LLM (FP16)
→ Action Head
```

### 수정 후 (현실적)

```
Image
→ Vision Encoder (INT8, frozen)
→ Embedding projection (FP16)
→ LLM (FP16, frozen)  ← 학습 시
→ Action Head (FP16)  ← 학습 대상
→ [학습 종료 후]
→ LLM INT4 / Vision INT8 (추론)
```

---

## 수정 포인트

### Vision Encoder를 INT8로 쓰려면

**📌 수정 위치**: `vision_encoder.py` - `load_pretrained_vision_model()`

**해야 할 것**:
1. Vision Encoder frozen
2. PTQ or QAT 적용
3. TensorRT or fake quantization

**예시 (PyTorch)**:
```python
for p in vision_encoder.parameters():
    p.requires_grad = False

vision_encoder.eval()
```

---

## 구현 상태 (2025-12-19)

✅ **완료**:
- Vision Encoder INT8 양자화 스크립트
- LLM INT4 양자화 스크립트
- Calibration 데이터 준비 로직
- 정확도 검증 스크립트
- Inference server 양자화 모델 로딩 지원
- 실행 가이드 문서

🔜 **다음**:
- Billy 서버에서 양자화 실행
- Jetson 배포 및 메모리 실측
- 로봇 통합 테스트
