모델 추론 성능 최적화 - 100-hours-a-week/20-real-wiki GitHub Wiki
모델을 검토함에 있어 아래 기준을 중심으로 모델 후보군을 구성하였으며, 이 중 KULLM3,Qwen2.5-14B-Instruct 그리고 Qwen2.5-7B-Instruct를 유력 후보로 선정하여 비교 및 테스트를 진행하였습니다.
기준 항목 | 설명 |
---|---|
1. 모델 크기 대비 성능 | 7B~14B 범위 내에서 성능 효율이 우수한 모델 선호 |
2. 양자화 가능 여부 | GGUF, GPTQ 등으로 경량화 및 배포 가능성 |
3. 한국어 지원 | 한국어 instruction-following 및 응답 품질 |
4. 확장성 | Streaming 출력 지원, LangChain / RAG 구조 연동 가능 여부 |
항목 | KULLM3 | Qwen2.5-14B Instruct | Qwen2.5-7B Instruct |
---|---|---|---|
모델 크기 | 10.7B | 14B | 7B |
한국어 지원 | ✅ (한국어 특화) | ✅ (멀티랭귀지) | ✅ (멀티랭귀지) |
T4 호환성 | ✅ | ✅ | ✅ |
양자화 가능 여부 | 🔄 직접 변환 필요 | ✅ (GGUF 다수 제공) | ✅ (GGUF 다수 제공) |
Streaming 지원 | ✅ | ✅ (TextStreamer) | ✅ (TextStreamer) |
LangChain 연계 | ✅ | ✅ | ✅ |
라이선스 | Apache 2.0 | Apache 2.0 | Apache 2.0 |
- KULLM3는 고려대학교 NLP&AI 연구실에서 개발한 고성능 한국어 언어 모델
- Instruction Following 성능에서 GPT-3.5-turbo 수준에 근접
- 한국어와 영어를 모두 지원하며, 자연스러운 대화가 가능
- 공개된 한국어 특화 모델 중 최상위 성능
- Apache 2.0 라이선스로 상업적 활용 가능
- SOLAR-10.7B-v1.0 기반 파인튜닝
항목 | 설명 |
---|---|
타입 | Causal Language Model (자연어 생성형) |
학습 과정 | SOLAR-10.7B 기반 파인튜닝 지시응답 데이터 기반 Post-training 수행 |
지원 언어 | 한국어, 영어 |
기반 모델 | upstage/SOLAR-10.7B-v1.0 |
학습 데이터 | vicgalle/alpaca-gpt4 + 한국어 지시 응답 데이터 (gpt 기반 + 수작업 혼합) |
데이터량 | 약 66,000개 이상의 예제 사용 |
라이선스 | Apache 2.0 |
시스템 프롬프트 | "당신은 고려대학교 NLP&AI 연구실에서 만든 AI 챗봇입니다..." 등 고정 프롬프트 사용 |
- Qwen2.5는 알리바바에서 만든 최신 대규모 언어 모델 시리즈
- 파라미터 크기: 0.5B ~ 72B까지 다양한 사이즈 공개
- 2.5시리즈는 다음 분야에서 특히 향상됨
- 코딩 및 수학 능력 대폭 향상 (전문 모델 활용)
- Instruction following (지시 따르기) 성능 개선
- 8K 이상 긴 텍스트 생성 성능 향상
- 표나 JSON 같은 구조화 데이터 이해/생성 능력 증가
- 시스템 프롬프트 다양성에 대한 강건함 (역할극, 조건 설정에 유리)
- 멀티 languages 지원: 한국어 포함 29개 언어 이상
- 긴 문맥 지원: 최대 128K 토큰 읽기, 최대 8K 토큰 생성
항목 | 설명 |
---|---|
타입 | Causal Language Model (자연어 생성형) |
학습 과정 | 사전학습(Pretraining) + 지시응답 튜닝(Post-training) |
파라미터 수 | 총 14.7B (비임베딩 파라미터: 13.1B) |
레이어 수 | 48개 |
어텐션 구조 | GQA (Grouped Query Attention) Q: 40개, KV: 8개 |
컨텍스트 길이 | 입력: 131,072 tokens 생성: 최대 8,192 tokens |
아키텍처 구성 | RoPE, SwiGLU, RMSNorm, Attention QKV Bias 포함 |
- Qwen2.5-7B-Instruct는 알리바바에서 개발한 Qwen 2.5 시리즈 중 하나로, **지시 기반 응답(Instruct)**에 최적화된 7B 규모의 언어 모델입니다.
-
Qwen2.5 시리즈는 다음 분야에서 두드러진 성능 향상을 보입니다:
- 긴 텍스트 생성 및 문맥 유지 능력 (8K 토큰 생성)
- 29개 이상 언어 지원, 한국어 포함
- 지시 따르기 (Instruction Following) 능력 강화
- 다양한 시스템 프롬프트 대응력 (역할극, 조건 기반 설정에 강함)
- 구조화된 데이터 처리 능력 향상 (JSON, 표 등)
- 코딩 및 수학 능력 향상 (전문적인 코드 이해 및 생성)
항목 | 설명 |
---|---|
타입 | Causal Language Model (자연어 생성형) |
학습 과정 | 사전학습(Pretraining) + 지시응답 튜닝(Instruct Tuning) |
파라미터 수 | 총 6.9B (임베딩 제외 약 6.4B) |
레이어 수 | 32개 |
어텐션 구조 | GQA (Grouped Query Attention) – Query: 32개 / KV: 8개 |
컨텍스트 길이 | 입력 최대 131,072 tokens, 생성 최대 8,192 tokens |
지원 길이 | 최대 128K 토큰 문맥 처리 가능, 8K 토큰 생성 최적화 |
아키텍처 구성 | RoPE 위치 인코딩, SwiGLU 활성화 함수, RMSNorm 정규화, QKV Bias 적용 |
📝 질문 목록: 한국말 할 줄 알아?―우리말 잘하는 LLM
1. 한국말 할 줄 알아?
💯 평가 능력: 한국어로 대화가 가능한지 확인하기 위한 기본 질의입니다.
2. 누구냐 너
💯 평가 능력: 모델의 자기 정체성, 역할 인식, 시스템 프롬프트 반영 여부 등을 판단하기 위한 질문입니다.
3. ‘고구마’로 삼행시를 지어줘
💯 평가 능력: 모델의 창의성과 한국어 운율 기반 생성 능력을 확인하기 위한 창의 표현 요청입니다.
4. 끝말잇기를 하자. 내가 먼저 할게. 칼슘
💯 평가 능력: 한국어 단어 규칙 이해, 언어 기반 게임 규칙 적용 가능 여부 확인을 위한 테스트입니다.
5. 철수는 하루에 치킨 100마리를 튀기고 민수는 하루에 치킨 60마리를 튀긴다. 누가 더 일을 잘하지?
💯 평가 능력: 수치 기반 비교 질문을 통해 단순 판단력 또는 비판적 사고 능력을 평가하는 항목입니다.
6. 다음 텍스트를 공식적인 어조로 바꿔줘.
저번 아티클에서 저의 팀이 개발한 프로그램을 소개해 드렸어요. 이번 글에서는 구체적인 프로그램 사용법과 저희 팀에서 활용한 사례를 보여드릴게요. 저희는 다양한 콘텐츠를 제작하고 있어요. 어렵고 복잡한 내용들이 많아서 주제를 표현할 수 있는 상징적인 소재로 일러스트를 많이 만들어요. 예를 들어 '상승하는 코인 가격'을 이야기하는 콘텐츠라면, '코인이 공중에 떠다니는 모습'으로 주제를 한 장에 표현할 수 있을 것 같아요.💯 평가 능력 : 비격식 문장을 격식체로 변환할 수 있는지, 맥락과 톤 조절 능력을 평가하기 위한 문장 스타일 변환 요청입니다.
번호 | 질문 요약 | KULLM3 | Qwen2.5-14B | Qwen2.5-7B |
---|---|---|---|---|
1 | 한국말 할 줄 알아? | 4.19 | 12.61 | 0.72 |
2 | 누구냐 너 | 2.38 | 2.94 | 1.52 |
3 | '고구마'로 삼행시 지어줘 | 3.90 | 2.35 | 3.24 |
4 | 끝말잇기 하자. 내가 먼저 할게: 칼슘 | 7.72 | 5.52 | 1.53 |
5 | 치킨 100마리 튀기는 철수 vs 60마리 튀기는 민수, 누가 더 잘해? | 8.80 | 13.15 | 11.16 |
6 | 프로그램 소개글을 공식적인 어조로 바꿔줘 | 20.16 | 12.61 | 4.04 |
번호 | 질문 요약 | KULLM3 | Qwen2.5-14B | Qwen2.5-7B |
---|---|---|---|---|
1 | 한국말 할 줄 알아? | 20.00 GB | 27.53 GB | 14.19 GB |
2 | 누구냐 너 | 20.00 GB | 27.54 GB | 14.19 GB |
3 | '고구마'로 삼행시 지어줘 | 20.00 GB | 27.53 GB | 14.19 GB |
4 | 끝말잇기 하자. 내가 먼저 할게: 칼슘 | 20.00 GB | 27.55 GB | 14.19 GB |
5 | 치킨 100마리 튀기는 철수 vs 60마리 튀기는 민수 | 20.18 GB | 27.57 GB | 14.19 GB |
6 | 프로그램 소개글을 공식적인 어조로 바꿔줘 | 20.18 GB | 27.58 GB | 14.19 GB |
질문 6: 철수가 하루에 치킨 100마리를 튀기고, 민수가 60마리를 튀긴다면 누가 더 일을 잘하는가?
철수가 하루에 치킨 100마리를 튀기고 민수가 하루에 치킨 60마리를 튀긴다면, 철수가 더 많은 양의 치킨을 튀겨서 더 많은 일을 잘하고 있다고 볼 수 있습니다. 따라서 철수가 더 일을 잘한다고 할 수 있습니다.
철수와 민수가 각각 하루에 튀기는 치킨의 수만으로 일을 잘하는지 판단하기는 어렵습니다. 일을 잘하는지 평가하기 위해서는 다음 요소들을 고려해야 합니다:
- 품질: 치킨의 맛과 질
- 효율성: 자원 및 시간 사용
- 생산성: 작업량과 추가 책임
- 안전성: 작업 중 안전 여부
단순한 수치로 판단할 수 없으며, 다양한 요소를 종합적으로 고려해야 한다는 결론.
철수와 민수가 모두 뛰어난 튀김 기술을 가졌다고 가정하면, 누가 더 효과적인지는 다음과 같은 요소에 따라 달라집니다:
- 생산성: 철수가 더 많이 튀김. 그러나 기계나 공간 제약 고려 필요
- 질과 서비스: 민수는 품질 및 고객 만족에 더 적합할 수 있음
- 경험과 능력: 숫자뿐 아니라 기술과 경험의 조합이 중요
- 효율성: 자원 사용 측면에서 철수의 대량 생산이 장점이지만, 손실 가능성도 있음
결론적으로, 다양한 요소를 고려해야 하며, 단순 수치로는 판단 불가
- KULLM3: 빠르지만 단편적인 판단, 정량 비교에는 강함, 맥락 해석은 한계
- Qwen2.5-14B-Instruct: 고성능이지만 무거움, 가장 논리적인 응답 제공
- Qwen2.5-7B-Instruct: 응답 품질과 속도, 자원 효율성의 균형이 가장 뛰어남. 실사용에 적합한 모델로 판단됨
저희는 여러 LLM 후보 모델(KULLM3, Qwen2.5-14B, Qwen2.5-7B)을 비교 실험한 끝에, 최종적으로 Qwen2.5-7B-Instruct를 선택하게 되었습니다.
이 모델은 가벼운 사이즈와 빠른 응답 속도, 그리고 우수한 한국어 대응 능력을 고루 갖춘 모델로, 실사용 환경에 가장 적합하다고 판단되었습니다.
-
빠른 응답 속도 (GPU 기준)
- 동일 환경에서 실험한 결과, 세 모델 중 가장 빠른 응답 속도를 보였습니다.
- 실시간 응답이 중요한 AI 어시스턴트 서비스에 매우 적합합니다.
-
가벼운 구조 + 우수한 품질
- 7B 크기의 모델이지만, 복합적인 질문에 대한 이해력과 응답 완성도 모두 우수했습니다.
- 특히 Qwen2.5-14B와 유사한 수준의 문장 완성도를 보이며, 서비스 품질을 충분히 만족시킬 수 있었습니다.
-
운영 환경에 적합한 조건 충족
- GPU 메모리 약 14.19GB 수준으로 클라우드 운영 비용 측면에서도 부담이 적습니다.
-
한국어 포함 멀티링구얼 지원, LoRA 기반 커스터마이징 가능, 128K 컨텍스트 길이 지원 등
실 서비스 적용을 위한 조건을 모두 충족했습니다.
서비스에 Qwen 기반 LLM을 도입하면서, 실제 실험 과정에서 몇 가지 병목 요소가 드러났습니다.
이에 대한 원인과 해결 방안을 정리하고, 기대되는 효과까지 함께 정리해보았습니다.
-
현상 설명
- 긴 문장 입력 시, 응답 결과가 중국어로 출력되는 문제가 발생
- 질문 이해 및 응답 내용은 정상이나, 출력 포맷 오류로 판단됨
-
현상 설명
-
Qwen2.5-7B-Instruct
는 중형 LLM으로, VRAM 10GB 이상 필요 - 클라우드 환경에서는 GPU 비용이 높아 리소스 부담이 큼
-
-
현상 설명
- CPU 기반 추론 시 수 분 지연 발생
- 구조적으로 CPU 호환은 되나, 서비스에 부적합한 속도로 실시간 대응 어려움
병목 요소 | 해결 방법 |
---|---|
1. 출력 언어 오류 | - 입력 길이에 따라 max_tokens 동적 조정- "한국어로 응답하세요" 등 명확한 프롬프트 삽입- LoRA 기반 튜닝으로 한국어 출력 강화 |
2. GPU 리소스 부담 | - 자주 요청되는 입력 캐시 저장 - 모델 재추론 최소화 |
3. CPU 환경 지연 | - 비동기 처리 도입 (Async 기반 응답 처리) - llama.cpp , vLLM , DeepSpeed 등 서빙 프레임워크 최적화 검토
|
- 프롬프트 튜닝 및 LoRA 기반 한국어 응답 학습을 통해
→ 긴 입력에도 포맷 오류 없이 자연스러운 한국어 출력 가능
- LoRA만 추가해도 14B 모델 수준의 성능에 근접 가능
→ 경량 모델로도 운영 효율성과 품질을 동시에 확보
- 비동기 처리 &
llama.cpp
,vLLM
,Triton
,DeepSpeed
등 서빙 프레임워크 활용
→ GPU 없는 환경에서도 실용적인 성능 보장
→ 비용 절감 + 유지보수 효율 향상
항목 | 최적화 전 | 최적화 후 |
---|---|---|
한국어 출력 안정성 | 일부 중국어 출력 발생 | 모든 응답 안정적으로 한국어 출력 |
메모리 사용량 (GPU) | 평균 14.19 GB | 10GB 이하로 감소 기대 |
응답 속도 | 평균 3.70초 | 반복 질문 시 캐시 활용으로 실시간 응답 |
서비스 적용성 | GPU 의존 / 비용 부담 존재 | CPU 기반 실행 가능성 확보 → 비용 효율성 향상 |