깃(Git)선제압
한국어

로그인

글 읽기는 로그인 없이 됩니다. 커뮤니티에 글 · 댓글을 쓰거나 추천 · 신고를 하려면 로그인해 주세요.

로그인하면 아래 안내에 동의한 것으로 봅니다. 이용 안내 · 개인정보 안내

로그인하지 않고 둘러보기

내 컴퓨터에서 같은 조건으로 재는 법

속도 숫자는 조건이 조금만 달라도 크게 달라집니다. 이 안내는 llama.cpp, MLX, Ollama 에서 비슷한 조건으로 재고 어떤 값을 적으면 되는지 정리한 것입니다. 모든 환경에서 같은 결과를 보장하지는 않으며, 숫자는 예시입니다.

명령 옵션은 버전에 따라 다를 수 있습니다. 동작하지 않으면 각 프로그램의 --help 로 현재 버전의 옵션을 확인해 주세요. 명령 본문은 번역하지 않고 그대로 쓰며, MODEL 로 적힌 부분은 본인 모델 파일이나 이름으로 바꿔 주세요.

먼저 적어 둘 값

속도 숫자와 함께 아래 값을 같이 적어 두면, 제출할 때 그대로 옮겨 적을 수 있고 다른 기기와 비교하기도 쉽습니다.

조건을 고정하는 요령

  1. 문맥 길이를 정해 두세요문맥 길이를 8192 처럼 한 값으로 정하고 적어 두세요. 문맥이 길어질수록 속도가 떨어지는 경우가 많아, 다른 값끼리는 비교하기 어렵습니다.
  2. 동시 요청은 1로 두세요한 번에 하나의 요청만 보내고, 다른 프로그램이 모델을 쓰고 있지 않은지 확인하세요. 동시 요청이 늘면 요청당 속도와 전체 합계가 다르게 나옵니다.
  3. 양자화를 똑같이 맞추세요다른 기기와 비교하려면 같은 모델의 같은 양자화여야 합니다. 이름이 비슷해도 파일을 만든 곳에 따라 구성이 다를 수 있으니 받은 곳도 적어 주세요.
  4. 전원 상태를 맞추세요노트북은 충전기를 연결하고, 저전력 모드나 배터리 절약 설정은 끄세요. 연결 여부를 적어 두면 다른 사람이 해석하기 좋습니다.
  5. 열이 안정된 뒤에 재세요처음 한두 번은 건너뛰고, 여러 번 반복해서 값이 안정된 뒤의 결과를 쓰세요. 반복 측정 사이에 쉬는 시간이 너무 길거나 너무 짧지 않게 일정하게 두세요.
  6. 같은 프롬프트로 여러 번프롬프트와 생성 길이를 고정하고 3~5번 반복해서 중앙값을 쓰는 것을 권합니다. 한 번 잰 값은 우연의 영향을 크게 받습니다.
  7. 다른 작업은 끄세요브라우저 탭, 영상 재생, 다른 모델 실행처럼 GPU나 메모리를 쓰는 작업은 닫고 재세요. 메모리가 모자라 디스크로 넘치면 속도가 크게 떨어집니다.

llama.cpp (llama-bench)

llama.cpp 에 들어 있는 llama-bench 는 프롬프트 처리와 생성 속도를 따로 여러 번 재서 평균을 보여 줍니다. 가장 먼저 시도하기 좋은 방법입니다.

-p 는 읽을 프롬프트 토큰 수, -n 은 생성할 토큰 수, -r 은 반복 횟수, -ngl 은 GPU 에 올릴 층 수입니다. 결과 표의 pp512 행이 프롬프트 처리 속도, tg128 행이 생성 속도이며 단위는 t/s(=tok/s)입니다.

명령 예시 · llama.cpp
llama-bench -m ./models/MODEL.gguf -p 512 -n 128 -r 5 -ngl 99

