노트북 — Dell Inspiron 7501
i7-10750H · 16GB · 2020년
MiniCPM5-2B · 4스레드
지원 기기 · 벤치마크
제품의 본체는 PC입니다. 폰은 「같은 코어가 어디까지 내려가는가」를 보이는 자리입니다 — 서랍 속 폐폰 두 대에 같은 모델을 올리고 같은 서류를 라벨링했습니다. 아래는 전부 우리가 직접 잰 값입니다.
같은 스크립트 · 같은 서류 5건 · 같은 모델(MiniCPM5-2B)로 잰 값입니다. 재지 못한 기기는 「예정」으로 남겼습니다.
i7-10750H · 16GB · 2020년
MiniCPM5-2B · 4스레드
SM-A346N · 6GB · Dimensity 1080
MiniCPM5-2B · 8스레드
SM-N986N · 12GB · Snapdragon 865
MiniCPM5-2B · 빅코어 4스레드 고정 · 충전 안 된 상태의 하한값
체험 인스턴스가 될 기기입니다.
아직 재지 않았습니다.
아직 재지 않았습니다.
중고 구매 예정 — 설치기가 「공식 바이너리가 죽는 PC」를 살리는 장면을 여기서 찍습니다.
서류 5건은 임대차계약서(워드) · 통장내역(엑셀) · 급여대장(엑셀) · 근로계약서(워드) · 원천세신고서(한글)입니다. 라벨 셋(거래처 · 기간 · 서류 종류)을 맞힌 개수를 15점 만점으로 셉니다. 문서 한 건마다 KV 캐시를 새로 엽니다.
| 기기 | 모델 | 스레드 | 건당 초 | 라벨 15점 |
|---|---|---|---|---|
| Dell Inspiron 7501i7-10750H · 16GB · 2020년 노트북 | MiniCPM5-2B | 4 | 18.7 | 14 |
| MiniCPM5-2B | 3 | 20.2 | 14 | |
| Qwen2.5-1.5B | 4 | 13.0 | 10 | |
| Qwen2.5-1.5B | 3 | 15.2 | 10 | |
| Galaxy A34SM-A346N · 6GB · Dimensity 1080 | MiniCPM5-2B | 8 | 89.1 | 12 |
| MiniCPM5-2B | 2 (빅코어 고정) | 132.8 | 12 | |
| Qwen2.5-1.5B | 8 | 69.6 | 10 | |
| Qwen2.5-1.5B | 2 (빅코어 고정) | 91.8 | 10 | |
| Galaxy Note 20 UltraSM-N986N · 12GB · Snapdragon 865 | MiniCPM5-2B | 4 (빅코어 고정) | 81.0 | 13 |
| MiniCPM5-2B | 8 | 425.6 | 12 | |
| Qwen2.5-1.5B | 4 (빅코어 고정) | 61.7 | 10 | |
| Qwen2.5-1.5B | 8 | 362.2 | 10 |
주황 숫자는 스레드를 코어 수(8)에 맞췄다가 시간이 무너진 회차입니다 — 이유는 다음 절에.
두 폰 다 MiniCPM5-2B가 Qwen2.5-1.5B보다 정확했습니다. Qwen이 빠르지만 라벨을 더 틀립니다 — 라벨링에서는 틀린 라벨이 느린 라벨보다 비쌉니다. 그래서 기본 모델은 MiniCPM5-2B입니다(둘 다 Apache-2.0).
Note 20 Ultra는 실측 내내 충전 상태가 아니어서 큰 코어가 최대 클럭의 57%로 묶여 있었습니다. 지금 값은 하한입니다 — 충전기를 꽂으면 오릅니다. 이 노트북의 llama.cpp는 배포판 디버그 빌드라 속도가 보수적으로 나온 값입니다.
같은 폰 · 같은 모델 · 같은 서류. 스레드 수 하나가 다릅니다.
Note 20 Ultra에서 서류 한 건이 빅코어 4스레드에서 81.0초, 코어 수에 맞춘 8스레드에서 425.6초입니다. 5.3배. Qwen도 같습니다(61.7초 → 362.2초, 5.9배). 라벨 정확도는 13/15와 12/15로 거의 같습니다. 즉 같은 폰 · 같은 모델 · 같은 서류인데 설정 하나로 시간이 다섯 배 갈리고 정확도는 그대로입니다.
이유는 작은 코어입니다. 스레드를 코어 수에 맞추면 리틀코어 4개가 매 토큰마다 나머지를 기다리게 만들어 토큰 생성이 무너집니다 — llama-bench 기준 8스레드 0.13 tok/s, 빅코어 4개 고정 9.21 tok/s, 약 70배.
그런데 Galaxy A34는 반대입니다. 빅코어 2개에 고정하면 5.63 tok/s, 코어 8개를 다 쓰면 7.29 tok/s가 나옵니다. 빅·리틀 클럭 격차가 작아 작은 코어도 제 몫을 합니다. Dimensity 1080의 빅코어는 두 개뿐이라 처음 회차에서 2코어에 4스레드를 줬다가 값이 무너져 그 회차를 버렸습니다.
발열은 주장이 아니라 설정과 실측으로 말합니다. 파일 1건 = 세션 1회로 KV 캐시가 쌓이지 않게 하고, 스레드는 코어 수보다 적게, 문서 사이 3초를 쉬고, 프롬프트 배치를 128로 제한합니다. 이 설정으로 A34에서 10분 연속 라벨링을 돌렸습니다.
| 경과 (초) | 배터리 온도 (°C) | 완료 건수 | 그 건의 초 |
|---|---|---|---|
| 93 | 31.0 | 1 | 91.8 |
| 212 | 30.9 | 2 | 114.9 |
| 330 | 30.9 | 3 | 114.4 |
| 457 | 30.9 | 4 | 122.9 |
| 570 | 30.8 | 5 | 109.9 |
| 666 | 30.8 | 6 | 91.7 |
10분 동안 온도가 오르지 않았습니다 — 31.0 → 30.8°C. 건당 시간도 첫 건 91.8초, 마지막 건 91.7초로 평탄합니다(중간 변동은 서류 길이 차이입니다). 못 잰 것도 적어 둡니다: CPU 클럭 하락은 이 회차에서 직접 재지 못했고(도구 결함, 다음 회차 몫), 휴지 없는 대조는 실측 중이며, 더 빠른 8스레드 조건은 재지 않았습니다.
실측으로 확인한 것과 조사로 잡은 것을 나눠 적습니다.
Galaxy A34 · 6GB
같은 서류 5건을 89.1초 / 건, 라벨 12 / 15로 라벨링했습니다. 10분 연속 구동에서 온도가 오르지 않았습니다.
4GB 이하는 안드로이드 메모리 킬러가 프로세스를 죽입니다. 이 기준선은 기기를 늘려 가며 실측으로 확인합니다.
폰은 상시 워커가 아닙니다. 온디바이스 생성은 원격 호출보다 에너지를 훨씬 많이 쓰고 배터리에 무리가 갑니다. 전원에 꽂힌 기기 — PC — 가 우리 자리이고, 폰은 같은 코어가 거기까지 내려간다는 증거입니다.
Termux(F-Droid 판 — 플레이스토어 판은 낡아서 안 됩니다)에서 합니다. 모델 파일은 약 1.7GB라 와이파이에서 받습니다.
# 한 번만 pkg update -y && pkg install -y llama-cpp curl python termux-api termux-wake-lock # 화면이 꺼져도 안 멈추게. 충전기를 꽂는다 # 빅코어가 몇 개, 몇 번인지 본다 (최대 클럭이 가장 높은 묶음이 빅코어) for c in /sys/devices/system/cpu/cpu[0-9]*; do echo "$(basename $c) $(($(cat $c/cpufreq/cpuinfo_max_freq 2>/dev/null || echo 0)/1000))MHz"; done # 모델 서버 — 빅코어 4개(cpu4~7)에 4스레드를 고정하는 예. A34처럼 빅코어가 2개면 "6,7" 에 2스레드 taskset -c 4-7 llama-server -m MiniCPM5-2B-Q4_K_M.gguf --host 127.0.0.1 --port 8097 \ -c 2048 -ub 128 -t 4 --no-warmup
스레드 수를 코어 개수보다 크게 주지 마세요 — 2코어에 4스레드를 몰아넣으면 생성이 무너집니다. 설치기는 이 판단을 자동으로 합니다. 실측 스크립트(같은 서류 5건 · 모델 두 개 · 온도 곡선)와 결과 원본은 공개 저장소 github.com/kingcheee/nabi-core의 bench 폴더에 있습니다.