12x32GB SXM V100 클러스터 업데이트 및 법률 초안 작성을 위한 로컬 AI 구축기
Update on 12x32gb sxm v100 cluster / local AI for legal drafting
핵심 요약
법률 업무를 위해 12개의 V100 GPU 클러스터를 구축하고, MoE 모델과 자체 검증 파이프라인을 통해 로컬 AI 환경을 최적화한 사례.
- 하드웨어 구성 — 12개의 V100-SXM2 32GB와 Threadripper Pro를 활용한 고성능 로컬 클러스터 구축함.
- 모델 최적화 — vLLM 대신 llama.cpp를 도입하여 MoE 모델 기반의 효율적인 추론 환경을 구현함.
- 검증 파이프라인 — AI의 환각을 방지하기 위해 인용구와 날짜를 원본 데이터와 대조하는 자체 검증 시스템을 개발함.
- 워크플로우 자동화 — 여러 모델을 오케스트레이터로 연결하여 법률 문서 작성부터 검토까지 자동화함.
V100 서버를 사용하는 변호사로부터의 업데이트입니다. 먼지가 가라앉고 나서 결국 무엇을 실행하게 되었는지 궁금해하는 분들이 계셔서 공유합니다. 여전히 변호사로 일하고 있고, Claude Code로 모든 것을 제어하고 있으며, 제가 뭘 하고 있는지 완전히 확신할 수는 없지만, 지난번보다 훨씬 잘 작동합니다.
우선 하드웨어가 계획을 따라잡았습니다. 마지막 두 개의 V100이 도착해서 제가 약속했던 "최종 형태"가 완성되었습니다. Threadripper Pro에 12개의 V100-SXM2 32GB가 장착되었습니다. 보드 A는 GPU {4,5,8,9}, 보드 B는 {6,7,10,11}, NVLink 쌍은 {0,1}, 그리고 16GB 카드가 하나 섞인 혼합 쌍은 {2,3}입니다. 모델을 서로 다른 두 NVLink 보드에 걸치면 처리량이 급격히 떨어지므로(보드 간 이동은 NVLink가 아닌 PCIe/NUMA를 사용함), 모든 모델을 하나의 보드 안에 유지하고 있습니다. 비싼 수업료를 내고 배웠습니다.
그리고 네, 결국 두 번째 박스도 만들었습니다. EPYC 7302P, 512GB RAM, 4x RTX 3090 + 2x V100-PCIe 구성입니다. 중년의 위기는 예정대로 진행 중입니다.
더 큰 변화는 로컬 모델을 위해 vLLM을 포기했다는 점입니다. vLLM이 나빠서가 아니라, 제가 원하는 모델이 MoE GGUF인데 Volta 아키텍처에서 vLLM은 이 모델들에 막다른 길이기 때문입니다(FP8/AWQ/Marlin은 모두 SM75 이상을 요구하고, GPTQ 커널은 7.0에서 깨짐). 그래서 전체 시스템을 llama.cpp(메인라인)로 옮겼습니다. 최근 빌드에서 긴 프롬프트를 망가뜨리던 Gemma 챗 파서 버그가 수정되었습니다.
첫 번째 게시물에서 암시했던 것과는 정반대인 부분입니다. V100에서 밀집(dense) 모델은 함정입니다. MoE만이 쓸만한 속도를 냅니다. 대략적인 디코드 수치입니다(Q8 GGUF, Q4 KV 캐시, flash-attn 활성화, 4카드 보드 1개, 실제 작성 프롬프트 기준 - 5토큰짜리 "안녕"이 아니라 수천 토큰의 컨텍스트):
| Model | Type | tok/s (decode) |
|---|---|---|
| Gemma-4-26B-A4B | MoE | ~113 |
| Qwen3.6-35B-A3B | MoE | ~82 |
| Qwen3.5-122B-A10B | MoE | ~50 |
| any dense 27-32B | dense | ~20-28 (under my 40 floor, not worth it) |
| dense ~128B | dense | ~9 (forget it) |
그래서 122B/10B-active 추론 모델이 4개의 V100에서 약 50 tok/s로 실행됩니다. 첫 번째 게시물에서 vLLM으로 관리하던 밀집 32B보다 빠르며, 긴 컨텍스트에서도 이를 유지합니다(Gemma를 25k 토큰 이상으로 밀어붙여도 밀집 모델처럼 무너지지 않았습니다). 이 사실이 모든 것을 재정의했습니다. 큰 밀집 가중치를 쫓는 것을 멈추고 MoE를 중심으로 시스템을 구축했습니다.
실제로 실행 중인 스택은 다음과 같습니다. 하나의 모델이 채팅에 답하는 것이 아니라, 법률 작업을 여러 로컬 모델에 라우팅하는 오케스트레이터입니다. 각 모델은 GPU를 두고 싸우지 않도록 자체 보드에 고정되어 있습니다. 가장 무거운 작업(전체 진술서나 신청서 작성 등)을 실행할 때는 두 박스에 걸쳐 16개의 GPU가 모두 작동합니다.


