아키텍처 설계
전체 아키텍처
┌─────────────────────────────────────────────────────────────────┐
│ Ego Pod (자아 의식 캡슐) │
│ │
│ ┌───────────┐ ┌───────────┐ ┌───────────┐ ┌────────┐ │
│ │ 데이터 수집기│───→│ 코퍼스 빌더 │───→│ 훈련 엔진 │───→│버전 관리│ │
│ │ Collector │ │ Compiler │ │ Trainer │ │ Vault │ │
│ └───────────┘ └───────────┘ └───────────┘ └────────┘ │
│ ↑ ↓ │
│ ┌─────────┐ ┌──────────┐ │
│ │데이터 소스 설정│ │ Ego 출력 │ │
│ │ Sources │ │ Editions │ │
│ └─────────┘ └──────────┘ │
│ │
│ ┌──────────────────────────────────────────────────────────┐ │
│ │ 설정 센터 (Config) │ │
│ │ 베이스 선정 · Edition 정의 · 훈련 파라미터 · 데이터 소스 매핑 · 스케줄 │
│ └──────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────┘
모듈 설명
1. 데이터 수집기 (Collector)
설정에서 지정된 데이터 소스로부터 호스트 데이터를 읽습니다.
지원 데이터 소스 유형:
- 로컬 디렉토리 (파일 시스템 경로)
- URL (HTTP/HTTPS 엔드포인트)
- 클라우드 스토리지 (S3, OSS, Google Drive 등, 플러그인으로 확장)
- 커스텀 어댑터 (사용자가 수집 플러그인 작성 가능)
수집 데이터 카테고리 (iFay 아키텍처 대응):
| 데이터 카테고리 | 대응 iFay 모듈 | 현실 예시 |
|---|---|---|
| 감지 데이터 | Sense | 매일의 운동 궤적, 스마트폰 사용 시간 분포, 자주 가는 식당 위치, 수면 시간 패턴 |
| 행동 데이터 | Action | 스마트폰 조작 습관 (항상 카카오톡을 먼저 보고 이메일을 봄), 자주 사용하는 단축 명령, 자동화 스크립트 |
| 인지 데이터 | Thought | 독서 노트, 업무 일지, 학습 메모, 기술 방안에 대한 평가와 사고 과정 |
| 스킬 데이터 | Skill | 사용 가능한 프로그래밍 언어와 숙련도, 잘하는 레시피, 연주 가능한 악기와 곡목 리스트 |
| 인증 데이터 | Credentials | 신원 식별자, 인가 범위 (예: 대신 이메일은 보낼 수 있지만 송금은 불가), 권한 경계 |
예를 들어: 프리랜서 번역가의 Collector 설정은 이렇게 될 수 있습니다——Sense는 번역 메모리 (로컬 디렉토리)를 가리키고, Action은 CAT 도구의 조작 로그 (URL)를 가리키고, Thought는 용어 노트 (클라우드 스토리지)를 가리키고, Skill은 언어 쌍과 전문 분야 리스트 (로컬 파일)를 가리킴.
Collector는 데이터의 내부 형식에는 관심이 없으며 (그것은 자매 프로젝트가 정의), "어디서 가져올지"와 "가져온 것이 어떤 카테고리의 데이터인지"에만 관심이 있습니다.
2. 코퍼스 빌더 (Compiler)
수집된 원시 데이터를 LoRA 훈련에 사용 가능한 코퍼스로 변환합니다.
핵심 책임:
- 데이터 클렌징 및 비식별화 — 특히 Credentials 관련 데이터. 예: API 키
sk-abc123...이[REDACTED]로 대체되어, 훈련 데이터에 민감 정보가 포함되지 않도록 보장 - 형식 표준화 — 훈련 프레임워크가 수용 가능한 형식으로 통일. 예: 독서 노트 "이 책은 분산 시스템의 CAP 정리에 대해..."가
{"instruction": "CAP 정리를 설명해", "output": "CAP 정리는 분산 시스템의..."}로 변환 - 코퍼스 분류 — LoRA 레이어별 그룹화. 예: "아메리카노를 좋아해"는 선호 레이어에, "2024년에 일본 여행 갔어"는 기억 레이어에, "Python의 GIL 메커니즘은..."은 지식 레이어에 분류
- 품질 필터링 — 노이즈 데이터, 중복 데이터 제거. 예: 중복 채팅 기록은 하나만 유지, 너무 짧은 단편 ("응", "알겠어" 등)은 필터링
- 데이터 증강 — 필요 시 템플릿이나 리라이팅으로 코퍼스 확충. 예: 원시 데이터 "노래 추천해줘"가 "다른 방식으로 표현해: 노래 추천해줘", "바꿔 말해: 노래 추천해줘"로 증강
출력 형식:
- 표준 지시 파인튜닝 데이터셋 (instruction/input/output 삼중조)
- 대화 형식 데이터셋 (multi-turn conversation)
- LoRA 레이어별 그룹화된 서브 데이터셋
3. 훈련 엔진 (Trainer)
선정된 베이스와 구축된 코퍼스를 기반으로 LoRA 어댑터를 훈련합니다.
멀티 백엔드 자동 적응:
Trainer는 하드웨어 환경을 자동 감지하여 최적의 훈련 백엔드를 선택합니다:
| 우선순위 | 백엔드 | 적용 환경 | 속도 |
|---|---|---|---|
| 1 | Unsloth | NVIDIA GPU (CUDA) | 최고속 (2x 가속) |
| 2 | HuggingFace PEFT | NVIDIA GPU (CUDA) | 표준 속도 |
| 3 | Apple MLX | Mac (Apple Silicon) | 네이티브 가속 |
| 4 | HuggingFace PEFT | CPU만 | 느리지만 범용 |
| 5 | Stub | ML 의존성 없음 | 시뮬레이션 모드 (개발/테스트용) |
어떤 백엔드를 사용하는지 신경 쓸 필요 없습니다——Ego Pod가 자동 선택합니다. RTX 4090이 있으면 Unsloth로 가속, MacBook Pro M3라면 MLX 사용, 먼저 흐름만 시험해 보고 싶다면 Stub 모드로 시뮬레이션 훈련.
훈련 흐름:
- 베이스 모델 로드 (4-bit 양자화)
- LoRA 레이어별 순차 어댑터 훈련
- 훈련 효과 검증 (자동 정렬도 평가)
- 각 edition에 대응하는 베이스+LoRA 조합 생성
다중 Edition 훈련 전략:
- 각 edition은 다른 규모의 베이스 사용
- 동일 코퍼스로, 다른 베이스에 대해 각각 LoRA 훈련
- 다중 edition 병렬 훈련 가능
예를 들어: GPU가 장착된 데스크톱 PC에서
ego train을 실행하면, Ego Pod가 스마트워치 (lite), 스마트폰 (normal), PC (plus)의 세 버전 LoRA를 동시에 훈련합니다. 전체 과정은 약 10-30분, 데이터 양에 따라 다름.
4. 버전 관리 (Vault)
Ego 모델의 버전과 출력을 관리합니다.
책임:
- 각 훈련에서 생성된 LoRA 어댑터 저장
- 다중 edition의 모델 파일 관리
- 버전 롤백 지원 (이력 버전 보존)
- 이전 버전 덮어쓰기 (기본 동작)
- 배포 가능한 Ego 패키지로 내보내기
예를 들어: 지난주에 Ego를 훈련하고 (v0.1.0), 이번 주에 새 데이터를 추가하여 재훈련 (v0.2.0). 새 버전의 응답 스타일이 변해서 당신답지 않게 됨. 이때 원클릭으로 v0.1.0으로 롤백 가능. 스마트폰 OS 다운그레이드처럼.
Ego 패키지 구조:
ego-output/
├── manifest.json # Ego 메타데이터 (버전, 베이스 정보, edition 목록)
├── lite/
│ ├── config.json # edition 설정 (베이스 모델명, 양자화 방식, 하드웨어 요구사항)
│ └── adapters/
│ └── ego-lora.safetensors # LoRA 어댑터 가중치
├── normal/
│ ├── config.json
│ └── adapters/
│ └── ego-lora.safetensors
├── plus/
│ ├── config.json
│ └── adapters/
│ └── ego-lora.safetensors
├── super/
│ ├── config.json
│ └── adapters/
│ └── ego-lora.safetensors
└── [custom-name]/ # 사용자 커스텀 edition
├── config.json
└── adapters/
└── ego-lora.safetensors
5. 설정 센터 (Config)
Ego Pod의 모든 설정을 통합 관리합니다.
설정 항목:
# ego-config.yaml 예시
# 데이터 소스 매핑 — Ego Pod에 데이터 위치를 알려줌
sources:
sense:
type: "local"
path: "/data/ifay/sense/" # 감지 데이터 디렉토리
action:
type: "url"
endpoint: "https://api.example.com/action-logs" # 행동 로그 API
thought:
type: "local"
path: "/data/ifay/thought/" # 노트와 지식 베이스
skill:
type: "s3"
bucket: "ifay-skills" # 클라우드 스킬 데이터
prefix: "user-001/"
credentials:
type: "local"
path: "/data/ifay/credentials/" # 인증 데이터 (자동 비식별화)
# 훈련 파라미터 — 보통 수정 불필요, 기본값이 대부분의 시나리오에 적합
training:
method: "qlora"
quantization: "4bit"
lora_rank: 16
lora_alpha: 32
learning_rate: 2e-4
epochs: 3
batch_size: 4
# Edition 정의 — 출력하고 싶은 버전
editions:
lite:
base: "qwen3.5-0.8B"
description: "스마트워치, 녹음기, 드론, IoT"
normal:
base: "qwen3.5-2B"
description: "스마트폰, 태블릿"
plus:
base: "qwen3.5-4B"
description: "고성능 PC, 로컬 서버"
super:
base: "qwen3.5-27B"
description: "클라우드 서비스, GPU 클러스터"
# 커스텀 edition 추가 가능, 예:
# clinic:
# base: "qwen3.5-4B"
# description: "외래 진료 전용 버전"
# 스케줄 전략 — 언제 자동 재훈련할지
schedule:
auto_update: true
interval: "weekly" # 매주 자동 수련
trigger: "data_change" # 또는 manual (수동 트리거) / cron (정기 작업)
