모델별 실행 레시피

최종 업데이트

Qwen3.8-27B 장비별 실행: Mac oMLX·RTX llama.cpp

모델 형식과 요청을 맞춘 뒤 Mac과 RTX에서 같은 Qwen3.8-27B 작업을 실행해요

Qwen3.8-27B Q4 체크포인트1는 Apple Silicon 맥에서 MLX2 형식으로 oMLX에, RTX에서는 GGUF3 형식으로 llama.cpp에 맞춰 실행해요. 같은 요청으로 서버가 답하는지 확인한 뒤 첫 토큰4과 완료 시간, 메모리를 기록해요. 0.7.1.dev1의 INT8 activation prefill5 수치는 M5 Max의 Qwen3.8-27B oQ8e 측정으로 따로 구분해요.

Qwen3.8-27B는 질문이나 코드를 입력받아 텍스트 답변을 만드는 27B 밀집 언어 모델이에요. 짧은 요청이 돌아오는 기본 경로를 확인한 다음, 필요한 문맥 길이와 생성 옵션을 조정해 사용 환경에 맞춰요.

실행 조건과 핵심 내용
  • oMLX는 MLX 체크포인트를, llama.cpp는 GGUF를 사용해요.
  • 첫 실행은 모델 적재와 캐시가 포함되므로 warm 반복 실행과 구분해요.
  • INT8 activation prefill은 oQ8e 지원 체크포인트의 프리필 단계에 적용해요.
  • MTP와 KV 캐시 정밀도는 기본 응답을 확인한 뒤 각각 바꿔요.
장비별 실행 설정으로 이동

체크포인트와 맥·GPU 메모리를 먼저 맞춰요

Mac의 oMLX는 MLX 변환 체크포인트를 실행하고, RTX의 llama.cpp는 GGUF를 읽어요. 같은 Qwen3.8-27B 이름이 붙어도 파일 형식은 서로 바꿔 쓸 수 없어요. 기준 파일로 Mac에는 mlx-community/Qwen3.8-27B-4bit, RTX에는 ggml-org/Qwen3.8-27B-GGUF의 Q4_K_M을 사용해요. Q4_K_M 파일은 약 17.6GB급이지만 실제 메모리는 실행 중 KV 캐시6와 작업 버퍼만큼 더 필요해요.

RTX 24GB에서는 문맥 4,096토큰으로 시작하고 브라우저나 편집기를 함께 쓸 메모리도 남겨요. Mac은 통합 메모리7 총량과 메모리 압력을 확인해요. 두 장비에서 같은 요청을 사용해야 실행 차이를 비교할 수 있어요.

문서 블록에서 초록색·노란색 경로가 노트북과 GPU 컴퓨터로 갈라져 이어져요.
같은 모델 계열이라도 Mac과 RTX에 맞는 체크포인트 형식이 달라요.

Mac에서는 oMLX로 MLX 모델을 불러와요

Apple Silicon 맥에서 oMLX를 열고 모델 폴더를 지정해 서버를 시작해요. 모델 검색에서 MLX 체크포인트 mlx-community/Qwen3.8-27B-4bit를 내려받은 뒤 브라우저에서 http://localhost:8000/admin/chat을 열어요. 모델을 선택하고 다음 요청을 그대로 보내요: Python에서 경로 문자열을 받아, 파일이 없으면 None을 반환하고 파일이 있으면 UTF-8 텍스트를 읽는 함수를 작성해 주세요. 입력과 반환 형식도 설명해 주세요.

정상이라면 작성한 Python 코드와 입력·반환 형식 설명이 대화 화면에 나타나요. 실패하면 관리 화면에서 모델 상태와 다운로드 완료 여부를 보고, 메모리 압력과 서버 로그의 첫 오류를 확인해요. 모델 목록에 없다면 MLX 체크포인트 형식과 지정한 모델 폴더를 살펴봐요.

파일 아이콘이 보이는 노트북과 블록 선반, 그래픽카드가 색 경로로 연결돼 있어요.
Mac에는 MLX, RTX에는 CUDA와 GGUF 실행 경로를 준비해요.

RTX에서는 CUDA llama.cpp 서버를 시작해요

