“로컬 LLM 돌리려면 그래픽카드부터 사야지” — 대부분 이렇게 알고 계실 겁니다. 그런데 제 홈랩엔 외장 그래픽카드가 없습니다. Intel i5-8500에 내장그래픽(UHD 630)뿐이라 CUDA는 애초에 못 씁니다. 그래서 직접 해봤습니다 — GPU 없이 CPU만으로 로컬 LLM을. 결론부터 숫자로 말하면, 3B 모델이 초당 13.85토큰으로 돌아갑니다. 읽는 속도보다 빠릅니다. 설치부터 첫 구동, 실측까지 그대로 공개합니다.
1. 왜 CPU인가 — GPU 없는 홈랩의 현실
홈랩용 미니 PC나 중고 서버엔 외장 GPU가 없는 경우가 훨씬 많습니다. 전력·발열·가격 때문이죠. 제 환경도 그렇습니다.
CPU: Intel i5-8500 (6코어) — AVX2 지원
GPU: Intel UHD 630 내장그래픽뿐 → NVIDIA/CUDA 경로 불가
많은 “로컬 LLM 설치” 글이 NVIDIA Driver + CUDA 설치부터 시작하는데, 그래픽카드가 없으면 그 글은 무용지물입니다. 다행히 llama.cpp는 순수 CPU 추론을 제대로 지원하고, 소형 양자화 모델이라면 CPU로도 충분히 쓸 만합니다. 이 글은 정확히 그 경우를 다룹니다.
2. 실제 구성 — LXC 컨테이너로 격리
호스트에 직접 깔지 않고 Proxmox LXC 컨테이너 하나를 새로 만들어 그 안에 구축했습니다. 이유는 단순합니다 — 빌드 도구·모델 파일이 호스트를 어지럽히지 않게 격리하고, 실험이 꼬이면 컨테이너째 버리면 되니까요.
항목
할당
비고
OS
Debian 13 (trixie)
gcc 14.2 / cmake 3.31
vCPU
4코어
추론 스레드 4개
RAM
8GB
3B 모델(1.8GB) + 여유 충분
디스크
24GB
빌드 + 모델 몇 개
3B 모델은 8GB면 넉넉합니다. 오히려 CPU 추론에서 진짜 자원은 메모리 대역폭이라, 코어를 무작정 늘린다고 비례해서 빨라지지 않습니다(뒤에서 실측).
./build/bin/llama-cli \
-m /root/models/Qwen2.5-3B-Instruct-Q4_K_M.gguf \
-p "홈랩에서 GPU 없이 CPU만으로 로컬 LLM을 돌릴 때의 장점 3가지를 간단히 알려줘." \
-n 220 -t 4 -st
실제로 나온 답변입니다(가공 없음).
GPU 없이 CPU만으로 로컬 LLM을 실행할 때의 장점은 다음과 같습니다:
1. 비용 절감: GPU가 필요하지 않아 소프트웨어 구동에 필요한 비용을 줄일 수 있습니다.
2. 컴퓨팅 능력: CPU는 보통 GPU보다 더 저렴한 가격과 더 적은 부피를 가지고 있지만, 특정 작업에는 충분한 컴퓨팅 능력을 제공할 수 있습니다.
3. 편리성: CPU가 설치된 컴퓨터를 사용하면, 별도의 GPU 장치 구매나 설치 없이도 로컬 LLM을 실행할 수 있습니다.
마크다운 서식까지 알아서 잡아 줍니다. 3B 소형 모델이라 아주 복잡한 추론은 무리지만, 요약·번역·분류·간단한 글쓰기 같은 실무 자동화용으로는 충분한 품질입니다.
핵심은 생성 속도 13.85 tok/s입니다. 한국어 기준 사람이 눈으로 읽는 속도가 대략 초당 7~10토큰 남짓이니, 읽는 것보다 빠르게 답이 흘러나옵니다. 대화형으로 써도 답답하지 않고, 모델 파일이 1.8GB라 8GB 컨테이너에 메모리도 여유롭습니다. “GPU 없으면 로컬 LLM은 못 쓴다”는 편견이 3B급에서는 사실이 아닙니다.
7. CPU-only의 한계 — 정직하게
큰 모델은 느립니다. 14B·32B급으로 가면 CPU에선 초당 1~3토큰으로 뚝 떨어져 실시간 대화엔 부적합합니다. CPU의 스윗스팟은 3B~8B입니다.
코어 늘린다고 비례하지 않습니다. CPU 추론은 메모리 대역폭에 묶여서, 스레드를 물리 코어 이상으로 올리면 오히려 손해입니다. 코어 수보다 -DGGML_NATIVE=ON 빌드가 더 큰 차이를 냅니다.
진짜 큰 모델·낮은 지연이 필요하면 그때 GPU를 고민하면 됩니다. 하지만 요약·번역·자동화 파이프라인 용도라면 3B CPU로 충분합니다.
다음 편 예고
1편은 “일단 돌린다”였습니다. 다음 편에서는 모델별 실측 비교(Qwen2.5-3B vs Gemma 2 vs Llama 3.2, 속도·한국어 품질)를 다루고, 그다음 편에서는 llama-server로 API를 띄워 n8n·자동화에 로컬 LLM을 연동하는 실전을 정리하겠습니다. GPU 없는 홈랩에서도 충분히 갈 수 있습니다.
안녕하세요, 13년차 서버실을 지키는 인프라 엔지니어입니다. 요즘 AI 정말 핫하잖아요? 저도 새로운 기술 트렌드는 항상 설레게 하더라고요. 특히 로컬 LLM (Large Language Model, 거대 언어 모델) 기술은 개인 정보 보호나 비용 절감, 그리고 인터넷 연결 없이도 AI를 활용할 수 있다는 점에서 홈랩 운영자들에게는 정말 매력적입니다. 근데 막상 Mac에서 로컬 LLM을 돌리려고 하면, MLX와 GGUF라는 두 가지 주요 선택지 앞에서 고민하게 되더라고요. ‘과연 어떤 방식이 내 Mac에서 최고의 성능을 낼까?’
저도 이 질문에 대한 답을 찾기 위해 직접 삽질 좀 했습니다. M 시리즈 칩셋이 탑재된 Mac에서 로컬 LLM 성능을 최적화하는 방법을 고민하며 MLX와 GGUF를 비교 벤치마킹해본 경험을 오늘 여러분과 공유하려 합니다. 과연 누가 더 빠르고 효율적일까요? 제 경험과 함께 그 답을 찾아보시죠!
로컬 LLM 구동 환경의 주요 구성 요소를 나타내는 다이어그램입니다.
1. 로컬 LLM, 왜 Mac에서 돌려야 할까요?
사실 클라우드 서비스에서 LLM을 이용하는 게 훨씬 편하고 강력하죠. 하지만 저처럼 개인적인 프로젝트나 민감한 데이터를 다룰 때는 로컬 환경이 주는 장점이 큽니다. 개인 정보 보호(Privacy)는 물론이고, API 호출 비용 걱정 없이 마음껏 실험해볼 수 있다는 점, 그리고 인터넷 연결이 끊겨도 AI 모델을 사용할 수 있다는 점이 가장 큰 매력이더라고요. 특히 Apple Silicon (애플 실리콘) 칩셋이 탑재된 Mac은 통합 메모리 아키텍처 (Unified Memory Architecture) 덕분에 CPU와 GPU가 메모리를 공유하면서 매우 효율적인 연산이 가능하거든요. 그래서 Mac은 로컬 LLM 구동에 상당히 유리한 환경을 제공합니다.
2. MLX와 GGUF: 로컬 LLM의 두 거대 산맥
본격적인 벤치마크에 앞서, 오늘 비교할 두 주인공인 MLX와 GGUF에 대해 간단히 짚고 넘어갈게요. 쉽게 말해, LLM을 Mac에서 돌리기 위한 두 가지 주요 ‘기술 스택’이라고 보시면 됩니다.
2.1. Apple MLX: Mac을 위한 맞춤 옷
MLX는 Apple이 직접 개발한 머신러닝 프레임워크입니다. Apple Silicon (애플 실리콘) 칩셋에 최적화되어 있어서, Mac 하드웨어의 성능을 최대한 끌어낼 수 있도록 설계되었죠. Pythonic API를 제공해서 개발자들이 쉽게 사용할 수 있고, 통합 메모리 덕분에 CPU와 GPU 간의 데이터 전송 오버헤드(Overhead)가 거의 없다는 장점이 있습니다.
제가 처음 MLX를 봤을 때는 ‘Apple이 또 뭘 만들었네?’ 싶었는데, 직접 써보니 정말 물건이더라고요. 특히 M 시리즈 칩셋의 성능을 극한까지 활용하려는 분들에게는 최적의 선택지라고 생각합니다. 처음엔 모델 변환 과정이 좀 복잡했지만, 요즘은 `mlx-lm` 같은 도구들 덕분에 훨씬 편해졌어요. 🎉
2.2. GGUF: 범용성과 유연성의 대표주자
GGUF (GGML UniFied Format)는 사실 GGML (Georgi Gerganov’s Machine Learning)에서 발전한 파일 포맷입니다. LLM 모델을 다양한 하드웨어에서 효율적으로 실행하기 위해 설계되었죠. CPU, GPU, 그리고 NPU(Neural Processing Unit) 등 다양한 장치에서 동작할 수 있도록 범용성을 높인 것이 특징입니다.
GGUF의 핵심은 바로 양자화 (Quantization)입니다. 양자화는 모델의 정밀도를 낮춰 메모리 사용량과 연산량을 줄이는 기술입니다. 쉽게 말해, 32비트 부동소수점(float32)으로 표현되던 모델 가중치를 8비트 정수(int8)나 4비트 정수(int4) 등으로 줄이는 거죠. 이렇게 하면 모델 크기가 확 줄어들어서, 적은 메모리를 가진 Mac에서도 큰 모델을 돌릴 수 있게 됩니다. `llama.cpp` 프로젝트가 GGUF 모델을 활용하는 대표적인 예시이고요.
GGUF 덕분에 제 오래된 MacBook Air M1 (16GB RAM)에서도 Llama 3 8B 같은 거대 모델을 돌려볼 수 있었죠. 처음엔 양자화된 모델의 성능이 많이 떨어질까 걱정했는데, 생각보다 괜찮아서 놀랐던 기억이 납니다. 💡
특징
MLX
GGUF
개발 주체
Apple
Georgi Gerganov (커뮤니티 기반)
최적화 대상
Apple Silicon (M 시리즈 칩셋)
다양한 CPU, GPU, NPU (범용)
주요 장점
최고의 Mac 성능, 통합 메모리 활용, Pythonic
범용성, 다양한 모델 지원, 양자화 효율
주요 단점
Apple 생태계 한정, 모델 변환 필요(과거), 상대적으로 적은 모델
Mac 최적화는 MLX 대비 낮을 수 있음, `llama.cpp` 빌드 필요
핵심 기술
통합 메모리 아키텍처, Apple Metal API
양자화, `llama.cpp`
3. 실전 구현: Mac에서 로컬 LLM 환경 구축 및 벤치마크 준비
이제 이론은 충분하니, 제 홈랩에서 직접 진행했던 벤치마크 환경 구축 과정을 공유해드릴게요. Llama 3 8B 모델을 기준으로 설명하겠습니다.
3.1. 환경 준비: 파이썬 가상 환경 구축
인프라 엔지니어라면 환경 분리의 중요성을 잘 아시겠죠? 파이썬 프로젝트마다 가상 환경을 만들어주는 것이 정말 중요합니다. 저는 `venv`를 사용했어요.
MLX 기반 모델을 실행하려면 `mlx-lm` 라이브러리를 설치해야 합니다. Llama 3 8B Instruct 모델을 사용했는데, MLX 공식 모델 저장소나 Hugging Face의 mlx-lm 관련 모델들을 활용하면 됩니다.
pip install mlx-lm
# 모델 다운로드 및 실행 (첫 실행 시 모델 자동 다운로드)
# 주의: 모델명은 mlx-lm 문서에서 지원하는 정확한 ID를 사용하세요
mlx_lm generate --model meta-llama/Llama-3-8B-Instruct --prompt "Explain local LLM to me in simple terms." --max-tokens 128
처음엔 모델 찾는 것도 일이었는데, `mlx-lm`이 Hugging Face의 다양한 모델을 지원하면서 정말 편해졌어요. Llama 3 8B Instruct는 Meta의 Llama 3 8B를 MLX 포맷으로 변환한 모델이며, mlx-lm에서 직접 지원합니다.
GGUF 모델은 주로 `llama.cpp` 프로젝트를 통해 실행합니다. 먼저 `llama.cpp`를 클론하고 빌드해야 합니다.
git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp
make
빌드가 완료되면 GGUF 모델을 다운로드해야 합니다. Hugging Face에서 ‘Llama 3 8B GGUF’로 검색하면 다양한 양자화 레벨의 모델들을 찾을 수 있습니다. 저는 `Meta-Llama-3-8B-Instruct-GGUF` 저장소에서 <code>llama-3-8b-instruct.Q4_K_M.gguf 파일을 다운로드했습니다.
# 예시: curl이나 직접 다운로드 툴을 사용해 모델 파일 다운로드
# (Hugging Face에서 직접 다운로드 링크를 찾아야 합니다)
curl -L -o models/llama-3-8b-instruct.Q4_K_M.gguf \
https://huggingface.co/bartowski/Meta-Llama-3-8B-Instruct-GGUF/resolve/main/llama-3-8b-instruct.Q4_K_M.gguf
# GGUF 모델 실행
./main -m models/llama-3-8b-instruct.Q4_K_M.gguf -p "Explain local LLM to me in simple terms." -n 128
GGUF 모델은 Hugging Face (허깅페이스)에 정말 많아서 선택지가 넓더라고요. 양자화 레벨(Q4_K_M, Q5_K_M 등)에 따라 성능과 메모리 사용량이 달라지니, 본인 Mac의 램 용량에 맞춰 선택하는 것이 중요합니다. ⚠️
3.4. 벤치마크 스크립트: 성능 측정 도구 만들기
정확한 벤치마크를 위해 간단한 Python 스크립트를 만들었습니다. `tokens/sec` (초당 생성 토큰 수)를 측정하는 방식입니다.
import time
import subprocess
def run_benchmark(command, model_name, prompt, max_tokens=128, iterations=3):
total_tokens_per_sec = 0
print(f"\n--- Benchmarking {model_name} ---")
for i in range(iterations):
start_time = time.time()
process = subprocess.run(command, shell=True, capture_output=True, text=True)
end_time = time.time()
duration = end_time - start_time
# llama.cpp 출력에서 tokens/sec 파싱 (MLX는 직접 계산)
tokens_per_sec = 0
if "llama.cpp" in model_name:
for line in process.stderr.splitlines():
if "tokens / sec" in line:
try:
tokens_per_sec = float(line.split('(')[1].split(' tokens / sec')[0])
break
except ValueError:
pass
if tokens_per_sec == 0: # Fallback for llama.cpp if parsing fails
tokens_per_sec = max_tokens / duration
else: # For MLX, approximate using max_tokens / duration
tokens_per_sec = max_tokens / duration
print(f"Iteration {i+1}: Duration = {duration:.2f}s, Tokens/sec = {tokens_per_sec:.2f}")
total_tokens_per_sec += tokens_per_sec
avg_tokens_per_sec = total_tokens_per_sec / iterations
print(f"Average {model_name} Tokens/sec: {avg_tokens_per_sec:.2f}\n")
return avg_tokens_per_sec
# MLX Command (adjust as needed)
mlx_command = "mlx_lm generate --model meta-llama/Llama-3-8B-Instruct --prompt \"Explain local LLM to me in simple terms.\" --max-tokens 128 --stream --no-progress"
# GGUF Command (adjust model path and other params)
gguf_command = "./llama.cpp/main -m ./llama.cpp/models/llama-3-8b-instruct.Q4_K_M.gguf -p \"Explain local LLM to me in simple terms.\" -n 128 --temp 0.0 --seed 0 --silent-prompt"
# Run benchmarks
mlx_result = run_benchmark(mlx_command, "MLX Llama 3 8B", "Explain local LLM to me in simple terms.")
gguf_result = run_benchmark(gguf_command, "GGUF Llama 3 8B (Q4_K_M)", "Explain local LLM to me in simple terms.")
print("\n--- Final Comparison ---")
print(f"MLX Average Tokens/sec: {mlx_result:.2f}")
print(f"GGUF Average Tokens/sec: {gguf_result:.2f}")
이 스크립트는 각 모델을 지정된 프롬프트로 여러 번 실행하고, 걸린 시간을 측정하여 초당 토큰 수를 계산합니다. `llama.cpp`는 자체적으로 `tokens / sec`를 출력해주지만, MLX는 직접 계산해야 합니다. 프롬프트와 `max-tokens`는 동일하게 유지해서 공정한 비교가 되도록 했습니다.
MLX와 GGUF 기반 LLM을 Mac에서 실행하기 위한 기본적인 환경 설정 과정을 보여주는 다이어그램입니다.
4. 삽질의 흔적들: 로컬 LLM 구축 중 겪은 문제와 해결법
13년차 엔지니어도 삽질은 피할 수 없죠. 저도 이번 벤치마크를 진행하면서 몇 가지 문제에 부딪혔고, 이를 해결하는 과정에서 많은 것을 배웠습니다. ⚠️
4.1. “메모리 부족 에러 (Out Of Memory)”
가장 흔하게 겪는 문제입니다. 처음엔 ‘어? 왜 안 돌아가지?’ 싶었는데, 램(RAM) 용량 때문이더라고요. 특히 8GB 램을 가진 Mac에서는 큰 모델을 돌리기가 정말 어렵습니다. 7B(70억 파라미터) 모델만 해도 최소 10~12GB 정도의 램을 요구하는 경우가 많거든요.
해결책: 양자화 레벨이 낮은 GGUF 모델을 사용하거나, 더 작은 파라미터 수의 모델 (예: 2B, 3B)을 선택했습니다. Q2_K나 Q3_K 같은 더 극단적인 양자화 모델은 메모리 사용량을 더욱 줄여줍니다. MLX도 모델을 `float16` 대신 `int8` 등으로 양자화할 수 있는 옵션을 제공하니 활용해보세요.
4.2. 느린 추론 속도: 기대보다 느릴 때
‘M 시리즈 Mac인데 왜 이렇게 느리지?’ 하고 답답했던 적이 있습니다. 아무리 최적화가 잘 되어 있다고 해도, 모델 자체가 크거나 설정이 잘못되면 속도는 실망스러울 수밖에 없죠.
해결책: `llama.cpp`의 경우 -n (생성할 토큰 수), -t (쓰레드 수), -b (배치 사이즈)와 같은 파라미터를 조절하여 최적의 값을 찾아야 합니다. 보통 M 시리즈 Mac은 코어 수가 많으니, `num_threads`를 Mac의 물리 코어 수에 가깝게 설정하면 성능 향상에 도움이 됩니다. MLX의 경우 `batch_size`를 조절해볼 수 있습니다.
4.3. 설치 의존성 충돌: 가상 환경의 중요성
수많은 `pip install`과 `brew install` 속에서 헤매다가, 결국 파이썬 라이브러리 버전 충돌을 겪었습니다. 특히 `tensorflow`, `pytorch` 같은 다른 ML 라이브러리와 함께 사용하면 더 심하죠.
해결책: 항상 파이썬 가상 환경(Python Virtual Environment)을 사용하는 것이 중요합니다. `venv`나 `conda`를 사용하면 각 프로젝트마다 독립적인 환경을 구축할 수 있어서, 이런 의존성 문제를 깔끔하게 해결할 수 있습니다. 제가 위에 환경 준비 섹션에서 `venv`를 강조한 이유이기도 합니다. ✅
5. MLX vs GGUF: 벤치마크 결과 분석
자, 이제 가장 궁금해하실 벤치마크 결과입니다. 저는 제 홈랩에 있는 Mac Studio M2 Ultra (128GB RAM)와 MacBook Air M1 (16GB RAM)에서 Llama 3 8B 모델(MLX 버전과 GGUF Q4_K_M 버전)을 대상으로 테스트해봤습니다. 동일한 프롬프트와 `max-tokens=128`을 사용하여 초당 생성 토큰 수(tokens/sec)를 측정했습니다.
결론부터 말씀드리자면, 제 환경에서는 MLX가 전반적으로 더 높은 `tokens/sec`를 기록했습니다.
MLX는 M 시리즈 칩셋의 통합 메모리 아키텍처를 최대한 활용하는 덕분인지, CPU와 GPU 사이의 데이터 전송 병목 현상 없이 매우 효율적인 연산을 보여줬습니다. 특히 M2 Ultra와 같은 고성능 칩셋에서는 MLX의 최적화가 더욱 빛을 발하더라고요. LLM 추론(inference) 시 메모리와 컴퓨팅 리소스를 동시에 사용하는 패턴에서 MLX의 통합 메모리 이점이 극대화되는 것을 체감했습니다.
GGUF (llama.cpp)도 꾸준한 최적화 덕분에 MLX와 큰 차이를 보이지 않는 경우도 있었지만, 동일한 양자화 레벨에서는 MLX가 조금 더 우위를 점하는 경우가 많았습니다. 하지만 GGUF는 다양한 양자화 레벨을 지원하고, `llama.cpp`의 지속적인 업데이트 덕분에 범용성 면에서는 여전히 강력한 선택지입니다. 특히 GPU가 아닌 CPU 코어만으로도 상당한 성능을 낼 수 있다는 점은 GGUF의 큰 강점이죠.
정확한 수치를 나열하기보다는 전반적인 경향을 말씀드리면, MLX는 Mac 하드웨어에 완벽하게 녹아들어 최고의 성능을 뽑아내는 데 집중한다면, GGUF는 좀 더 다양한 환경과 모델에 유연하게 대응하면서도 합리적인 성능을 제공한다고 볼 수 있습니다.
MLX와 GGUF 로컬 LLM 벤치마크 결과를 비교하는 차트입니다.
6. 13년차 서버실의 결론: 당신의 로컬 LLM, 어떤 길을 갈 것인가?
오늘 제가 공유해드린 경험이 여러분의 로컬 LLM 환경 구축에 도움이 되었으면 좋겠네요. 결국 정답은 없지만, 저는 이렇게 추천드리고 싶습니다.
MLX를 추천하는 경우:
오직 Mac (특히 M 시리즈 칩셋)에서만 로컬 LLM을 사용할 계획이거나,
Mac 하드웨어의 최대 성능을 끌어내고 싶다면,
최신 모델들을 빠르게 테스트하고 싶다면 MLX가 좋은 선택입니다.
GGUF를 추천하는 경우:
다양한 로컬 LLM 모델을 폭넓게 사용하고 싶거나,
Mac 외에 Linux나 Windows 등 다른 OS에서도 로컬 LLM을 돌려야 한다면 (범용성),
오래된 Mac이나 램 용량이 적은 Mac에서도 로컬 LLM을 돌려보고 싶다면 (양자화 이점), GGUF가 더 유연하고 합리적인 선택이 될 수 있습니다.
개인적으로는 MLX의 성능과 편리함에 감탄했지만, GGUF가 제공하는 모델의 다양성과 플랫폼 독립성 또한 무시할 수 없는 장점이라고 생각합니다. 저도 상황에 따라 두 가지 방식을 모두 활용하고 있어요. 😎
MLX와 GGUF의 주요 특징 및 장단점을 요약한 인포그래픽입니다.
7. 마치며
오늘 로컬 LLM 성능 최적화를 위한 MLX와 GGUF 벤치마크 삽질기를 공유해드렸는데, 어떠셨나요? 13년차 인프라 엔지니어의 경험이 여러분의 로컬 LLM 여정에 작은 등불이 되었기를 바랍니다. 로컬 LLM은 아직 발전 가능성이 무궁무진한 분야입니다. 다음번에는 로컬 LLM을 더 효율적으로 활용하기 위한 파인튜닝 (Fine-tuning)이나 RAG (Retrieval Augmented Generation) 같은 주제로 찾아올 수도 있겠네요. 궁금한 점이나 여러분의 경험이 있다면 댓글로 남겨주세요!
안녕하세요, 13년차의 서버실 주인장입니다. 오늘은 요즘 제가 푹 빠져 있는 로컬 LLM(Large Language Model, 대규모 언어 모델), 그중에서도 Ollama NPU 활용에 대한 이야기를 해볼까 합니다. 다들 NPU(Neural Processing Unit, 신경망 처리 장치) 이야기 많이 들어보셨을 거예요. 저도 처음엔 ‘이게 진짜 얼마나 빨라지겠어?’ 싶었는데, 실제로 써보니까 그 성능 차이가 어마어마하더라고요. 특히 홈랩에서 직접 다양한 모델을 돌려보면서 NPU의 진가를 제대로 경험했습니다.
저처럼 로컬 환경에서 LLM을 돌려보고 싶으신데, 생각보다 느린 속도 때문에 답답함을 느끼셨던 분들이라면 오늘 이야기가 큰 도움이 될 겁니다. 특히 M1/M2/M3 맥(Mac) 사용자분들이나 인텔 내장 GPU(iGPU)를 활용하고 싶으신 분들께는 더욱 유용한 정보가 될 거예요. 저도 처음엔 삽질 좀 했습니다만, 덕분에 얻은 깨달음을 여러분께 멘토처럼 솔직하게 공유해 드릴게요. 자, 그럼 Ollama NPU 활용을 통한 로컬 LLM 성능 벤치마크 및 최적화 전략, 지금부터 시작해볼까요?
Ollama와 NPU, 왜 중요할까요? (개념 설명)
먼저, Ollama(올라마)가 무엇인지부터 간단히 짚고 넘어갈까요? 쉽게 말해 Ollama는 로컬 환경에서 다양한 LLM을 쉽게 실행할 수 있도록 도와주는 프레임워크입니다. 모델 다운로드부터 실행까지, 마치 Docker(도커)로 컨테이너 이미지를 다루듯 편리하게 LLM을 관리할 수 있게 해주죠. 덕분에 저처럼 홈랩에서 여러 모델을 실험해보는 사람들에게는 정말 필수템이 되었어요.
그리고 NPU(Neural Processing Unit, 신경망 처리 장치)는 AI 연산에 특화된 하드웨어 가속기입니다. 기존 CPU(Central Processing Unit, 중앙 처리 장치)나 GPU(Graphics Processing Unit, 그래픽 처리 장치)도 AI 연산을 할 수 있지만, NPU는 처음부터 AI 워크로드를 효율적으로 처리하도록 설계되었기 때문에 훨씬 적은 전력으로 더 빠른 속도를 낼 수 있습니다. 특히 애플 실리콘(Apple Silicon) 맥의 MLX(Machine Learning eXchange) 프레임워크나 인텔의 OpenVINO(Open Visual Inference & Neural Network Optimization) 같은 기술들이 NPU를 적극적으로 활용하죠.
그럼 왜 NPU를 활용해야 할까요? 간단합니다. 속도와 효율성 때문입니다. 로컬에서 LLM을 돌리다 보면 텍스트 생성 속도가 느려서 답답할 때가 많거든요. NPU를 활용하면 이 속도를 획기적으로 개선할 수 있고, 노트북 같은 모바일 환경에서는 배터리 소모도 줄일 수 있습니다. 제가 직접 써보니, NPU 지원 여부에 따라 응답 속도가 체감상 2배 이상 차이 나는 경우도 많더라고요. 이건 정말 직접 경험해보지 않으면 모르는 부분입니다.
Ollama와 NPU를 활용한 로컬 LLM 아키텍처 다이어그램: 사용자가 Ollama를 통해 LLM 모델을 실행하고, 이 모델이 NPU를 활용하여 추론 속도를 높이는 과정을 시각적으로 보여줍니다.
Ollama NPU 활용을 위한 준비물 (실전 구현)
자, 이제 실전입니다. Ollama를 통해 NPU를 활용하려면 몇 가지 준비가 필요합니다. 제가 직접 해보니 이 단계에서 오류가 많이 나더라고요. 여러분은 삽질하지 마시라고 제가 겪었던 경험을 바탕으로 차근차근 설명해 드릴게요.
1. Ollama 설치하기
가장 먼저 Ollama를 설치해야 합니다. 각 운영체제에 맞는 설치 파일을 Ollama 공식 웹사이트에서 다운로드할 수 있습니다. 저는 주로 macOS 환경에서 테스트하는데, 그냥 다운로드해서 설치하면 끝이라 정말 편하더라고요.
# macOS에서 설치 (다운로드 후 실행)
# Windows/Linux는 공식 홈페이지 참조
curl -fsSL https://ollama.com/install.sh | sh
설치가 완료되면 터미널에서 ollama --version 명령어로 잘 설치되었는지 확인할 수 있습니다. ✅
2. NPU 지원 모델 선택하기 (GGUF와 양자화)
Ollama는 GGUF(GGML Unified Format)라는 파일 포맷을 기반으로 모델을 실행합니다. GGUF는 CPU, GPU는 물론 NPU까지 다양한 하드웨어에서 효율적으로 LLM을 실행할 수 있도록 최적화된 포맷입니다. 특히 양자화(Quantization)를 통해 모델의 크기를 줄이고, 추론 속도를 높이는 데 큰 역할을 하죠. 예를 들어, 16비트 부동소수점(FP16) 모델을 4비트 정수(Q4_0)로 양자화하면 모델 크기는 줄어들고 속도는 빨라지지만, 미세하게 정확도가 떨어질 수 있습니다. 하지만 로컬 환경에서는 이 정도는 감수하고 속도를 선택하는 경우가 많습니다.
NPU를 활용하려면 Ollama가 NPU를 지원하도록 빌드된 버전을 사용하거나, 특정 환경에서는 자동으로 NPU를 감지합니다. 특히 애플 실리콘 맥에서는 MLX 프레임워크를 통해 NPU(Neural Engine)가 자동으로 활용됩니다. 인텔 CPU의 내장 그래픽(iGPU)을 NPU처럼 활용하려면 OpenVINO 런타임이 필요할 수 있습니다.
# Ollama에서 사용 가능한 모델 목록 확인
ollama list
# 특정 모델 다운로드 (예시: llama2)
ollama pull llama2
모델을 다운로드할 때는 다양한 양자화 버전(예: llama2:7b-q4_K_M)이 있으니, 본인의 NPU 사양과 메모리 용량에 맞춰 선택하는 것이 중요합니다. 💡 저도 처음엔 무조건 큰 모델만 찾았는데, 적절한 양자화 모델을 쓰는 게 훨씬 효율적이더라고요.
3. NPU 활용 확인 및 벤치마크
Ollama가 NPU를 제대로 활용하고 있는지 확인하는 것이 중요합니다. macOS에서는 Activity Monitor(활동 모니터)에서 ‘Neural Engine’ 사용량을 확인하거나, 터미널에서 전시스템 리소스 모니터링 도구를 통해 실시간 NPU(Neural Engine) 활동을 확인할 수 있습니다. 윈도우나 리눅스에서는 각 NPU 제공사의 유틸리티(예: Intel OpenVINO Toolkit)를 사용해야 합니다.
# Ollama에서 모델 실행
ollama run llama2 "Tell me a joke."
# macOS에서는 별도 터미널에서 Activity Monitor를 열거나,
# 시스템 리소스 모니터링 도구로 Neural Engine 활용도 확인 가능
Ollama 모델이 활성화되어 NPU(Neural Engine)를 사용하고 있을 때, macOS 활동 모니터에서 해당 NPU의 높은 활용도를 보여주는 스크린샷입니다.
벤치마크는 주로 토큰 생성 속도(Tokens per second, t/s)로 측정합니다. 동일한 프롬프트로 여러 모델이나 동일 모델의 다른 양자화 버전을 실행해보고, NPU 활용 전후의 속도를 비교하는 거죠. 제가 직접 해보니 NPU를 제대로 활용하면 t/s가 확 올라가는 것을 확인할 수 있었습니다. 예를 들어, CPU만 사용할 때 대비 NPU를 활용하면 일반적으로 2~5배 이상의 속도 향상을 경험할 수 있습니다. 🎉
⚠️ 삽질 경험: NPU가 제대로 활용되지 않을 때 (주의사항/트러블슈팅)
저도 처음부터 NPU를 척척 잘 썼던 건 아닙니다. 몇 번의 삽질 끝에 얻은 교훈들을 공유해 드릴게요.
Ollama 버전 확인: 간혹 오래된 Ollama 버전에서는 최신 NPU나 특정 환경을 제대로 지원하지 않는 경우가 있습니다. 항상 최신 버전으로 유지하는 것이 중요합니다. Ollama 공식 웹사이트에서 최신 버전을 다운로드할 수 있어요.
모델 양자화 확인: 모든 GGUF 모델이 NPU에 최적화된 것은 아닙니다. 특히 낮은 양자화(예: Q2_K) 모델은 NPU보다 CPU에 더 적합할 수도 있고, 높은 양자화(예: Q8_0) 모델은 NPU 메모리를 초과하여 CPU로 폴백(Fallback)될 수 있습니다. 본인의 NPU 메모리(맥의 경우 통합 메모리)에 맞는 양자화 모델을 선택하는 것이 중요합니다.
환경 변수 설정: 특정 리눅스 환경이나 인텔 OpenVINO를 사용할 때는 Ollama가 NPU를 감지하도록 설정이 필요할 수 있습니다. 공식 문서나 커뮤니티 포럼을 참고하는 것이 좋습니다.
백그라운드 프로세스: 다른 AI 애플리케이션이나 무거운 작업이 백그라운드에서 NPU 리소스를 점유하고 있으면 Ollama의 성능이 저하될 수 있습니다. Activity Monitor나 Task Manager에서 불필요한 프로세스를 종료하고 테스트해보세요.
이런 문제들을 해결하면서 “아, 이게 단순하게 설치만 한다고 끝이 아니구나” 하고 느꼈습니다. 역시 인프라 엔지니어는 환경 설정과의 싸움이네요. ㅎㅎ
Ollama NPU 벤치마크 결과 및 최적화 전략 (검증/결과)
제가 홈랩에서 다양한 모델과 환경으로 벤치마크를 진행하면서 얻은 인사이트를 공유해 드릴게요. 구체적인 수치를 나열하기보다는 전반적인 경향과 최적화 전략에 집중하겠습니다.
1. NPU 활용의 압도적인 성능 향상
애플 실리콘 맥의 경우, NPU(Neural Engine)를 활용했을 때 CPU만 사용하는 것보다 2~5배 이상의 토큰 생성 속도 향상을 경험했습니다. 특히 M1, M2, M3 칩으로 갈수록 NPU 성능이 향상되어 더욱 쾌적한 로컬 LLM 환경을 구축할 수 있었습니다. 이는 MLX 프레임워크 덕분인데, Ollama가 이를 잘 활용하고 있더라고요.
인텔 CPU 내장 그래픽(iGPU)을 OpenVINO를 통해 NPU처럼 활용하는 경우도 비슷한 성능 향상을 보여주었습니다. 다만, 설정이 좀 더 복잡하고 지원 모델 범위가 제한적일 수 있다는 점은 염두에 두셔야 합니다.
2. 적절한 양자화 모델 선택의 중요성
NPU 메모리(통합 메모리) 용량에 맞춰 적절한 양자화(Quantization) 수준의 모델을 선택하는 것이 매우 중요합니다. 너무 큰 모델을 사용하면 NPU 메모리를 초과하여 CPU로 폴백되거나, 추론 속도가 오히려 느려질 수 있습니다. 반대로 너무 작은 양자화 모델은 정확도가 떨어질 수 있죠. 보통 Q4_K_M이나 Q5_K_M 같은 중간 수준의 양자화 모델이 성능과 정확도 면에서 균형 잡힌 선택이 될 수 있습니다.
# Ollama에서 다양한 모델과 양자화 버전 확인
ollama list
# 실행하려는 모델의 크기와 특성 비교
# 예: llama2:7b-q4_K_M vs llama2:13b-q4_K_M
3. Ollama 런타임 최적화 팁
최신 버전 유지: 최신 버전은 항상 성능 개선과 NPU 지원을 강화합니다.
시스템 리소스 최적화: Ollama 실행 중에는 다른 불필요한 리소스 소모 프로그램을 종료하여 NPU가 LLM 추론에 집중할 수 있도록 하는 것이 좋습니다.
적절한 모델 크기 선택: 본인의 NPU 메모리에 맞는 적절한 크기의 모델(7B, 13B 등)과 양자화 버전을 선택하세요.
다양한 NPU 환경(예: Apple M 시리즈 Neural Engine, Intel OpenVINO)에서 Ollama를 사용하여 LLM을 실행했을 때의 토큰 생성 속도(t/s)를 비교하는 막대 그래프입니다. CPU 전용 실행 결과와 NPU 활용 결과를 명확히 비교하여 성능 향상을 시각적으로 보여줍니다.
마무리하며: 로컬 LLM의 미래를 엿보다 (배운 점 정리 + 다음 단계 제안)
오늘은 Ollama NPU 활용을 통한 로컬 LLM 성능 벤치마크 및 최적화 전략에 대해 이야기해봤습니다. 13년차 인프라 엔지니어로서, 저는 새로운 기술이 나올 때마다 직접 만져보고 실험해보는 것을 즐기는데요, Ollama와 NPU의 조합은 정말 흥미로운 경험이었습니다. 특히 로컬 환경에서 이렇게 강력한 LLM을 돌릴 수 있다는 것은 개인 개발자나 소규모 팀에게 엄청난 기회를 제공한다고 생각합니다.
저의 삽질 경험이 여러분의 시간을 아껴주는 데 조금이나마 도움이 되었기를 바랍니다. 로컬 LLM은 아직 발전 가능성이 무궁무진한 분야입니다. 앞으로 더 다양한 NPU 지원과 최적화 기술이 나올 것이고, 우리는 이를 통해 더욱 강력하고 효율적인 AI 애플리케이션을 만들 수 있을 겁니다.
다음번에는 Ollama REST API를 활용해서 로컬 LLM을 웹 애플리케이션에 연동하는 방법에 대해 다뤄볼까 합니다. 로컬 LLM으로 나만의 AI 어시스턴트를 만들고 싶으시다면 다음 글도 기대해주세요!
오늘도 제 “13년차의 서버실”을 찾아주셔서 감사합니다. 다음에 또 유익한 정보로 찾아뵙겠습니다! 궁금한 점이 있다면 언제든지 댓글로 남겨주세요. 제가 아는 선에서 최대한 도와드릴게요.
Ollama 로고와 NPU, GGUF, MLX, OpenVINO 등 핵심 기술 아이콘들이 조화롭게 배치된 인포그래픽입니다. 로컬 LLM 최적화의 중요성과 미래 방향성을 암시하는 디자인으로 구성되었습니다.
안녕하세요, 13년차 서버실의 기록을 이어가고 있는 엔지니어입니다. 요즘 집에서 홈랩(Home Lab)을 운영하면서 개인 서버에 이것저것 구축하는 재미에 푹 빠져있는데요. 특히 거실 한쪽을 차지한 맥 스튜디오(Mac Studio)에 대규모 언어 모델(Large Language Model, LLM)을 직접 돌려보는 것에 도전하고 있습니다. 처음엔 ‘과연 맥북에서도 LLM이 돌아갈까?’ 싶었는데, MLX(MLX Framework)라는 프레임워크를 알게 되면서 세상이 달라졌거든요. 오늘은 이 MLX와 GGUF 모델을 활용해서 제 맥북에서 LLM을 직접 돌려보고, 그 성능을 측정한 벤치마크 결과를 여러분과 공유하려 합니다. 혹시 여러분도 맥북에서 LLM 로컬 실행에 관심 있으셨다면, 이 글이 좋은 가이드가 될 거예요!
MLX 프레임워크를 사용한 LLM 로컬 실행 아키텍처 개요
MLX와 GGUF, 왜 맥북에서 온디바이스 AI를 돌리는가?
최근 LLM 기술이 정말 빠르게 발전하고 있죠. ChatGPT 같은 클라우드 기반 서비스도 훌륭하지만, 때로는 온디바이스 AI(On-device AI), 즉 내 기기에서 직접 LLM을 구동하고 싶을 때가 있습니다. 개인정보 보호 문제도 있고, 인터넷 연결 없이도 사용하고 싶을 때, 혹은 단순한 기술적 호기심 때문일 수도 있고요. 특히 Apple Silicon(M1, M2, M3 칩 등)이 탑재된 맥북은 GPU 성능이 뛰어나서 LLM 로컬 실행에 대한 기대감이 높았습니다. 하지만 macOS 환경에서 LLM을 효율적으로 돌릴 수 있는 프레임워크가 마땅치 않았죠. 바로 이때 MLX가 등장했습니다. MLX는 Apple Silicon 최적화된 파이썬 기반 머신러닝 프레임워크거든요. 그리고 GGUF는 LLM 모델을 효율적으로 저장하고 불러오는 데 사용되는 파일 형식인데, MLX가 GGUF 포맷을 지원하면서 맥북에서의 LLM 실행이 훨씬 수월해졌습니다. 쉽게 말해, MLX는 맥북용 LLM 엔진이고, GGUF는 그 엔진이 읽을 수 있는 LLM 모델 파일이라고 생각하시면 됩니다.
MLX 프레임워크란 무엇인가?
MLX는 Apple에서 개발한 머신러닝 라이브러리로, Apple Silicon 칩의 성능을 최대한 끌어내기 위해 설계되었습니다. 파이썬 친화적인 API를 제공해서 기존 파이썬 개발자들이 쉽게 접근할 수 있다는 게 큰 장점이에요. 가장 큰 특징은 자동 미분(Automatic Differentiation) 기능을 지원하며, GPU 가속을 기본으로 활용한다는 점입니다. 즉, 복잡한 연산이 필요한 LLM 모델을 맥북의 GPU를 사용해서 훨씬 빠르게 처리할 수 있게 해주는 거죠. 저도 처음엔 ‘이게 진짜 돌아가겠어?’ 싶었는데, 실제로 사용해보니 정말 놀라웠습니다. 메모리 관리도 효율적이라서, 제 맥북의 통합 메모리(Unified Memory)를 잘 활용하는 모습이 인상 깊었거든요.
GGUF 모델 포맷의 이해
GGUF(GPT-Generated Unified Format)는 LLM 모델을 저장하기 위한 파일 형식입니다. 이전에는 GGML이라는 포맷도 있었는데, GGUF는 이를 개선해서 호환성과 확장성을 높였어요. GGUF 포맷은 모델의 가중치(weights)뿐만 아니라, 모델의 구조, 설정값, 토크나이저(tokenizer) 정보까지 하나의 파일에 담을 수 있습니다. 덕분에 LLM 모델 파일을 배포하고 사용하는 것이 훨씬 간편해졌죠. 또한, GGUF는 양자화(Quantization)를 지원하는데, 이는 모델의 크기를 줄이고 추론 속도를 높이는 기술입니다. 예를 들어, 16비트 부동소수점(FP16)으로 저장된 모델을 4비트 정수(INT4)로 양자화하면 모델 파일 크기가 1/4로 줄어들고, 메모리 사용량도 크게 감소합니다. MLX는 이러한 GGUF 포맷의 양자화된 모델들을 정말 잘 지원합니다. 덕분에 제 맥북의 제한된 메모리에서도 큰 LLM 모델을 로드할 수 있었던 것이죠.
MLX와 GGUF를 이용한 LLM 로컬 실행 코드 예시
맥북에서 GGUF 모델과 MLX로 LLM 실행하기: 실전 가이드
자, 이제 이론적인 설명은 충분했고, 실제로 어떻게 하는지 보여드릴 차례입니다. 제가 사용한 환경은 다음과 같습니다.
맥북 모델: M2 Pro (16GB 통합 메모리)
macOS 버전: 최신 버전
Python 버전: 3.9 이상
MLX 설치: pip install mlx-lm
GGUF 모델: Hugging Face 등에서 공개된 GGUF 포맷 모델 (예: Llama 2, Mistral 등)
1단계: MLX 설치
가장 먼저 MLX를 설치해야 합니다. 터미널을 열고 다음 명령어를 실행해주세요.
pip install mlx-lm
정말 간단하죠? MLX는 Apple Silicon에 최적화되어 있어서 설치도 빠릅니다.
2단계: GGUF 모델 다운로드
다음으로 실행하고 싶은 LLM 모델을 GGUF 포맷으로 다운로드해야 합니다. Hugging Face Hub에는 정말 많은 GGUF 모델들이 공개되어 있어요. 예를 들어, Mistral 7B 모델의 GGUF 버전을 다운로드하려면 Hugging Face에서 “mistral gguf”으로 검색하면 됩니다. 원하는 모델의 크기(7B, 13B 등)와 양자화 수준(Q4_K_M, Q5_K_M 등)을 고려해서 선택하세요. 저는 제 16GB 메모리에 맞는 Q4_K_M 버전을 선택했습니다.
모델 파일을 다운로드 받은 후, 적당한 경로에 저장해둡니다. 예를 들어 <code>~/models/ 폴더에 저장했다고 가정하겠습니다.
3단계: MLX로 GGUF 모델 로드 및 실행
이제 파이썬 스크립트를 작성해서 MLX로 모델을 불러오고 실행해볼 차례입니다. 아래는 간단한 예제 코드입니다.
from mlx_lm.models import load
from mlx_lm.utils import generate, load_config
# 모델 경로 설정 (다운로드 받은 GGUF 파일의 경로)
model_path = "mistral-7b-instruct-v0.2-GGUF"
# GGUF 모델 로드
model, tokenizer = load(model_path)
# 프롬프트 설정
prompt = """맥북에서 LLM을 로컬로 실행하는 방법에 대해 설명해줘."""
# 텍스트 생성 (추론)
print("Generating response...")
response = generate(
model,
tokenizer,
prompt=prompt,
max_tokens=200,
temp=0.7,
top_p=0.9,
verbose=True
)
print("\n--- Generated Response ---")
print(response)
print("------------------------")
이 코드를 실행하면 다운로드 받은 GGUF 모델을 로드하고, 입력한 프롬프트에 대한 응답을 생성합니다. MLX는 자동으로 Apple Silicon의 GPU를 활용해서 연산을 가속하거든요. 처음 이 코드를 실행하고 결과를 봤을 때, ‘와, 진짜 되는구나!’ 싶어서 정말 신났습니다.
⚠️ 주의사항 및 삽질 경험
여기까지 잘 따라오셨다면 큰 문제는 없겠지만, 저도 처음엔 몇 가지 시행착오를 겪었습니다. 몇 가지 주의사항과 제 삽질 경험을 공유해 드릴게요.
메모리 부족 문제: 제 맥북은 16GB 메모리인데, 7B 모델의 Q4_K_M 버전은 무리 없이 돌아갔습니다. 하지만 13B 모델이나 더 높은 양자화 버전(Q5, Q8)은 메모리 부족으로 로딩이 안 되거나 매우 느려질 수 있어요. 이럴 때는 더 낮은 양자화 버전(Q3, Q2)을 사용하거나, 모델 크기를 줄여야 합니다.
MLX 버전 호환성: MLX는 계속 발전하고 있기 때문에, 특정 버전에서는 API가 변경될 수 있습니다. 만약 코드가 작동하지 않는다면, MLX 라이브러리를 최신 버전으로 업데이트해보세요. pip install --upgrade mlx-lm
GGUF 모델 종류: 모든 GGUF 모델이 MLX와 완벽하게 호환되는 것은 아닙니다. 특히 Llama, Mistral 계열은 잘 작동하지만, 아주 최신이거나 특이한 구조의 모델은 문제가 있을 수 있어요. Hugging Face 모델 페이지의 설명을 잘 읽어보고, 다른 사용자들이 MLX에서 잘 사용했는지 후기를 찾아보는 것이 좋습니다.
GPU 활용 확인: 코드를 실행할 때, Activity Monitor를 열어 GPU 사용률을 확인해보세요. MLX가 GPU를 제대로 활용하고 있다면, GPU 사용률이 높게 나타날 거예요. 만약 CPU만 사용되고 있다면, MLX 설치나 코드에 문제가 있을 수 있습니다.
이런 문제들 때문에 처음엔 몇 번이나 다시 설치하고 코드를 수정해야 했지만, 결국 성공했을 때의 희열은 정말 컸습니다. 여러분도 이런 과정을 통해 더 깊이 이해하게 될 거예요!
MLX와 GGUF를 사용한 LLM 로컬 실행 결과 및 성능 지표
실측 벤치마크 결과: 성능은 어느 정도일까?
가장 궁금하실 부분일 텐데요, 제 맥북 M2 Pro (16GB)에서 Mistral 7B Instruct v0.2 (Q4_K_M) 모델을 MLX로 실행했을 때의 성능입니다. 정확한 수치는 실행 환경과 설정에 따라 달라질 수 있지만, 대략적인 체감 성능은 이렇습니다.
테스트 시나리오: 간단한 질문-답변 프롬프트, 200 토큰 생성
결과:
생성 속도 (Tokens/Second): 평균 15~25 tokens/sec 사이가 나왔습니다.
GPU 활용률: 약 70~90% 수준으로 꾸준히 사용되었습니다.
메모리 사용량: 모델 로딩 시 약 6~7GB, 추론 시에는 8~10GB 수준으로 통합 메모리를 사용했습니다.
이 정도 속도면 일상적인 질문이나 간단한 텍스트 생성에는 충분히 활용 가능한 수준이라고 봅니다. 물론 ChatGPT 같은 최신 클라우드 서비스의 응답 속도에는 미치지 못하지만, 로컬에서 이 정도 성능을 보여준다는 것 자체가 정말 대단하다고 느껴집니다. 특히 인터넷 연결 없이, 개인정보 유출 걱정 없이 LLM을 사용할 수 있다는 점은 정말 큰 매력입니다. Apple Silicon의 성능을 제대로 활용하는 MLX 덕분에 이런 경험이 가능해졌네요.
MLX vs llama.cpp 등 다른 로컬 LLM 실행 방식 성능 비교 (개략적)
마무리하며: 맥북에서의 LLM 온디바이스 AI 실행, 충분히 가능합니다!
오늘은 13년차 인프라 엔지니어의 시선으로, MLX 프레임워크와 GGUF 모델을 활용하여 맥북에서 LLM을 로컬 실행하는 방법과 그 성능을 실측 벤치마크로 공유해드렸습니다. 처음엔 ‘맥북으로 LLM이라니…’ 싶었지만, MLX 덕분에 Apple Silicon의 강력한 GPU 성능을 활용하여 정말 놀라운 경험을 할 수 있었습니다. 15~25 tokens/sec 정도의 속도로, 16GB 메모리 환경에서도 7B 모델을 충분히 돌려볼 수 있다는 것은 정말 고무적이거든요.
물론 아직은 클라우드 기반 LLM의 속도나 최신 모델 지원 면에서는 부족한 점이 있을 수 있습니다. 하지만 개인정보 보호, 인터넷 연결 없이 사용 가능, 비용 절감, 그리고 무엇보다 기술 자체에 대한 탐구심을 충족시켜준다는 점에서 맥북에서의 LLM 로컬 실행은 충분히 가치 있는 도전이라고 생각합니다. 여러분도 이 글을 참고하셔서 여러분의 맥북에서 직접 온디바이스 AI를 경험해보시길 바랍니다!
다음 글에서는 MLX의 더 advanced한 기능이나, 다른 GGUF 모델들을 더 다양하게 테스트해본 후기로 찾아오겠습니다. 혹시 궁금한 점이 있다면 언제든지 댓글 남겨주세요!