7900XTX에서 Luce DFlash + PFlash 사용: llama.cpp HIP 대비 Qwen3.6-27B의 디코딩 2.24배 및
요약
AMD Radeon RX 7900 XTX 환경에서 Luce DFlash와 PFlash를 사용하여 Qwen3.6-27B 모델을 테스트한 결과, 기존 llama.cpp HIP 대비 약 2.24배의 디코딩 속도 향상을 확인했습니다. 하드웨어 대역폭 특성에 따라 최적의 Budget 설정이 달라지며, 짧은 생성 작업에서는 표준 체인 추측 방식이 더 효율적일 수 있음을 보여줍니다.
핵심 포인트
- RX 7900 XTX 환경에서 Luce DFlash 사용 시 llama.cpp HIP 대비 2.24배 빠른 62.75 tok/s 달성
- 7900 XTX의 높은 GDDR6 대역폭을 고려할 때 Budget=8 설정이 최적의 성능을 제공
- Strix Halo(LPDDR5X)와 7900 XTX(GDDR6)는 하드웨어 특성에 따라 최적의 Budget 값이 다름
- 128 토큰 정도의 짧은 생성 시에는 DDTree 미사용 표준 체인 추측이 오버헤드가 적어 더 빠를 수 있음
제 XTX에서 약간 테스트해 보았으며, 도움이 되기를 바라며 공유합니다. Lucebox에게 감사드립니다!
Lucebox DFlash + PFlash PR #119 재현 보고서 (RX 7900 XTX)
하드웨어 환경
| 구성 요소 | 사양 |
|---|---|
| GPU | AMD Radeon RX 7900 XTX (Navi 31, gfx1100) |
| ... |
벤치마크 결과
모델: Qwen3.6-27B Q4_K_M (15.65 GiB) + Lucebox Q8_0 DFlash drafter (1.84 GiB) 테스트: 10-prompt HumanEval 스타일, --n-gen 128, --fast-rollback 기준점(Baseline): llama.cpp HIP AR (tg128) — 28.07 tok/s
| 설정 | 평균 tok/s | 평균 AL | 속도 향상 (vs llama.cpp HIP) |
|---|---|---|---|
| llama.cpp HIP AR | 28.07 | — | 1.00x |
| ... |
주요 발견 사항
- 7900 XTX에서는 Budget=8이 최적임 (62.75 tok/s), 이는 블로그 내용과 일치합니다. GDDR6의 높은 대역폭(Bandwidth)은 타일 낭비(Tile waste)를 피하기 위해 더 작은 트리(Tree)를 선호하는 반면, Strix Halo의 LPDDR5X는 실행 오버헤드(Launch overhead)를 상쇄하기 위해 budget=22가 필요합니다.
- 2.24배 속도 향상은 Strix Halo에서의 2.23배와 일치합니다. 7900 XTX의 절대 속도인 62.75 tok/s는 약 9배의 대역폭 이점 덕분에 26.85 tok/s를 훨씬 상회합니다.
- 표준 체인 추측(Standard chain speculation, DDTree 미사용)이 약간 더 빠름 (64.23 tok/s), 이는 짧은 생성(128 tokens)의 경우 더 단순한 전략이 더 낮은 오버헤드(Overhead)를 가짐을 보여줍니다.
전체 재현 단계
1. 리포지토리(Repo) 클론 및 PR #119 체크아웃
git clone https://github.com/Luce-Org/lucebox-hub.git
cd lucebox-hub
git fetch origin pull/119/head:pr119 && git checkout pr119
git submodule update --init --recursive
2. rocWMMA 헤더 설치 (선택 사항이지만 권장됨, Phase 2 FlashPrefill 활성화)
rocwmma 패키지를 설치할 sudo 권한이 없는 경우, GitHub에서 헤더를 직접 가져오십시오:
git clone --depth 1 https://github.com/ROCm/rocWMMA.git /tmp/rocwmma
mkdir -p /tmp/rocm_include/include
cp -r /tmp/rocwmma/library/include/rocwmma /tmp/rocm_include/include/rocwmma
3. 빌드 (gfx1100 / 7900 XTX)
cd dflash
cmake -B build -S . \
-DCMAKE_BUILD_TYPE=Release \
-DDFLASH27B_GPU_BACKEND=hip \
-DDFLASH27B_HIP_ARCHITECTURES=gfx1100 \
-DDFLASH27B_HIP_SM80_EQUIV=ON \
-DROCM_PATH=/tmp/rocm_include # 2단계에서 얻은 경로; rocWMMA가 시스템에 설치되어 있다면 생략 가능
cmake --build build --target test_dflash -j$(nproc)
gfx1100을 사용자의 GPU 아키텍처(예: gfx1151 (Strix Halo), gfx1030 (Navi 21) 등)로 교체하세요.
rocWMMA를 건너뛰려면-DDFLASH27B_HIP_SM80_EQUIV=OFF로 설정하여 q8 폴백(fallback)을 사용하십시오.
4. 모델 다운로드 (Download models)
mkdir -p models/draft
wget -c -O models/Qwen3.6-27B-Q4_K_M.gguf \
"https://huggingface.co/unsloth/Qwen3.6-27B-GGUF/resolve/main/Qwen3.6-27B-Q4_K_M.gguf"
wget -c -O models/draft/dflash-draft-3.6-q8_0.gguf \
"https://huggingface.co/Lucebox/Qwen3.6-27B-DFlash-GGUF/resolve/main/dflash-draft-3.6-q8_0.gguf"
5. Python 의존성 설치 (Install Python dependencies) (벤치마크 스크립트용)
pip3 install --break-system-packages transformers torch
6. 벤치마크 실행 (Run the benchmark)
# DFlash DDTree budget=8 (gfx1100에 권장됨)
cd dflash
LD_LIBRARY_PATH=/opt/rocm/lib:$LD_LIBRARY_PATH \
DFLASH_BIN=$PWD/build/test_dflash \
DFLASH_TARGET=$PWD/models/Qwen3.6-27B-Q4_K_M.gguf \
DFLASH_DRAFT=$PWD/models/draft/dflash-draft-3.6-q8_0.gguf \
DFLASH27B_DRAFT_SWA=2048 \
DFLASH27B_PREFILL_UBATCH=512 \
python3 scripts/bench_he.py --n-gen 128 --ddtree-budget 8
환경 변수 (Environment variables)
| 변수 (Variable) | 의미 (Meaning) |
|---|---|
DFLASH_BIN | test_dflash 바이너리 경로 |
| ... |
bench_he.py 공통 인자 (bench_he.py common arguments)
| 인자 (Argument) | 설명 (Description) |
|---|---|
--n-gen N | 프롬프트당 생성할 토큰 수 (기본값 128) |
| ... |
7. 비교를 위한 llama.cpp 베이스라인 빌드 및 실행 (Build and run llama.cpp baseline for comparison)
dflash/deps/llama.cpp에서 개별 빌드
BUILD_DIR=/tmp/llama-bench-build
cmake -B $BUILD_DIR -S dflash/deps/llama.cpp \
-DCMAKE_BUILD_TYPE=Release \
-DGGML_HIP=ON \
-DLLAMA_BUILD_TOOLS=ON
cmake --build $BUILD_DIR --target llama-bench -j$(nproc)
# 베이스라인 실행
LD_LIBRARY_PATH=/opt/rocm/lib:$LD_LIBRARY_PATH \
$BUILD_DIR/bin/llama-bench \
-m models/Qwen3.6-27B-Q4_K_M.gguf \
-n 128 -p 128 -o md
블로그 데이터와의 비교
| Metric | Strix Halo (gfx1151) 블로그 | 7900 XTX (gfx1100) 이번 실행 |
|---|---|---|
| llama.cpp HIP AR | 12.02 tok/s | 28.07 tok/s |
| ... | ||
| 블로그: https://www.lucebox.com/blog/amd |
참고 사항
- BSA 스코어링 커널은 HIP에서 구현되지 않았습니다. 대신 ggml flash_attn_ext로 폴백(fallback)되어 사용됩니다 (CUDA BSA보다 약 3.4배 느림). 이것이 남아있는 PFlash 최적화 여유분입니다.
- PR #159 ubatch=512는
DFLASH27B_PREFILL_UBATCH=512환경 변수를 통해 적용되었습니다 (PR #119 위에 수동으로 레이어링됨). - VRAM 제한: 7900 XTX의 24 GiB는 전체 16K 컨텍스트 PFlash 테스트를 수행하기에 부족합니다. 16K KV 캐시 + 모델 가중치(약 16 GiB + 약 6 GiB KV 캐시)가 24 GiB를 초과합니다. 대규모 컨텍스트와 대형 모델 워크로드를 위해서는 Strix Halo의 128 GiB 통합 메모리가 필요합니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Reddit AI Engineering의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기