CUDA8 Toolkit이 준비된 RTX PC에서 아래 명령으로 CUDA 지원 llama.cpp를 빌드하고 서버를 시작해요. 마지막 줄의 -hf는 GGUF 저장소와 Q4_K_M을 지정하고, -ngl all은 가능한 모델 층을 GPU9에 올려요. -c 4096은 문맥을 4,096토큰으로 설정해요. 아래 경로 ./build/bin/llama-server는 Linux 셸 기준이에요.

llama.cpp CUDA 빌드와 Q4_K_M 서버
git clone https://github.com/ggml-org/llama.cpp
cd llama.cpp
cmake -B build -DGGML_CUDA=ON
cmake --build build --config Release -t llama-server
./build/bin/llama-server -hf ggml-org/Qwen3.8-27B-GGUF:Q4_K_M -c 4096 -ngl all --host 127.0.0.1 --port 8080
CUDA 빌드 완료 뒤 로컬 주소에 서버를 띄워요.

서버가 준비되면 브라우저에서 http://localhost:8080을 열고 모델을 선택해요. Mac 절에서 사용한 것과 같은 Python 요청을 붙여 넣어 보내요.

정상 응답으로 코드와 설명이 표시되면 모델 적재와 요청 흐름을 확인한 거예요. 빌드가 실패하면 CMake가 CUDA Toolkit을 찾는지 확인해요. 서버는 열렸지만 모델이 시작되지 않으면 다운로드 진행, 저장소명, VRAM10 여유를 살피고 문맥을 2,048토큰으로 낮춰 다시 요청해요.

Windows CUDA PC에서는 실행 파일 위치를 확인해요

Windows에서 빌드하려면 Visual Studio 2022의 C++ 개발 도구와 CUDA Toolkit을 준비하고, Visual Studio Developer PowerShell에서 llama.cpp 저장소 폴더로 이동해요. 공식 빌드 문서는 CUDA 구성에 Linux와 같은 CMake 옵션을 사용하고, 서버 문서는 llama-server 타깃을 별도로 빌드해요. 아래 순서로 빌드한 다음 생성된 실행 파일을 찾아 모델 서버를 시작해요.

Windows CUDA 빌드와 Q4_K_M 서버 시작
git clone https://github.com/ggml-org/llama.cpp
cd llama.cpp
cmake -B build -DGGML_CUDA=ON
cmake --build build --config Release -t llama-server
$server = Get-ChildItem -Path .\build -Filter llama-server.exe -Recurse | Select-Object -First 1 -ExpandProperty FullName
& $server -hf ggml-org/Qwen3.8-27B-GGUF:Q4_K_M -c 4096 -ngl all --host 127.0.0.1 --port 8080
검색된 실행 파일을 지정된 Q4_K_M 모델과 로컬 포트로 시작해요.

서버가 뜨면 http://localhost:8080을 열고 모델을 선택해요. Mac 절의 Python 요청을 그대로 보내요.

정상 응답에 코드와 입력·반환 설명이 표시되면 모델 적재와 요청 흐름이 작동해요. 실행 파일이 없으면 빌드 출력의 첫 오류와 CUDA Toolkit 인식을 확인해요. 서버는 시작하지만 모델 적재가 실패하면 로그의 첫 모델 오류와 VRAM 여유를 살펴봐요.

첫 실행과 반복 실행의 대기를 나눠 기록해요

먼저 각 서버에서 위 Python 요청에 정상 답변이 오는지 확인해요. 속도를 비교할 때는 모델을 처음 적재한 시간을 따로 적고, 한 번 워밍업한 뒤 같은 요청을 세 차례 보내요. 입력 문맥과 답변 한도를 고정한 채 요청 시작부터 첫 토큰, 답변 완료까지의 시간을 기록해요. RTX는 VRAM, Mac은 통합 메모리 압력도 함께 살펴봐요.

입력 길이를 늘릴 때는 같은 Python 요청에 실제 작업 코드 일부를 덧붙여 두 환경에 똑같이 보내요. 요청이 길어지면 프리필 시간과 KV 캐시 사용량이 달라질 수 있어요. Mac의 MLX Q4와 RTX의 GGUF Q4_K_M은 형식과 양자화11가 다르므로, 기록할 때 실행한 모델 파일도 적어야 장비 차이와 체크포인트 차이를 구분할 수 있어요.