기록할 값 tg128 의 t/s → 생성 속도, pp512 의 t/s → 프롬프트 처리 속도. 표시된 ± 값은 반복 사이의 흩어짐입니다. 생성한 토큰 수에는 -n 값(128)을 적습니다.

기본 값은 문맥이 거의 비어 있는 상태의 속도입니다. 긴 문맥에서의 속도를 보려면 -d 옵션으로 이미 채워진 문맥 깊이를 줄 수 있지만, 이 옵션은 버전에 따라 다를 수 있으므로 --help 로 확인해 주세요. 이때 문맥 길이에는 -d 값을 적습니다.

실제 서버로 재고 싶을 때의 방법입니다. 서버를 문맥 8192, 동시 슬롯 1로 띄운 뒤 프롬프트 캐시를 끄고 한 번 요청합니다. 응답의 timings 항목에서 값을 읽습니다.

명령 예시 · llama.cpp
llama-server -m ./models/MODEL.gguf -c 8192 -ngl 99 --parallel 1

curl http://127.0.0.1:8080/completion -d '{"prompt":"Explain how a transformer language model works.","n_predict":256,"temperature":0,"cache_prompt":false}' | jq '.timings'

기록할 값 timings 의 predicted_per_second → 생성 속도, prompt_per_second → 프롬프트 처리 속도, predicted_n → 생성한 토큰 수. 문맥 길이에는 -c 값, 동시 요청에는 1을 적습니다.

MLX (mlx_lm)

Apple 실리콘 Mac 용 mlx-lm 패키지입니다. 생성 명령이 끝나면 프롬프트와 생성 속도, 최대 메모리를 한 번에 출력해 줍니다.

--max-tokens 로 생성 길이를 고정하고 --temp 0 으로 무작위성을 줄입니다. 끝에 출력되는 'Prompt: … tokens-per-sec' 와 'Generation: … tokens-per-sec' 줄을 읽습니다.

명령 예시 · MLX
pip install -U mlx-lm

python -m mlx_lm.generate --model mlx-community/MODEL --prompt "Explain how a transformer language model works." --max-tokens 256 --temp 0

기록할 값 Generation 줄의 tokens-per-sec → 생성 속도, Prompt 줄의 tokens-per-sec → 프롬프트 처리 속도, Generation 줄의 tokens 앞 숫자 → 생성한 토큰 수, Peak memory → 최대 메모리 사용(GB). 첫 실행은 모델을 불러오느라 느릴 수 있어 두 번째부터 쓰세요.

최신 mlx-lm 에는 mlx_lm.benchmark 가 있어 프롬프트 길이(-p)와 생성 길이(-g)를 정하고 여러 번(-n) 재 줍니다. 예열을 한 뒤 시행마다의 값과 'Averages' 줄을 출력합니다. 이전 버전에는 없을 수 있으니 설치된 버전에서 되는지 확인해 주세요.

명령 예시 · MLX
python -m mlx_lm.benchmark --model mlx-community/MODEL -p 512 -g 128 -n 5

기록할 값 Averages 줄의 prompt_tps → 프롬프트 처리 속도, generation_tps → 생성 속도, peak_memory → 최대 메모리 사용. 생성한 토큰 수에는 -g 값을 적고, 사용한 -p 값은 명령 입력란에 명령과 함께 남겨 주세요. 출력 형식은 버전에 따라 다를 수 있습니다.

Ollama

Ollama 는 --verbose 옵션을 주면 답변 뒤에 속도 통계를 보여 주고, API 응답에는 토큰 수와 걸린 시간이 담겨 있습니다.

--verbose 로 한 번 실행하면 끝에 'prompt eval rate' 와 'eval rate' 가 tokens/s 로 나옵니다. 간단하지만 문맥 길이와 생성 길이를 고정하기 어려워 대략적인 확인용입니다.

명령 예시 · Ollama
ollama run MODEL:TAG --verbose "Explain how a transformer language model works."

