llama.cpp의 Q8_0 양자화가 SYCL 재정렬 수정으로 인텔 Arc GPU에서 3.1배 속도 향상을 달성했습니다

✍️ OpenClawRadar📅 게시일: April 16, 2026🔗 Source
llama.cpp의 Q8_0 양자화가 SYCL 재정렬 수정으로 인텔 Arc GPU에서 3.1배 속도 향상을 달성했습니다
Ad

llama.cpp의 SYCL 백엔드에 대한 성능 최적화 수정으로 Intel Arc GPU에서 실행되는 Q8_0 양자화 모델의 속도가 크게 향상되었습니다. 이 수정은 Q8_0 성능을 이론적 대역폭의 21%로만 제한하던 메모리 접근 패턴 문제를 해결합니다.

성능 문제와 근본 원인

32GB GDDR6 및 608 GB/s 대역폭을 가진 Intel Arc Pro B70 GPU에서 Q8_0 모델은 4.88 토큰/초로만 실행되는 반면, Q4_K_M은 20.56 토큰/초를 달성했습니다. Q8_0이 Q4_K_M보다 데이터 양이 1.7배밖에 되지 않기 때문에 이 4배의 성능 차이는 예상치 못한 것이었습니다.

VRAM 압력, 드라이버 문제 및 백엔드 문제를 배제한 후, 조사는 병목 현상을 llama.cpp의 SYCL 커널 디스패치 경로로 추적했습니다. SYCL 백엔드에는 GPU 메모리 접근을 효율적으로 하기 위해 양자화 스케일 팩터를 가중치 데이터와 분리하는 "재정렬" 최적화가 포함되어 있습니다. 이 최적화는 Q4_0, Q4_K 및 Q6_K 양자화를 위해 구현되었지만, Q8_0은 재정렬 프레임워크에 추가되지 않았습니다.

Q8_0의 34바이트 블록(2의 거듭제곱이 아님)은 재정렬되지 않은 레이아웃이 GPU 캐시 성능에 특히 비효율적이게 만들었습니다.

Ad

수정 및 결과

해결책은 기존 재정렬 프레임워크를 확장하여 Q8_0을 지원하는 약 200줄의 코드를 포함했습니다. 가장 중요한 버그는 단일 라인 문제였습니다: Q8_0 텐서가 버퍼 초기화 중에 "추가" 구조체를 할당받지 못해 재정렬 플래그가 설정되지 않았습니다.

Qwen3.5-27B(Intel Arc Pro B70)에서의 결과:

  • 수정 전 Q8_0: 4.88 t/s (21% 대역폭)
  • 수정 후 Q8_0: 15.24 t/s (66% 대역폭) - 3.1배 더 빠름
  • Q4_K_M: 20.12 t/s (변화 없음)
  • Q6_K: 13.83 t/s (재정렬 없음)

이 수정으로 Q8_0은 이제 Q6_K보다 성능이 우수하며(15.24 vs 13.83 토큰/초), 더 낮은 비트 양자화보다 높은 품질을 제공합니다.

검증 및 구현

수정을 구현하기 전에, 팀은 Intel의 폐쇄형 IPEX-LLM을 바이너리 패치하여 B70 GPU에서 실행했습니다(해당 PCI 장치 ID는 공식적으로 지원되지 않음). 최적화된 Q8_0 커널은 61% 대역폭을 달성하여 문제가 해결 가능함을 확인했습니다. llama.cpp의 오픈소스 구현은 66% 대역폭을 달성합니다.

이 수정은 llama.cpp 저장소에 풀 리퀘스트로 제출되었습니다.

📖 Read the full source: r/LocalLLaMA

Ad

👀 See Also