같은 작업을 장비별로 실행할 때 기록할 항목
기록 값확인 위치용도
모델 형식·양자화모델 카드·실행 로그Mac과 RTX 파일 경로 구분
첫 토큰·완료 시간요청 타이머입력 처리와 생성 대기 구분
최대 메모리활성 상태 보기·GPU 모니터다른 앱과 함께 쓸 여유 확인
노트북과 작은 장비 옆 색 블록 다섯 개가 선으로 연결되고 끝에 체크 표시 노트가 있어요.
입력 길이와 설정을 하나씩 바꾸며 답변과 대기를 함께 기록해요.

0.7.1.dev1의 INT8 prefill은 지원 모델에서 따로 시험해요

2026년 10월 9일 공개된 oMLX 0.7.1.dev1에는 Qwen3.8-27B oQ8e의 INT8 activation prefill 개선이 들어 있어요. 모델 설정의 Experimental Features에서 이 경로를 켜요. 릴리스 측정은 M5 Max와 oQ8e 체크포인트에서 이뤄졌고, Mac 실행 절의 Q4 모델 mlx-community/Qwen3.8-27B-4bit와는 다른 파일이에요. 입력 길이별 측정 조건과 수치는 아래 표에서 확인해요.

INT8 prefill을 시험하려면 oQ8e 지원 파일과 0.7.1.dev1을 준비하고, 짧은 입력으로 기본 답변이 정상인지 먼저 확인해요. 설정에서 해당 모델의 INT8 activation prefill을 켠 뒤 같은 토큰 수의 입력을 세 번 처리하고 프리필 속도 또는 TTFT12의 중앙값을 비교해요. M5 Max에서 공개된 개선은 생성 구간의 속도를 뜻하지 않으므로 디코드13 tok/s도 별도로 기록해요.

메모리에 오류가 나거나 첫 토큰이 늦어지면 문맥 길이를 낮추고 모델별 설정과 서버 로그의 선택 경로를 확인해요. INT8 activation은 계산 입력 표현을 바꾸므로 응답 수치와 답변 품질도 확인해요. 옵션을 끄고 같은 요청을 다시 보내면 변경 영향을 비교할 수 있어요.

oMLX 릴리스의 Qwen3.8-27B oQ8e INT8 activation prefill 측정
M5 Max 입력공개 변화비교 단계
4K 토큰프리필 +25%프리필
16K 토큰프리필 +38%프리필

MTP와 KV 캐시 정밀도는 기준 결과 뒤에 바꿔요

Qwen3.8-27B 지원 MTP14 체크포인트에서는 모델별 Lightning MTP를 비교할 수 있어요. MTP는 토큰 생성 경로에, KV 캐시 정밀도는 대화 상태를 저장하는 데 쓰는 메모리와 계산량에 영향을 줘요. 먼저 둘 다 기본 상태로 답변과 메모리를 기록하고, MTP만 켠 비교를 끝낸 다음 KV 캐시 설정만 바꿔요. 매 단계에서 같은 체크포인트와 질문을 사용해요.

0.7.1.dev1은 개발판이에요. 안정성이 우선이면 0.7.0을 유지하고, 새 기능은 별도 시험 환경에서 확인해요. 요청이 자주 실패하면 MTP나 KV 캐시를 조절하기 전에 서버 로그, 문맥 길이, VRAM 또는 통합 메모리 상태를 살펴봐요.

부록: 별도 NVIDIA 서버에서 BF16 vLLM을 실행할 때

27B 파라미터에 BF1615의 2바이트를 곱하면 가중치만 약 54GB예요. 실행 버퍼와 캐시 공간은 이 계산에 들어 있지 않아요. 아래 명령은 Q4_K_M을 실행하는 앞의 RTX 24GB 레시피와 다른, BF16 가중치를 수용할 수 있는 별도 NVIDIA 서버용이에요. 주 레시피를 따라 한다면 이 부록은 건너뛰고 앞의 llama.cpp 명령을 사용해요.

별도 서버용 BF16 vLLM 시작
vllm serve Qwen/Qwen3.8-27B --host 127.0.0.1 --port 8000 --max-model-len 8192 --gpu-memory-utilization 0.90
BF16 가중치를 수용하는 별도 서버의 예시예요.

