정보 · 실험 계획
실험 후보 — 오픈 모델 카탈로그
16GB 단일 노드와 2노드 클러스터에서 실제로 돌릴 수 있는 오픈 모델의 경계선.
메모리 예산이 모든 것을 결정한다
- 단일 노드(16GB): 모델 가중치 + KV 캐시에 쓸 수 있는 것은 약 10~12GB (한도 상향 시 13GB). 4bit 양자화 기준 14B급까지 쾌적, 20B급은 한계선.
- 2노드 클러스터(합산 32GB): 오버헤드 제하면 가중치 약 20~24GB — 4bit 27B~35B급이 상한. 70B 이상은 어떤 양자화로도 불가.
- 분산의 이득은 사실상 텍스트 LLM과 VLM에 국한된다. 이미지·비디오·오디오 생성은 분산이 안 되므로 단일 노드 안에서 해결해야 한다.
모달리티별 요약
| 분야 | 대표 후보 | 16GB 단일 | 비고 |
|---|---|---|---|
| LLM 소형 | Qwen 3.5 9B, Gemma 4 E4B, Phi-4 14B, gpt-oss-20b | 가능 | 9B급이 범용 1순위. gpt-oss-20b는 빠듯 |
| LLM 한국어 | EXAONE 4.5(소형), Kanana 1.5 8B, HyperCLOVA X SEED | 가능 | 한국어 벤치마크 동급 우세 |
| LLM 중형 | Qwen 3.6 27B, 35B-A3B(MoE), EXAONE 4.5 33B | 클러스터 | 2노드 파이프라인 병렬 대상 |
| 이미지 생성 | Z-Image 6B, FLUX.2 4B/9B, SDXL | 가능 | mflux(MLX 네이티브)가 가장 효율적 |
| 비디오 생성 | LTX-Video 경량 | 사실상 곤란 | 저해상도 짧은 클립을 수 분 대기 수준 |
| 음악 생성 | ACE-Step 1.5 (3.5B), MusicGen | 가능 | ACE-Step은 Mac 공식 지원 |
| TTS | Qwen3-TTS(한국어), Kokoro 82M | 가능 | mlx-audio 경로 |
| ASR | Whisper large-v3-turbo, Qwen3-ASR | 가능 | 한국어 전사는 Whisper 계열 1순위 |
| VLM | Qwen3-VL 2B~8B, Moondream 3, SmolVLM2 | 가능 | mlx-vlm 경로. CCTV 자연어 질의에 활용 — 상세 설명 |
| 임베딩/RAG | Qwen3-Embedding, bge-m3, EmbeddingGemma | 가능 | 전부 여유. 로컬 RAG 구성 요소 |
VLM(비전-언어 모델) 자세히
VLM은 이미지(일부는 비디오·오디오까지)를 입력받아 자연어로 이해하고 답하는 모델이다. "이 사진에 뭐가 있어?"를 넘어, 장면 판단·문서 읽기·상황 서술까지 한다. 텍스트 LLM과 같은 구조 위에 비전 인코더를 얹은 형태라, LLM처럼 4bit 양자화로 작아지고 2노드 클러스터 분산도 가능한 카테고리다(이미지 생성과 달리).
후보 모델 비교
| 모델 | 크기 / 4bit 메모리 | 특징 |
|---|---|---|
| Qwen3-VL 2B~8B | 2~8B / 약 2~5GB | 범용 VLM 최강 라인. 비디오 입력 지원, OCR·표·차트 이해가 특히 강해 문서 질의응답까지 커버. 16GB에서 8B도 여유 |
| Moondream 3 | 9B MoE (활성 2B) | 엣지 특화 초효율 모델. 캡셔닝·포인팅(좌표 반환)·간이 객체 검출을 내장해 "어디에 있나"류 질문에 강함. MoE라 크기 대비 빠름 |
| SmolVLM2 | 256M~2.2B | 최소 메모리 VLM. 비디오 이해 지원. 다른 모델과 동시 상주시켜도 부담이 없어 상시 감시 파이프라인의 1차 필터로 적합 |
| (참고) Gemma 4 E2B/E4B | 2~8B급 | LLM·VLM 겸용이라 모델 하나로 텍스트+비전을 다 받고 싶을 때 |
| (참고) InternVL3, MiniCPM-V/o | 1~8B급 | 대안 라인. MiniCPM-o는 오디오 입력까지 받는 Omni형 |
실행은 mlx-vlm(MLX 생태계의 표준 VLM 러너)이 담당한다. pip install mlx-vlm 후
mlx-community의 변환본을 지정하면 되고, 이미지 경로·URL을 프롬프트와 함께 넘기는
단순한 인터페이스다. Ollama·LM Studio로도 상당수 실행 가능하다.
실측 노트 (2026-07-22): Qwen3-VL 4B·8B(4bit)를 실기기에서 돌려본 결과 영어 답변은 정확·유창했지만, 한국어 답변에서 반복 루프와 환각(4B: 스시→"수제 과일", 8B: 문단 단위 반복)이 심해 한국어 데모용으로는 부적합했다. 샘플링 조정(temperature·top_p·repetition penalty)으로도 잡히지 않았다. 반면 Gemma 3 12B(비전 겸용, 4bit ~7GB)는 같은 조건에서 한국어가 유창하고 정확 — VLM 데모는 이 모델을 사용한다. 한국어 서비스라면 "VL 벤치마크 순위"보다 출력 언어의 생성 품질을 먼저 검증할 것.
왜 CCTV에 VLM인가
전통적 CV(YOLO)는 "미리 정의한 클래스"만 검출한다. 새 규칙이 생기면 데이터를 모아 파인튜닝해야 한다. VLM은 규칙을 코드가 아닌 프롬프트로 바꾼다:
- 카메라 스냅샷을 주기적으로 VLM에 넣고 — "하역장에 트럭이 서 있는가?", "작업자가 장갑을 꼈는가?", "출입문이 열려 있는가?"를 자연어로 판정
- YOLO가 이벤트를 트리거하면 VLM이 상황을 한국어 문장으로 서술해 알림 메시지 생성 ("검은 옷의 남성이 15:02에 후문으로 진입함")
- 문서·차트 이미지를 던져 질의응답 (Qwen3-VL의 강점)
한계와 역할 분담
VLM은 정밀 카운팅과 정확한 좌표에 약하다. "사람이 몇 명인가"를 세다 틀리고, 박스 좌표도 부정확하다(Moondream의 포인팅이 예외적으로 쓸 만한 수준). 그래서 정석은:
정량은 YOLO, 정성 판단은 VLM. 검출·추적·카운팅은 YOLO가 하고, "그래서 이 장면이 무슨 상황인가"의 해석을 VLM이 맡는 2단 구성.
추론 속도도 고려 대상이다. 이미지 한 장 처리에 수 초 단위(프롬프트에 이미지 토큰이 수백~수천 개 추가됨)라, 실시간 프레임 단위가 아니라 이벤트 시점 스냅샷 판정이나 주기적 폴링(예: 30초마다) 방식이 맞다.
도구 스택
| 도구 | 역할 |
|---|---|
| MLX / mlx-lm | LLM 추론·파인튜닝 (Apple 공식) |
| mlx-vlm · mlx-audio · mlx-whisper | 모달리티별 MLX 러너 |
| mflux | FLUX 계열 이미지 생성 MLX 포트 |
| LM Studio / Ollama | GUI·GGUF 러너 (입문/호환성) |
| ComfyUI | 이미지·비디오 워크플로 (MPS, CUDA 대비 느림) |
단일 노드 상비군 (계획)
교체 로딩 전제로 전부 쾌적하게 도는 조합:
Qwen 3.5 9B(범용·코딩) + Qwen3-VL 4B(비전) + Whisper large-v3-turbo(한국어 ASR) + Qwen3-TTS(한국어 TTS) + bge-m3(RAG 임베딩) + Z-Image 6B(이미지)
2노드 클러스터는 Qwen 3.6 27B급 텍스트/VLM 추론 전용으로 한정한다. 설치가 끝나는 대로 모델별 실측 tokens/sec를 로그와 서비스 섹션에 공개할 예정.