체감 속도로 판단하는 BGE-M3 다국어 검색 퀵스타트
요약: BGE-M3란 하나의 모델로 밀집(dense)·희소(sparse)·멀티벡터 검색을 모두 지원하고 100여 개 언어와 최대 8192 토큰 입력을 처리하는 다국어 임베딩 모델로, 한국어를 포함한 교차언어 검색을 클라우드 없이 로컬에서 돌릴 수 있게 해 주는 오픈 임베딩 모델이다. 초보자가 로컬 검색을 처음 세팅할 때 던지는 진짜 질문은 "정확도"보다 먼저 "눌렀을 때 얼마나 빨리 뜨느냐"이고, 그 체감은 평균이 아니라 p50(중앙값)과 p95(상위 5%의 느린 꼬리)로 봐야 한다.
BGE-M3란 하나의 모델로 밀집(dense)·희소(sparse)·멀티벡터 검색을 모두 지원하고 100여 개 언어와 최대 8192 토큰 입력을 처리하는 다국어 임베딩 모델로, 한국어를 포함한 교차언어 검색을 클라우드 없이 로컬에서 돌릴 수 있게 해 주는 오픈 임베딩 모델이다. 초보자가 로컬 검색을 처음 세팅할 때 던지는 진짜 질문은 "정확도"보다 먼저 "눌렀을 때 얼마나 빨리 뜨느냐"이고, 그 체감은 평균이 아니라 p50(중앙값)과 p95(상위 5%의 느린 꼬리)로 봐야 한다.
first_response_latency_ms 120.8 ms
Hax가 자체 인프라에서 직접 측정한 실측값은?#
아래는 Hax가 자체 인프라에서 직접 계측·공개한 참고 수치입니다(측정값, 출처 표기).
| 데이터 항목 | 실측값 | 날짜 | 출처 |
|---|---|---|---|
| first_response_latency_ms | 120.8 ms | 2026-07-04 | bench_harness.probe_unified_latency |
| 생성 처리량 | 38.8 tok/s | 2026-07-04 | bench_harness.probe_llm_bench (unified-api 실측, 3회 중앙값) |
| 전체 생성 지연(200토큰) | 5153 ms | 2026-07-04 | bench_harness.probe_llm_bench (unified-api 실측, 3회 중앙값) |
- 표본
- 실측 지표 3개 (Hax /data 큐레이션)
- 측정 환경
- bench_harness.probe_llm_bench (unified-api 실측
- 수집일
- 2026-07-04
- 방법
- bench_harness.probe_unified_latency; 3회 중앙값)
이 수치는 어떻게 재현하나?#
측정 방법은 표의 출처와 우리 공개 데이터셋(/data)에서 확인할 수 있습니다.
| 지표 | 값 | 라벨 |
|---|---|---|
| Hax unified 첫 응답 지연 | 119.2 ms | 측정(2026-07-03) |
| Hax unified 첫 응답 지연 | 120.8 ms | 측정(2026-07-04) |
| Hax HTTP 응답 P95(7일) | 625 ms | 측정(2026-07-24) |
| BGE-M3 단일 한국어 쿼리 임베딩(CPU) | 40~120 ms | 추정 |
| BGE-M3 단일 쿼리 임베딩(GPU) | 5~20 ms | 추정 |
Hax unified 첫 응답 지연 119.2 ms
이 119.2 ms(측정)는 우리가 'Hax Local-AI Latency Index'[/glossary#hax-latency-index]로 관리하는 지표의 한 스냅샷이다. 검색 지연은 여러 단계의 합이라 한 숫자로 뭉개면 안 된다. 사용자가 쿼리를 치면 (1) 쿼리 임베딩 계산, (2) 벡터 인덱스 조회(ANN), (3) 상위 문서 후처리·렌더가 순서대로 일어난다. BGE-M3 자체 지연은 대부분 (1)에 몰려 있고, 하드웨어에 따라 CPU 40~120 ms·GPU 5~20 ms 범위로 갈린다(모두 추정). 반면 사용자가 실제로 체감하는 전체 왕복은 네트워크·서버 큐잉·렌더가 더해진 값이며, Hax 운영 실측에서 HTTP 응답 P95는 625 ms(측정, 2026-07-24)였다.
체감 기준: p50이 아니라 p95를 봐라#
통용되는 반응속도 heuristic은 0.1초 이하는 '즉각', 1초 이하는 '흐름 유지', 그 이상은 '주의가 끊김'이다. p50만 보면 중앙값은 빠른데 20번에 1번 답답한 경험을 놓친다. 그래서 로컬 검색을 세팅했다면 p50과 p95를 함께 로그로 남기고, p95가 1초를 넘기 시작하면 인덱스 타입이나 배치 크기를 먼저 의심해야 한다.
5분 퀵스타트 (step-by-step)#
- 모델 받기:
BAAI/bge-m3를 임베딩 백엔드에 로드한다(dense 벡터 1024차원). - 문서 임베딩: 한국어·영어 문서를 섞어 넣어도 같은 벡터 공간에 매핑되므로 교차언어 검색이 그대로 된다.
- 인덱스 만들기: 문서 수가 수만 건 이하면 flat(brute-force)로 시작해 정확도 기준선을 잡고, 그 이상이면 HNSW로 바꾼다.
- 쿼리 돌리기: 한국어 질의를 던지고 상위 5개를 확인한다.
- 지연 계측: 각 쿼리의 벽시계 시간을 찍어 p50/p95를 뽑는다. 여기서부터가 진짜 튜닝의 시작이다.
초보자가 자주 틀리는 지점#
BGE-M3는 dense·sparse·multi-vector를 동시에 낼 수 있는데, 초보 세팅에서 세 경로를 다 켜면 임베딩 지연이 눈에 띄게 늘 수 있다(추정). 처음엔 dense만으로 기준선을 잡고, 한국어 검색 품질이 아쉬울 때 sparse를 하이브리드로 얹는 순서가 안전하다. 또 P95가 튀는 원인의 다수는 모델이 아니라 콜드 스타트·큐잉이므로, 첫 요청 워밍업 후 다시 측정하는 습관이 필요하다.
참고: 위 119.2 ms·120.8 ms·625 ms는 2026-07-03~07-24 Hax ai-server 실측 스냅샷이며, BGE-M3 자체 임베딩 지연 수치는 하드웨어 의존이라 모두 추정으로 표기했다. 내부 계측 근거는 Hax data에서 갱신된다.
함께 읽기: BGE-M3 다국어 검색 초보 5분 설치 퀵스타트와 실패 지점, BGE-M3 다국어 검색, 월 비용·GPU 시간으로 판단하기
종합 가이드: 노트북에서 돌리는 AI 모델, 흔한 함정과 해결법
Responses
No responses yet. Be the first to respond.