첫 명령을 실행한 뒤 서버 프로세스가 계속 실행 중인지 확인해요. 응답이 없거나 프로세스가 종료되면 터미널에 나온 첫 오류와 GPU 메모리 상태부터 봐요. 서버가 실행되면 두 번째 명령으로 실제 등록된 모델 ID를 확인해 요청에 사용해요.

서버가 알린 모델 ID 조회
curl -N http://127.0.0.1:8000/v1/models
요청을 보낼 때 응답에 나온 모델 ID를 사용해요.

용어 각주

  1. 체크포인트 — 학습된 모델의 가중치 등을 저장한 파일입니다. 같은 모델 계열도 버전이나 용도에 따라 다른 체크포인트를 쓸 수 있습니다.

    본문으로 돌아가기
  2. MLX — Apple이 개발하는 머신러닝 프레임워크로, Apple Silicon의 CPU와 GPU가 공유하는 메모리를 활용해 모델을 실행합니다.

    본문으로 돌아가기
  3. GGUF — 모델 정보를 담는 파일 형식으로 llama.cpp 계열 도구에서 널리 사용됩니다.

    본문으로 돌아가기
  4. 토큰 — 모델이 입력이나 출력을 나누어 처리하는 단위입니다.

    본문으로 돌아가기
  5. 프리필 — LLM이 입력 프롬프트를 읽고 각 토큰의 내부 표현을 계산하는 단계입니다. 입력이 길수록 처리할 토큰이 많아집니다.

    본문으로 돌아가기
  6. KV 캐시 — 어텐션에서 이전 토큰의 키·값을 저장해 다음 토큰 생성 때 재사용하는 메모리입니다. 문맥 길이와 배치 크기에 따라 용량이 달라집니다.

    본문으로 돌아가기
  7. 통합 메모리 — CPU와 GPU가 같은 물리 메모리 풀을 공유하는 구조입니다.

    본문으로 돌아가기
  8. CUDA — NVIDIA GPU에서 범용 계산을 실행하기 위한 소프트웨어 플랫폼입니다.

    본문으로 돌아가기
  9. GPU — 많은 계산을 병렬로 처리하는 프로세서입니다. AI 모델 실행에서는 모델 계산을 맡습니다.

    본문으로 돌아가기
  10. VRAM — 그래픽카드의 GPU가 사용하는 메모리입니다. 모델 가중치와 계산 중간값을 저장합니다.

    본문으로 돌아가기
  11. 양자화 — 모델의 가중치나 계산값을 더 적은 비트로 표현해 저장 공간과 메모리 사용량을 줄이는 방법입니다. 표현 단계가 거칠어져 정확도에도 영향을 줄 수 있습니다.

    본문으로 돌아가기
  12. 첫 토큰 지연 — 요청을 보낸 뒤 첫 출력 토큰이 도착하기까지 걸린 시간입니다.

    본문으로 돌아가기
  13. 토큰 디코드 — 입력과 앞서 만든 답변을 바탕으로 다음 출력 토큰을 차례로 생성하는 단계입니다.

    본문으로 돌아가기
  14. MTP — 한 번에 여러 미래 토큰을 예측하도록 학습하는 목표 또는 이를 수행하는 모델 구성입니다. 추측 디코딩에서는 이 예측을 후보 토큰으로 제안할 수 있습니다.

    본문으로 돌아가기
  15. BF16 — 모델 수치를 저장하고 계산하는 16비트 부동소수점 형식입니다. FP32와 같은 폭의 지수부를 써 넓은 값 범위를 표현합니다.

    본문으로 돌아가기

자주 묻는 질문

이 글에서 가장 먼저 확인할 것은 무엇인가요?
Qwen3.8-27B Q4 체크포인트는 Apple Silicon 맥에서 MLX 형식으로 oMLX에, RTX에서는 GGUF 형식으로 llama.cpp에 맞춰 실행해요. 같은 요청으로 서버가 답하는지 확인한 뒤 첫 토큰과 완료 시간, 메모리를 기록해요. 0.7.1.dev1의 INT8 activation prefill 수치는 M5 Max의 Qwen3.8-27B oQ8e 측정으로 따로 구분해요.
필요한 메모리는 어느 정도인가요?
Mac의 oMLX는 MLX 변환 체크포인트를 실행하고, RTX의 llama.cpp는 GGUF를 읽어요. 같은 Qwen3.8-27B 이름이 붙어도 파일 형식은 서로 바꿔 쓸 수 없어요. 기준 파일로 Mac에는 `mlx-community/Qwen3.8-27B-4bit`, RTX에는 `ggml-org/Qwen3.8-27B-GGUF`의 Q4_K_M을 사용해요. Q4_K_M 파일은 약 17.6GB급이지만 실제 메모리는 실행 중 KV 캐시와 작업 버퍼만큼 더 필요해요.

