프로젝트 아키텍처 및 기술적 핵심
WeClone 프레임워크는 사용자의 대화 이력을 학습 데이터로 변환하여 대규모 언어모델(LLM)의 개인화 스타일을 추출하는 오픈소스 파이프라인입니다. ChatGLM3-6B 백보드를 기반으로 LoRA(저순위 적응) 기술을 적용해 파라미터 효율적인 미세조정을 수행하며, 최종적으로微信 생태계 호환 봇 프로토콜에 결합됩니다. 이 구조는 방대한 전역 파라미터 갱신 대신 고정된 프론트엔드 가중치와 경량 어댑터 레이어만 업데이트하므로, 소비자용 GPU에서도 실시간 추론이 가능한 설계 철학을 따릅니다.
데이터 전처리 파이프라인
모델 성능은 입력 데이터의 정제 수준에 직접적으로 비례합니다. 원본 대화 로그를 추출할 때 PyWxDump 유틸리티를 통해 CSV 형식으로 내보낸 후, 시스템 경로 내 ./data/csv 디렉토리에 배치해야 합니다. 핵심 변환 로직은 make_dataset/csv_to_json.py 스크립트에서 동작하며, 정규식 기반 패턴 매칭을 통해 전화번호, 주민등록번호, 이메일 도메인, 외부 URL 등을 자동으로 스캔해 마스킹 처리합니다. 민감어 카탈로그(make_dataset/blocked_words.json)를 편집하면 커스텀 필터 규칙을 즉시 반영할 수 있습니다.
연속 응답 시퀀스가 포함될 경우, 데이터셋 생성기에서 세 가지 구문 분리 방식을 제공합니다:
- 쉼표 병합: 기본값으로 문장 간 간극을 줄여 일관된 토큰 스트림 유지
- 최대 길이 선별: 가장 긴 단일 문장으로 치환하여 노이즈 감소
- 히스토리 필드 주입: 이전 맥락을 명시적 컨텍스트 변수로 격리
학습 파라미터 및 메모리 최적화
모든 추론 및 학습 설정은 중앙 구성 파일(settings.json)에서 관제됩니다. 하드웨어 제약에 따른 메모리 할당 전략은 다음과 같이 단계별로 구분됩니다.
- 표준 LoRA: 어댑터 분기 활성화, 최소 16GB VRAM 기준 호환
- QLoRA 양자화: 8bit/4bit 가중치 압축 지원, 6GB 이상 환경에서 실행 가능
- 그라디언트 축적 제어:
batch_cfg.size와grad_accum.steps조합으로 가상 배치 크기 조정
{
"model_path": "./models/chatglm3-6b",
"training_cfg": {
"lr_scheduler": { "pt_phase": 1e-3, "sft_phase": 1e-4 },
"adapter_config": { "pt_rank": 2, "sft_rank": 4 },
"epoch_count": 3,
"batch_cfg": { "size": 2, "accum_steps": 4 }
},
"infer_args": {
"temperature": 0.7,
"repetition_penalty": 1.2,
"max_length": 512,
"top_p": 0.9
}
}
배포 및 인테그레이션 워크플로우
개발 환경 표준화를 위해 가상 컨테이너 분리와 의존성 사일로 설치를 권장합니다. 모델 저장소는 Hugging Face Hub 또는 ModelScope 미러에서 동기화받습니다.
# 환경 초기화 및 리포지토리 복제
conda create -y -n llm_twin python=3.10
conda activate llm_twin
git clone https://gitcode.com/GitHub_Trending/we/WeClone.git
cd WeClone
pip install -q -r requirements.txt
# 모델 가중치 다운로드 (ModelScope 리다이렉션 활성화)
export USE_MODELSCOPE_HUB=1
git lfs install
git clone https://www.modelscope.cn/ZhipuAI/chatglm3-6b.git ./models/chatglm3-6b
미세학습 실행은 단일 가속기 또는 Distributed 데이터 병렬 처리 모드로 나뉩니다. 손실 곡선(loss curve)이 약 3.5 구간에서 안정화되면 조기 종료(Early Stopping)를 적용해 과적합을 방지합니다.
# CPU/단일 GPU 전용 파이프라인
python src/train_sft.py
# Multi-GPU 분산 학습 (DeepSpeed 연동)
pip install -q deepspeed
deepspeed --num_gpus=2 src/train_sft.py
추론 계층 검증 후 실제 서비스 연동을 진행합니다. 먼저 지역 서버에서 Demo UI를 기동하고, RESTful API 게이트웨이로 노출한 뒤微信 프로토콜 핸들러와 라우팅합니다.
# 로컬 추론 인터페이스 기동
python ./src/web_demo.py
# HTTP API 엔드포인트 열기
python ./src/api_service.py
#微信 클라이언트 연결 및 메시지 라우팅
python ./src/wechat_bot/main.py
※微信 플랫폼 정책상 비정상 접속 탐지 시 계정 제한이 발생할 수 있으므로, 테스트용 보조 계정을 사용하고 결제 연동 상태(active payment binding)를 확인해야 합니다.
고급 추론 컨트롤 및 성능 튜닝
프롬프트 템플릿(src/template.py)을 수정하면 시스템 역할 정의(System Prompt)를 재구성할 수 있습니다. 예시로 "너는 사용자의 디지털 어시스턴트로, 해당 사용자의 구어체 표현과 논리 전개 방식을 정확히 재현해야 한다"를 설정하여 어조 일치도를 높일 수 있습니다.
추론 단계 하이퍼파라미터 조정 지침:
temperature확률 분포 평활화. 값이 낮을수록 결정론적 출력 증가repetition_penalty동일 토큰 순환 억제. 1.0 초과 시 단절 반복 감소top_p누적 확률 커팅. 다양성과 통제력 간 트레이드오프 조절max_length최대 시퀀스 폭 제한. 오버플로우 방지 및 지연 시간 단축
시스템 부하가 높은 환경에서는 동적 버핑(dynamic batching)을 활성화하고, 메모리 풀(garbage collection) 빈도를 높여 GC停顿 시간을 최소화합니다. 실제 서비스 환경에서는 A/B 테스트 방식으로 파라미터 조합을 회귀 검증하는 것이 권장됩니다.
검증 체크리스트 및 에러 해결
출력 전 필수 검증 항목
- ✅ Python 런타임 버전 3.8 이상 호환 확인
- ✅
settings.json내model_path실제 디스크 경로 매칭 - ✅ CSV → JSON 전환 로그에서 누락된 행 0건 확인
- ✅ 민감 정보 대체 문자열 정상 적용 여부
- ✅ GPU 메모리 여유율 15% 이상 확보 상태
빈도 발생 장애 및 대응
- OOM(Runout Memory) 오류: 양자화 모드 강제 활성화 또는
batch_cfg.size값을 절반 이하로 하향 조정 - 생성 품질 저하: 학습 집합의 도메인 편차 확인, 잡음 제거 필터 강도 상승 또는 추가 샘플 수집
- 클라이언트 로그인 실패: 2단계 인증 해제 여부, 네트웍 라우팅 설정, 활성 결제 수단 존재 여부 종합 점검
확장성 연구 방향
기본 파이프라인 완료 후에는 데이터셋 변형 실험을 통해 단일utterance와 multi-turn 대화의 임베딩 거리 차이를 비교 분석할 수 있습니다. 여러 사용자 로그를 혼합해 범용적 스타일 adapters를 훈련하거나, src/evaluate.py 훅을 활용한 BLEU/ROUGE/Latency 메트릭 모니터링 체계를 구축할 수 있습니다. 마지막으로 src/wechat_bot/handler/ 레이어에 파일 전송, 이미지 OCR, 스케줄 알림 등 커스텀 메시지 타입 라우터를 플러그인 형태로 추가하면 서비스 기능을 확장할 수 있습니다.