opencl: 일반적인 Flash Attention 디코딩 성능 최적화 ([#25366](https://github.com/ggml-org/ll
요약
llama.cpp 프로젝트에서 OpenCL을 활용한 Flash Attention 디코딩 성능 최적화 작업이 진행되었습니다. 다양한 양자화 형식(f16, q8_0, q4_0)에 대한 커널 개선과 Gemma-4 모델을 위한 DK=512 환경 최적화가 포함되었습니다.
핵심 포인트
- OpenCL 기반 Flash Attention 디코딩 커널 최적화 및 다양한 KV 양자화 지원
- Gemma-4 모델의 DK=512 환경에서의 디코딩 충돌 및 메모리 문제 해결
- 대역폭 제한을 고려하여 DK=512 디코딩 시 CPU 활용 로직 최적화
- Adreno 컴파일러의 메모리 부족 문제를 방지하기 위한 컴파일 옵션 조정
opencl: 일반적인 Flash Attention 디코딩 성능 최적화 (#25366)
-
opencl: f16/q8_0/q4_0 KV를 위한 vec Flash Attention 디코딩 커널 (kernels)
-
opencl: 비 FA (non FA) KQ mv 커널 개선
-
opencl: Multi-Query FA를 위한 미세 조정 (tweaks)
-
opencl: FA q1 커널을 위한 일부 미세 조정 (tweaks)
-
opencl: gemma-4를 위한 DK=DV=512 기반 FA
-
opencl: 다양한 수정 사항
-
opencl: 정리 (cleanup)
-
opencl: DK=512 (gemma-4) 환경에서의 FA 디코딩 충돌 수정
DK=512 디코딩 전용 (decode-only) 프로그램은 f32_f16 프리필 (prefill) 커널을 생성하지 않으므로, ensure_fa_variant 내의 컴파일된 체크가 실행되지 않았고 supports_op가 동일한 연산에 대해 일관되지 않은 답변을 제공했습니다. 또한 DK=512 디코딩 시 block_n이 설정되지 않으므로, 디스패치 (dispatch) 시 범위 외 읽기 (out-of-range read)를 방지하기 위해 이를 보호했습니다.
- opencl: CPU에서 DK=512 FA 디코딩 실행
DK=512 디코딩은 대역폭 제한 (bandwidth-bound)을 받으며, 깊이가 깊어질수록 GPU보다 CPU에서 더 빠릅니다. 따라서 supports_op에서 이를 거부하도록 하고, 프리필 (prefill)은 GPU에 유지합니다.
- opencl: 최소 프로그램에서 MQ_GQA=8 FA 커널 컴파일
-D MQ_GQA=8로 컴파일된 전체 프로그램은 DK>=256에서 Adreno 컴파일러의 메모리 부족 (out of memory)을 발생시킵니다. 이 프로그램에서는 vec_mq 커널만 사용되므로, 다른 모든 것을 제외하는 FA_MQ_ONLY로 컴파일합니다. 또한 컴파일 에러 로그에 프로그램 이름을 포함합니다.
- opencl: flash_attn_f32_f16.cl에서 잘못된 토큰 제거
A stray "."가 f32_f16 프로그램 빌드를 방해했습니다.
- opencl: f16-KV FA 디코딩을 더 세밀하게 분할 (FD_KV_PER_SPLIT_F16)
단일 쿼리 (single-query) f16-KV 디코딩 시 기본값인 2048은 GPU를 충분히 활용하지 못합니다. f16 KV의 경우 512를 사용하여 더 많은 분할 (splits)을 확보합니다. 양자화된 (Quantized) KV는 2048을 유지합니다.
Co-authored-by: Li He lih@qti.qualcomm.com
macOS/iOS:
macOS/iOS:
- macOS Apple Silicon (arm64)
- macOS Apple Silicon (arm64, KleidiAI 활성화) 비활성화
- macOS Intel (x64)
- iOS XCFramework
Linux:
- Ubuntu x64 (CPU)
- Ubuntu arm64 (CPU)
- Ubuntu s390x (CPU)
- Ubuntu x64 (Vulkan)
- Ubuntu arm64 (Vulkan)
- Ubuntu x64 (ROCm 7.2)
- Ubuntu x64 (OpenVINO)
- Ubuntu x64 (SYCL FP32)
- Ubuntu x64 (SYCL FP16)
Android:
Windows:
Windows:
- Windows x64 (CPU)
- Windows arm64 (CPU)
- Windows arm64 (OpenCL Adreno)
- Windows x64 (CUDA 12) - CUDA 12.4 DLLs
- Windows x64 (CUDA 13) - CUDA 13.3 DLLs
- Windows x64 (Vulkan)
- Windows x64 (OpenVINO)
- Windows x64 (SYCL)
- Windows x64 (HIP)**
openEuler:
- DISABLED
- openEuler x86 (310p)
- openEuler x86 (910b, ACL Graph)
- openEuler aarch64 (310p)
- openEuler aarch64 (910b, ACL Graph)**
UI:
AI 자동 생성 콘텐츠
본 콘텐츠는 llama.cpp Releases의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기