기록할 값 eval rate → 생성 속도, prompt eval rate → 프롬프트 처리 속도, eval count → 생성한 토큰 수. 생각 과정(thinking)이 켜진 모델은 그 토큰도 포함되는지 확인해 주세요.

API 로 문맥 길이(num_ctx), 생성 길이(num_predict), 무작위성(temperature)을 고정해 한 번 요청합니다. 응답의 eval_count 와 eval_duration(나노초)으로 생성 속도를 직접 계산합니다. jq 가 필요합니다.

명령 예시 · Ollama
OLLAMA_NUM_PARALLEL=1 ollama serve

curl -s http://localhost:11434/api/generate -d '{"model":"MODEL:TAG","prompt":"Explain how a transformer language model works.","stream":false,"options":{"num_ctx":8192,"num_predict":256,"temperature":0}}' | jq '{gen_tps: (.eval_count / .eval_duration * 1e9), prompt_tps: (.prompt_eval_count / .prompt_eval_duration * 1e9), eval_count, prompt_eval_count}'

기록할 값 출력된 gen_tps → 생성 속도, prompt_tps → 프롬프트 처리 속도, eval_count → 생성한 토큰 수, num_ctx → 문맥 길이. prompt_eval_count 가 아주 작게 나오면 이전 요청의 캐시가 쓰인 것이므로 프롬프트 처리 속도는 믿을 수 없습니다.

동시 요청을 1로 맞추려면 서버를 띄울 때 OLLAMA_NUM_PARALLEL=1 환경 변수를 주고, 같은 시간에 다른 요청이 들어가지 않게 하세요. 기본값은 버전과 환경에 따라 다를 수 있습니다.

흔한 실수

  1. 생각 토큰을 포함할지 정하지 않았다추론(생각) 과정을 먼저 출력하는 모델은 그 토큰도 생성 토큰에 들어갈 수 있습니다. 속도 자체는 비슷해도 '답까지 걸린 시간'은 크게 달라지므로, 포함했는지 명령 입력란에 적어 주세요.
  2. 프롬프트 캐시가 켜져 있었다같은 프롬프트를 반복하면 엔진이 앞부분을 다시 읽지 않고 저장해 둔 것을 씁니다. 이러면 프롬프트 처리 속도가 비정상적으로 빠르게 나옵니다. 캐시를 끄거나 매번 다른 프롬프트를 쓰세요.
  3. 첫 요청까지 평균에 넣었다첫 요청은 모델을 메모리에 올리거나 GPU 를 깨우느라 느립니다. 한 번은 미리 돌려 보고(워밍업), 그다음부터의 값을 쓰세요.
  4. 토큰 수를 글자 수로 착각했다토큰은 글자나 단어와 다릅니다. 같은 문장도 모델마다 토큰 수가 다르므로, 속도는 직접 센 글자 수가 아니라 엔진이 알려 주는 토큰 수로 계산된 값을 쓰세요.
  5. 서로 다른 양자화·문맥으로 비교했다Q4 와 Q8, 문맥 4096 과 32768 처럼 조건이 다른 값은 같은 줄에 놓고 비교할 수 없습니다. 비교하려면 한 가지만 바꾸고 나머지는 같게 두세요.
  6. 동시 요청 수의 의미를 섞었다동시 요청을 2 이상으로 쟀다면, 적은 속도가 요청 하나당 속도인지 전체 합계인지 반드시 명령 입력란에 적어 주세요. 구분이 없으면 비교할 수 없습니다.
  7. 열 때문에 느려진 값을 대표값으로 썼다오래 돌리면 발열로 속도가 내려가는 기기가 있습니다. 대표값이 목적이라면 반복 측정의 중앙값을 쓰고, 속도가 계속 내려가는 모습이 보이면 그 사실도 함께 적어 주세요.

다 재셨나요?

결과 화면을 캡처하고 위에서 적어 둔 값과 함께 제출해 주세요. 검수 후 '사용자 제출 · 증거 확인됨' 등급으로 공개합니다.

측정값 제출하러 가기