
DSpark 추측 디코딩이 소비자용 GPU에서 로컬 언어 모델의 생성 속도를 얼마나 높이는지 비교하는 벤치마크 프로젝트가 공개됐다. AMD Radeon RX 7900 GRE에서 Qwen3-8B를 측정한 결과, 가장 빠른 설정은 ROCm에서 초당 133토큰으로 일반 디코딩보다 2.25배 빨랐다.
프로젝트는 dspark-local-bench 저장소에서 실행할 수 있다. 사용자는 자신의 GPU에서 같은 방식으로 측정한 결과를 추가해 다른 카드와 비교할 수 있다.
측정 결과와 조건
RX 7900 GRE 16GB에서 Qwen3-8B Q8_0 모델을 설정별로 32개 프롬프트에 실행했다. Vulkan과 ROCm의 결과는 다음과 같다.
| 방식 | Vulkan | ROCm |
|---|---|---|
| 추측 디코딩 없음 | 62 tok/s | 59 tok/s |
| DSpark 최적 설정 | 115 tok/s · 1.86배 · 초안 3토큰 | 133 tok/s · 2.25배 · 초안 7토큰 |
| DFlash | 95 tok/s · 1.54배 | 110 tok/s · 1.86배 |
| 소형 초안 모델(Qwen3-0.6B) | 84 tok/s · 1.36배 | 76 tok/s · 1.29배 |
이 GPU에서는 DSpark가 두 백엔드 모두에서 가장 빨랐다. 최적 초안 길이는 백엔드에 따라 달랐다. Vulkan은 3토큰이 가장 빨랐고 7토큰에서는 1.63배로 떨어졌다. ROCm은 7토큰에서 가장 빨랐으며 3토큰 설정은 1.85배였다. 프로젝트는 ROCm이 초안 토큰 묶음을 더 적은 비용으로 확인하는 점을 가능한 이유로 들었다. ROCm은 프롬프트 처리 속도가 24% 빨랐지만 일반 디코딩은 약간 느렸다. 고정된 초안 길이를 쓰면 한쪽 백엔드에서 13~18%의 성능을 포기하게 되며, 초안 길이를 조절하는 기능은 아직 이 프로젝트에서 지원되지 않는다.
신뢰도 기준값은 Vulkan에서 --spec-draft-p-min 0.3을 설정했을 때 속도를 약 3% 높였지만, 0.5 이상에서는 오히려 느려졌다. 0.9에서는 일반 디코딩 대비 1.28배였다. 초안 모델은 Q8_0을 유지하는 편이 나았다. BF16 초안 모델은 4토큰 설정에서 1.55배로, Q8_0의 1.72배보다 느렸고 정확도도 높지 않았다. 초안 모델을 불러온 상태에서 프롬프트 처리 속도는 두 백엔드 모두 약 8~9% 낮아졌다.
작업 종류별 속도 향상도 달랐다. 코딩은 Vulkan에서 2.3배, ROCm에서 3.2배로 가장 컸고, 질의응답은 1.5~1.6배로 가장 작았다. 프로젝트는 GPU 한 대, 모델 한 개, 탐욕 디코딩을 기준으로 측정했으며, 카테고리별 프롬프트는 8개였다. 약 3% 미만의 차이는 측정 잡음으로 봐야 한다. 21개 설정을 비교한 빠른 측정은 Vulkan에서만 진행했고, ROCm은 초안 길이 3·5·7을 측정했다. 다른 GPU에서는 최적 설정이 달라질 수 있다.
출력 품질은 같지만 문장이 완전히 동일하지 않을 수 있다. 16개 프롬프트를 비교했을 때 일반 디코딩은 16개 답변 모두 자체 실행 결과와 일치했다. DSpark는 Vulkan에서 6개, ROCm에서 5개 답변만 일반 디코딩 결과와 동일했다. 나머지는 “TV series”와 “TV show”처럼 의미와 유창성이 비슷한 표현에서 갈라졌다. 고전적인 초안 모델도 16개 중 5개 답변에서 달라졌다. 프로젝트는 llama.cpp가 초안 토큰을 묶음 단위로 확인하면서 한 토큰씩 처리할 때와 반올림 결과가 달라지고, 경계에 가까운 단어가 바뀌기 때문이라고 설명한다. 비트 단위로 동일한 출력을 재현해야 하는 경우에만 이 차이가 중요하다고 덧붙였다.
세부 결과는 Vulkan 측정표, ROCm 측정표, Vulkan 빠른 측정표에서 확인할 수 있다.
직접 실행하기
Python 3.10 이상, git, 약 15GB의 디스크 공간이 필요하다. 설정 스크립트가 사전 빌드된 llama.cpp를 내려받고 체크섬을 확인한 뒤, 프로젝트 전용 .venv에 고정된 Python 패키지를 설치한다. 기본 설정에는 VRAM 12GB 이상인 GPU가 필요하며, 8GB 카드에서는 configs/qwen3-8b-q4.json을 사용한다.
| 시스템 | GPU | 설정 명령 |
|---|---|---|
| Windows (PowerShell 7) | AMD·Intel·NVIDIA | \.\scripts\setup_windows.ps1 -Backend vulkan |
| Windows (PowerShell 7) | NVIDIA | \.\scripts\setup_windows.ps1 -Backend cuda |
| Windows (PowerShell 7) | AMD Radeon (테스트: RX 7900 GRE) | \.\scripts\setup_windows.ps1 -Backend rocm (AMD 라이브러리 약 3GB 추가) |
| Linux | 모든 GPU | ./scripts/setup_unix.sh vulkan |
| Linux | NVIDIA·AMD | ./scripts/setup_unix.sh cuda 또는 rocm (ROCm은 시스템에 설치해야 함) |
| macOS (Apple Silicon) | 내장 GPU | ./scripts/setup_unix.sh metal |
저장소를 내려받고 GPU에 맞는 설정 명령을 실행한 뒤 환경을 활성화하고 모델을 가져온다.
git clone https://github.com/juraj-jumic/dspark-local-bench
cd dspark-local-bench
# run your setup command from the table, then activate the environment:
.venv\Scripts\Activate.ps1 # Windows
. .venv/bin/activate # Linux / macOS
python scripts/fetch_models.py configs/qwen3-8b.json
Linux 사전 빌드 바이너리는 Ubuntu 24.04 이상, Debian 13 이상, Fedora 40 이상 또는 비슷한 수준의 시스템을 요구한다. Ubuntu 22.04와 Debian 12에서는 GLIBC 오류로 실행되지 않을 수 있다. 이 경우 llama.cpp를 직접 빌드하고 --server path/to/llama-server를 지정한다. 바이너리에는 OpenMP가 필요하며, Vulkan을 쓰려면 Vulkan 로더와 GPU 드라이버도 필요하다. Ubuntu에서는 sudo apt install libgomp1 libvulkan1 mesa-vulkan-drivers를 설치할 수 있다. Python 가상 환경을 위해 Ubuntu·Debian에서는 sudo apt install python3-venv도 필요하다. WSL에서는 GPU가 변환 계층을 거쳐 접근되므로 측정하지 말라고 프로젝트는 안내한다.
실행 전에는 llama.cpp가 표시한 GPU 목록에서 사용할 장치를 확인해야 한다. 내장 GPU가 별도로 표시되면 --device로 그래픽 카드를 지정하지 않을 경우 모델이 두 GPU에 나뉘어 올라갈 수 있다. 같은 카드도 백엔드에 따라 장치 번호가 달라질 수 있다. 노트북은 전원에 연결하고, Ollama·LM Studio·게임·영상 재생 등 GPU를 사용하는 작업을 종료한 뒤 측정한다.
먼저 짧은 테스트를 한 다음 전체 측정 행렬을 실행한다. 전체 측정은 약 2시간이 걸리며, 중단 후 다시 실행하면 완료된 설정은 건너뛴다.
python scripts/run_matrix.py --config configs/qwen3-8b.json --backend vulkan --machine my-gpu --server-args "--device Vulkan0" --only baseline,dspark-n7-p0 --limit 1
python scripts/run_matrix.py --config configs/qwen3-8b.json --backend vulkan --machine my-gpu --server-args "--device Vulkan0"
python scripts/summarize.py --write
python scripts/plot.py results/my-gpu/qwen3-8b__vulkan.json -o my-chart.svg
전체 측정은 33개 설정마다 약 13,000토큰을 생성한다. 초당 60토큰을 처리하는 GPU에서 약 2시간이 걸린다. 카테고리마다 프롬프트 2개와 답변 256토큰을 사용하는 빠른 측정은 약 10분이면 명확히 느린 설정을 걸러낼 수 있다. 먼저 빠르게 비교한 뒤 상위 설정만 전체 측정하는 방법도 안내한다.
python scripts/run_matrix.py --config configs/qwen3-8b.json --backend vulkan --machine my-gpu --server-args "--device Vulkan0" --name qwen3-8b-screen --limit 2 --osl 256 --only "baseline,ngram-mod,draft-simple-*,dflash-*,dspark-n*-p0,dspark-bf16-*"
이 프로젝트는 같은 모델과 프롬프트, GPU에서 한 번에 요청 하나를 처리해 방식을 비교한다. 프롬프트는 SPEED-Bench의 코딩·수학·글쓰기·질의응답 과제에서 가져왔다. 탐욕 디코딩을 사용했고, 초안 모델이 학습되지 않은 Qwen3의 사고 모드는 껐다.
| 방식 | 토큰 초안 생성 방식 | 실행 ID |
|---|---|---|
| 추측 디코딩 없음 | 초안을 생성하지 않는 기준선 | baseline |
| n-gram | 앞서 나온 텍스트 패턴 반복 | ngram-mod |
| 소형 초안 모델 | Qwen3-0.6B | draft-simple-n3, -n5 |
| DFlash | 블록 확산 방식 초안 모델 | dflash-n4, -n7 |
| DSpark | DFlash와 Markov 헤드 및 신뢰도 헤드 | dspark-n{2,3,4,5,7}-p{0,0.3,0.5,0.7,0.9} |
DSpark 실행 ID에서 n은 단계마다 초안을 만드는 토큰 수, p는 신뢰도 기준값이며 0은 기준값을 끈 상태다. 각 설정은 configs 디렉터리의 JSON 항목으로 관리하므로 새 모델이나 설정 비교를 추가할 때 코드를 바꿀 필요가 없다고 프로젝트는 설명한다.
결과 기여와 지원 현황
다른 GPU의 결과를 보태려면 짧은 --machine 이름으로 설정을 실행하고, python scripts/validate_results.py로 파일을 확인한 뒤 results/<machine>/만 커밋해 풀 리퀘스트를 연다. 검증 스크립트는 전체 경로 같은 개인 정보를 확인한다. 원시 요청 데이터와 서버 로그가 담긴 runs/는 저장소에 올리지 않는다. GPU 전력 제한, 노트북 여부, 다른 작업의 부하 등 특이사항도 함께 적도록 안내한다. NVIDIA와 Apple Silicon 결과를 특히 환영하며, 기여 안내에는 풀 리퀘스트 대신 이슈를 제출하는 방법도 있다.
프로젝트가 정리한 생태계 현황에 따르면 llama.cpp에는 DSpark가 병합됐으며, 신뢰도 헤드는 고정 기준값 --spec-draft-p-min으로만 제공된다. 적응형 초안 길이는 MTP 관련 미해결 풀 리퀘스트에만 존재한다. Ollama는 Modelfile의 DRAFT를 통해 DSpark 초안 모델을 실행한다. DeepSeek는 Qwen3-4B·8B·14B와 Gemma-4-12B용 초안 모델을 공개했고, 커뮤니티에서도 약 100개가 추가로 만들어졌다. 자세한 현황은 프로젝트 문서에서 확인할 수 있다.
코드는 MIT 라이선스다. 모델은 각각의 라이선스를 따르며 Qwen3는 Apache-2.0이다. SPEED-Bench 프롬프트는 NVIDIA 평가 데이터셋 라이선스를 따르고, 저장소는 프롬프트를 재배포하지 않고 집계된 측정값만 공개한다. 이 프로젝트는 DeepSeek, ggml-org, NVIDIA와 제휴하지 않은 독립 프로젝트다. 문의와 결과는 이슈 페이지로, 보안 문제는 보안 안내에 적힌 비공개 신고 경로로 보낸다.
댓글 (0)
로그인하면 이 기사에 내 생각을 남길 수 있어요