로컬 LLM을 실행하기 전 두 가지 질문: 적합한가? 그리고 실제 속도는 어느 정도인가?
요약
로컬 LLM 실행 시 하드웨어 적합성과 실제 속도 측정을 위한 체크리스트를 제시합니다. 모델의 메모리 요구량(가중치+KV cache)과 다양한 조건(하드웨어, 양자화, 런타임 등)을 고려해야 하며, prefill 시간과 tokens/s는 상호 교환할 수 없음을 강조합니다.
핵심 포인트
- 메모리 적합성: 가중치 크기 + KV 캐시를 계산하여 하드웨어를 결정하세요.
- 속도 측정값: 정확한 조건(하드웨어, 양자화 등)이 명시되어야만 의미가 있습니다.
- 런타임 선택: CUDA, Metal, vLLM 등 각 환경별 런타임을 이해하고 사용해야 합니다.
- Apple silicon 활용: `mlx_lm.server`를 통해 OpenAI 호환 엔드포인트를 로컬에서 쉽게 구축할 수 있습니다.
사람들이 모델을 로컬에서 실행하려고 할 때 항상 같은 두 가지 실패를 목격합니다. 첫 번째는 모델과 그 컨텍스트를 담지 못하는 하드웨어를 구매하거나 할당하는 것입니다. 두 번째는 완전히 다른 조건에서 측정된 단일 tokens/s 수치를 맹신하는 것입니다.
이것은 제품 홍보가 아닙니다. 제가 지금 사용하는 체크리스트와, 계속해서 산술 계산을 반복했기 때문에 만든 작은 도구입니다.
1. 메모리 적합성과 속도를 분리하기
이들은 서로 다른 질문이며 각각 다른 종류의 증거를 필요로 합니다.
메모리 적합성은 스스로 할 수 있는 산술 계산입니다. 양자화된 가중치(quantized weights)의 저장 크기부터 시작하여, 실제로 원하는 컨텍스트에 대한 KV cache를 더하고, 런타임, 드라이버 및 데스크톱을 위한 여유 공간을 남겨두어야 합니다. Q4로 된 70B 모델은 다른 것을 추가하기 전에 가중치만으로 대략 40 GB가 필요하므로, '24 GB 카드로 실행된다'는 것은 보통 시스템 RAM에 오프로드되어 느리게 작동하는 구성을 의미합니다.
속도는 측정값이며, 그 조건이 붙어야만 의미가 있습니다: 정확한 하드웨어, 정확한 체크포인트, 양자화(quantization), 런타임 및 버전, 컨텍스트 및 프롬프트 길이, 동시성(concurrency), 그리고 숫자가 어떻게 생성되었는지 (prefill / TTFT / decode). 단일 스트림의 디코드(decode) 숫자는 여덟 개의 동시 요청에 대한 처리량(throughput) 숫자가 아닙니다. 공급업체의 주장은 측정값이 아닙니다. 출처가 이 모든 것을 명시하지 않는다면, 정직한 대답은 녹색 체크 표시가 아니라 '알 수 없음'입니다.
특히 주목할 점: prefill 시간과 tokens/s는 상호 교환할 수 없습니다. TTFT만 가지고 있다면, 이는 파생된 prefill 추정치이므로 그렇게 표기되어야 합니다.
2. 쇼핑하기 전에 런타임을 선택하라
런타임(runtime)이 무엇이 가능한지를 결정합니다. CUDA, ROCm, Metal, Vulkan, CPU, NPU는 각각 분리된 레인과 플로어를 가지고 있으며, 한 레인에서 존재하는 기능이 다른 레인의 증거가 될 수는 없습니다. 예를 들어 Apple silicon의 경우 MLX가 네이티브 경로이며, NVIDIA 서버에서는 vLLM이나 SGLang이 처리량(throughput) 경로이고, CPU+GPU 혼합 박스에서는 mixture-of-experts 모델을 위한 오프로딩 런타임이 또 다른 트레이드오프입니다.
3. Apple silicon을 OpenAI 호환 엔드포인트로 서비스하기
MLX를 실행할 때 알아두면 좋은 세부 사항이 있습니다: mlx-lm은 OpenAI와 호환되는 HTTP 서버인 mlx_lm.server를 제공합니다. 이 서버는 /v1/chat/completions, /v1/completions, 그리고 /v1/models를 노출하며, 기본값은 127.0.0.1:8080이고 --model과 함께 --host / --port를 받습니다. 기존 OpenAI 클라이언트를 Mac에 연결하는 데 편리합니다.
중요한 주의사항은 상위 시스템 자체의 내용입니다: mlx_lm.server는 기본적인 보안 검사만 구현하며 프로덕션 환경에는 권장되지 않습니다. 인증 및 네트워크 제어를 앞에 추가하지 않는 한 localhost에 바인딩 상태를 유지하십시오. 단일 사용자 로컬 설정이라면 괜찮지만, 외부에 노출하는 경우에는 그렇지 않습니다.
4. 조건을 기록하라
무엇을 측정하든, 숫자 옆에 그 조건을 기록하십시오. 6주 후에
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기