실행 레시피

장비별 설정

한 사람이 사용할 때

사용할 장비를 고르면 실행 명령과 조정할 옵션이 나옵니다.

가용 메모리: 56GB / 대역폭: 307GB/s

운용 프로필

Apple MacBook Pro M5 Pro (64GB)

메모리 적정

권장 런타임: oMLX (MLX 4비트 (GGUF Q4_K_M과 별도 형식)) · 문서화된 런타임 설정

설치 직후 처음 실행하거나 매일 안정적으로 사용할 때

선택 프로필 문맥

16,384 토큰

런타임 문서 기반MBP M5 Pro 64GB · Q4 · 요청 1개

런타임 문서에 따른 시작 설정입니다. 아래 순서로 조정하며 속도를 비교하세요.

계산기 예상 디코드

13.9 ~ 15.4 tok/s

단일 사용자 예상치

계산기 예상 TTFT

36.0 ~ 41.9초

프리필: 392 ~ 456 tok/s

예상 메모리 점유

약 21.21GB / 56GB

남은 여유: 약 34.8GB

서버 주소

http://127.0.0.1:8000

로컬 전용 127.0.0.1

예상치는 계산기의 추천 양자화·가속과 16,384토큰 기준입니다. 위 실행 설정의 실측값은 아닙니다.

이 프로필의 실제 설정

적용값왜 이렇게 잡았나
가중치MLX 4비트 (GGUF Q4_K_M과 별도 형식)MLX 모델 디렉터리를 사용합니다. GGUF의 Q4_K_M과 같은 파일 형식이 아닙니다.
입력 길이 확인16,384요청 전 모델 설정의 입력 제한을 확인합니다. 이 실행 명령은 문맥 길이를 지정하지 않습니다.
KV 캐시모델 설정에서 확인이 실행 명령은 KV 캐시 정밀도를 지정하지 않습니다.
프리필 배치런타임 설정에서 확인llama.cpp의 batch-size와 ubatch-size를 MLX 설정값으로 대신 쓰지 않습니다.
동시 요청1한 요청의 속도를 확인합니다. 여러 요청의 합산 처리량과 구분합니다.
메모리 여유2GB 이상모델을 불러온 뒤 실제 메모리와 스왑 여부를 확인합니다.

MBP M5 Pro 64GB 실행 명령어 (oMLX)

Apple Silicon · MLX 모델 · 메모리 가드
MODEL_DIR="$HOME/.omlx/models"
omlx serve \
  --model-dir "$MODEL_DIR" \
  --host 127.0.0.1 \
  --port 8000 \
  --max-concurrent-requests 1 \
  --memory-guard balanced
먼저 이 설정으로 기준 속도를 기록한 뒤 아래 튜닝 순서를 따라 한 항목씩 바꿉니다.

실행 후 확인

  1. 01서버 시작 로그에서 모델 적재 완료와 실제 컨텍스트 길이를 확인합니다.
  2. 02준비 실행 뒤 요청은 하나씩 보냅니다. 길이가 같은 서로 다른 입력 세 개로 첫 입력 처리 시간을 기록합니다.
  3. 03같은 입력을 반복한 결과는 캐시 재사용으로 따로 기록합니다. 첫 입력 결과와 합치지 않습니다.
  4. 04프리필 tok/s, 디코드 tok/s, 피크 메모리를 함께 기록한 뒤 한 항목씩만 바꿉니다.

바뀌는 점

  • 문맥과 동시 요청을 보수적으로 잡아 장비의 최대 처리량보다 낮게 나올 수 있습니다.

한 항목씩 조정

속도를 올리는 순서

