
Projects
BizKit AI 모델 선택과 벤치마크
명함 배경 생성·자기소개·임베딩 검색에 사용할 모델을 비교한 조건과 결과, 모델 선택과 구현 설정의 차이를 정리한다.
기능별 모델 선택
BizKit에는 명함 배경 생성, 자기소개와 GitHub 활동 분석, 임베딩 검색처럼 서로 다른 모델이 필요했다. 나는 이미지 생성·LLM·임베딩 모델을 비교했다. VLM OCR 모델 비교는 내 담당이 아니었다.
모델을 고를 때는 서비스에서 맡길 역할을 먼저 나눴다. 명함의 글자는 별도 렌더러로 배치하고, 점수 계산은 정형화할 수 있는 지표에 한정했다. 다만 이 구분이 처음부터 완성돼 있었던 것은 아니다. GitHub 활동을 6각 차트로 보여주는 HEX에서는 LLM의 점수 보정도 계획했다. 근거 부족을 인정하고 방향을 바꾼 과정은 개발 회고에 정리했다.
이미지 생성, LLM, 임베딩은 서로 다른 환경과 평가셋에서 비교했다. 기능별 비교 조건은 다음과 같다.
| 영역 | 실행 환경 | 평가셋 | 비교 내용 |
|---|---|---|---|
| 이미지 생성 | Colab A100 중심, Qwen-Image는 H100, Gemini는 외부 API | 프롬프트 3종 | 서로 다른 실행 조건에서의 배경 생성 비교 |
| LLM | RunPod Serverless L40 | HEX 10개·Job 10개 | 출력 품질과 응답 시간 |
| 임베딩 | 오프라인 비교와 Milvus 통합 | corpus 100개, 과제별 평가셋 | 검색·분류 지표와 Milvus 통합 후 응답 시간 |
이미지 생성 모델 비교
명함에서는 이름이나 연락처를 모델이 잘못 그리면 결과물을 사용할 수 없다. 그래서 배경 생성과 텍스트 렌더링을 분리하고, 배경 모델에서는 글자를 올릴 여백과 질감·조명이 적절한지 살폈다.
모델별 추론 시간과 Peak VRAM을 비교했다. 상세 결과는 이미지 생성 모델 비교 기록에 정리했다.
| 후보 | 추론 시간 범위 | Peak VRAM | 배경 안정성(주관 평가) |
|---|---|---|---|
| SDXL Base | 2.86~2.88s | 9.21GB | 높음 |
| SD3.5 Large Turbo | 9.20~12.74s | 6.09GB | 중 |
| Z-Image Turbo | 2.80~4.70s | 20.85GB | 중~높음 |
| Korean SD v1.5 | 1.76~3.85s | 4.15GB | 낮음 |
| Qwen-Image | 8.59~10.36s | 59.71GB | 높음 |
| Gemini 3 Pro Image 계열 | 12.45~16.76s | 클라우드 API로 비교 불가 | 높음 |
SDXL Base를 선택했다. 해상도 1104×624, 25 steps, guidance scale 7.5에서 프롬프트 3종으로 비교한 결과는 다음과 같다.
| 프롬프트 | 시드 | 추론 시간 | Peak VRAM |
|---|---|---|---|
| p1 | 101 | 2.88s | 9.21GB |
| p2 | 102 | 2.86s | 9.21GB |
| p3 | 103 | 2.86s | 9.21GB |
공통 프롬프트를 사용했지만 GPU·해상도·steps는 모델마다 달랐다. 따라서 이 결과는 각 설정에서의 비교이며, 모델 자체의 속도 순위나 운영 단가를 뜻하지 않는다. 비교 기록의 설명 문단과 수치가 다른 항목은 프롬프트별 실험 표를 기준으로 정리했다.
LLM 비교
RunPod Serverless L40에서 HEX와 자기소개 생성인 Job을 각각 10개 입력으로 평가하고, 웜업 후 요청 지연과 cold start를 별도로 기록했다. 상세 결과는 2026-02-03자 LLM 비교 기록에 정리했다.
응답 시간과 생성 속도
| 모델 | Cold Start | 평균 Latency | Tokens/sec |
|---|---|---|---|
| Qwen2.5 7B Instruct | 33149ms | 15386ms | 36.8 |
| EXAONE 3.5 7.8B Instruct | 39944ms | 15121ms | 31.4 |
| Llama 3.1 8B Instruct | 39041ms | 18034ms | 26.6 |
| Qwen3 8B | 90573ms | 25793ms | 24.5 |
Tokens/sec는 토큰 생성 속도 지표이며 API가 초당 처리한 요청 수와 같지 않다. 평가 결과의 성공률은 100.0%, JSON 파싱 실패율은 0.00%였다. 이 값을 운영 전체나 재시도 전 첫 요청의 성공률로 일반화할 수는 없다.
품질 평가 기준
HEX와 자기소개 생성의 평가 항목은 같지만, 작업별로 가중치를 다르게 두었다.
| 항목 | HEX 가중치 | Job 가중치 |
|---|---|---|
| JSON 스키마 준수 | 25% | 20% |
| 점수·내용 정확도 | 25% | 25% |
| 한국어 품질 | 20% | 25% |
| 일관성·검색 컨텍스트 | 15% | 15% |
| 환각 탐지 | 15% | 15% |
EXAONE HEX의 세부 평균에 각 가중치를 곱해 합산하면 0.96640인데, 종합 표의 가중 평균은 0.870이다. 두 값의 계산 조건을 대조하기 전에는 이 가중 평균으로 모델 간 품질 차이를 판단하기 어렵다.
비교 당시 권장 모델은 Qwen2.5 7B Instruct로 정했다.
또한 HEX 점수의 참조값 대비 편차를 평가하는 것은 개발자의 실제 협업 역량을 측정하는 것과 다르다. 모델이 정해진 출력 규칙을 따르는지와 점수 체계 자체의 타당성을 구분해야 한다.
임베딩 모델 비교
임베딩 모델은 오프라인 평가와 Milvus 통합 평가로 나눠 비교했다. 상세 결과는 2026-02-11자 임베딩 비교 기록에 정리했다.
| 평가셋 | 규모 |
|---|---|
| 검색 대상 corpus | 100개 |
| IT 직무 검색 | 38개 질의 |
| 시맨틱 캐싱 | 18개 쌍 |
| 자연어 검색 | 16개 질의 |
| IT 분류 | 136개 입력 |
Recall@5는 일반적으로 정답 항목이 상위 5개 검색 결과에 얼마나 포함되는지를 나타낸다. 정답이 질의마다 하나인 평가에서는 상위 5개 안에 정답이 들어간 질의 비율과 같다. MRR은 첫 정답 순위의 역수를 평균한 값이다. F1은 분류의 precision과 recall을 함께 보는 지표이며, 단순 정확도와 같지 않다.
오프라인 비교 결과
| 모델 | Recall@5 | MRR | 자연어 검색 MRR | 분류 F1 |
|---|---|---|---|---|
| BGE-m3-ko | 1.0000 | 0.9551 | 0.9062 | 0.9846 |
| BGE-m3 | 1.0000 | 0.9551 | 0.8750 | 0.9846 |
| KURE-v1 | 1.0000 | 0.9359 | 0.8771 | 0.9846 |
| gte-base-korean | 1.0000 | 0.9295 | 0.8792 | 0.9846 |
| Qwen3-0.6b | 1.0000 | 0.8590 | 0.7479 | 0.9846 |
| KoELECTRA | 0.4615 | 0.3449 | 0.1888 | 0.3810 |
오프라인 비교에서는 BGE-m3-ko를 선택했다. 이 평가셋에서 얻은 MRR 차이를 모든 검색에서 첫 번째 결과가 더 정확하다는 뜻으로 일반화할 수는 없다.
분류 임계값 0.81은 이 실험에서 선택한 값이다. 다른 데이터에서도 같은 성능이 나온다는 뜻은 아니므로, 적용할 데이터에서 다시 검증해야 한다.
Milvus 통합 비교 결과
| 구성 | Recall@5 | MRR | 단일 쿼리 | 배치 쿼리 | E2E latency |
|---|---|---|---|---|---|
| BGE-m3-ko + IVF_FLAT | 1.0000 | 0.9551 | 1.7ms | 8.0ms | 147.5ms |
| BGE-m3-ko + HNSW | 1.0000 | 0.9551 | 2.0ms | 11.8ms | 153.3ms |
| KURE-v1 + IVF_FLAT | 1.0000 | 0.9359 | 2.9ms | 11.4ms | 164.4ms |
| KURE-v1 + HNSW | 1.0000 | 0.9359 | 2.5ms | 12.5ms | 171.5ms |
Milvus 통합 비교의 corpus는 100개였다. 1.7ms와 2.0ms는 이 구성에서 얻은 단일 쿼리 지연으로, 데이터 규모와 인덱스 설정이 달라지면 결과도 달라질 수 있다.
실험에서는 IVF_FLAT을 선택했지만, 임베딩 서비스의 컬렉션 생성 코드에는 AUTOINDEX를 사용한다. 실험 인덱스와 서비스의 기본 생성 설정은 다르다.
비교 당시 선택과 구현 설정
비교 당시에는 이미지 배경 생성에 SDXL Base, LLM에 Qwen2.5 7B Instruct, 임베딩에 BGE-m3-ko와 IVF_FLAT을 선택했다. 후속 README의 LLM 설정은 Qwen3-8B-AWQ이며, 임베딩 서비스의 컬렉션 생성 설정도 실험과 다르다.
정리
기능별로 모델을 비교하고 텍스트 렌더링, 정형 점수 계산, 벡터 검색처럼 모델 밖에서 책임질 부분을 나눴다.