여러 값을 한꺼번에 바꾸면 원인을 찾기 어렵습니다.

  1. STEP 1

    기준값 저장

    첫 입력과 캐시 재사용을 구분하고 각각 세 번 기록합니다. 프리필·디코드·피크 메모리를 함께 비교합니다.

    멈출 때: 오류가 있거나 메모리 여유가 2GB보다 작으면 다음 단계로 넘어가지 않습니다.

  2. STEP 2

    프리필 청크 조정

    1,024 → 2,048 → 4,096 순서로 올리며 긴 입력의 TTFT와 피크 메모리를 비교합니다.

    멈출 때: TTFT가 줄지 않거나 메모리 정점이 급증하면 직전 값으로 돌아갑니다.

  3. STEP 3

    KV 캐시 조정

    문맥이 부족할 때만 F16/BF16 기준값과 Q8 캐시를 같은 질문으로 비교합니다.

    멈출 때: 출력 차이가 생기거나 필요한 문맥이 이미 확보됐다면 기본 정밀도를 유지합니다.

  4. STEP 4

    MTP·투기 디코딩

    지원 모델에서만 켠 뒤 코드와 일반 문장을 나눠 수락률과 실제 디코드 tok/s를 측정합니다.

    멈출 때: 세 번의 중앙값이 기준보다 좋아지지 않으면 끕니다.

  5. STEP 5

    문맥 확장

    실제로 필요한 길이까지 두 배씩 늘리고 중간 정보 검색과 스왑 여부를 확인합니다.

    멈출 때: 검색 정확도가 떨어지거나 스왑·메모리 압축이 시작되면 한 단계 줄입니다.

내 장비 측정 기록 보내기

같은 조건으로 3회 이상 측정한 JSON을 가져오세요. 전송 버튼을 누르기 전에는 이 브라우저에서만 확인합니다.

장비·모델·실행 조건과 측정값만 받습니다. 질문·답변·원본 로그·파일 경로는 넣지 마세요.

기록 파일이 없다면, 실행 중인 로컬 서버에서 측정 도구로 만들 수 있습니다. Node.js 20 이상이 필요하며 결과를 자동 전송하지 않습니다.

검토한 이용자 제출 기록입니다. 이 사이트의 직접 측정과는 구분합니다.

설정 오류 제보

선택한 설정에서 막힌 부분을 알려주세요. 제보는 관리자만 확인합니다.

전송할 설정 · MBP M5 Pro 64GB · Qwen3.8 27B · 균형 설정

수정 내역

사이트의 안내가 바뀐 기록입니다. 설치된 엔진·모델 버전을 자동으로 확인한 결과는 아닙니다.

  1. Mac의 모델 형식과 실행 설정 정정

    Mac의 MLX 실행 경로를 GGUF Q4_K_M과 구분하고, 엔진 이름·모델 형식·명령의 표기를 맞췄습니다. 명령에서 지정하지 않는 KV 캐시 정밀도와 프리필 배치는 모델·런타임 설정에서 확인하도록 바꿨습니다.

    명령이 그대로인데 배치만 커진 것처럼 보이던 MLX 속도 프로필도 제거했습니다.

  2. Qwen 27B Spark 설정에서 다른 엔진의 옵션 제거

    단일·이중 Spark의 SGLang 설정에 llama.cpp 전용 투기 디코딩 옵션이 붙지 않도록 수정했습니다. DFlash2·DSpark 구성은 각 전용 모델과 실행 경로를 유지합니다.

  3. 첫 입력과 캐시 재사용의 기록 분리

    검증 순서에서 처음 읽는 입력과 같은 입력을 반복한 결과를 따로 기록하도록 바꿨습니다. 캐시 효과를 프리필 처리량이나 장비 차이로 합산하지 않습니다.

  4. 장비·프로필 저장과 다시 열기 추가

    실행 가능한 프로필은 장비와 함께 이 브라우저에 최대 5개까지 저장하고, 가이드 목록에서 다시 열 수 있게 했습니다. 저장한 뒤 공개 설정이 바뀌거나 프로필이 없어지면 실행 전에 다시 확인하도록 안내합니다.

  5. 실행 엔진 설명으로 이어지는 링크 추가

    설정에 표시된 엔진 이름에서 해당 실행 프로그램의 설명으로 이어지도록 했습니다. 엔진이 확인되지 않은 경로에는 임의의 프로그램을 연결하지 않습니다.