hexagon: flash attention 재작업 (최적화, 정확도 개선 등) ([#25085](https://github.com/ggml-o
요약
llama.cpp 프로젝트의 Hexagon 아키텍처용 Flash Attention 구현을 최적화하고 정확도를 개선한 업데이트입니다. 양자화 작업 통합, 메모리 DMA 디스패치 정리, 커널 리팩토링 등을 통해 성능을 높였습니다.
핵심 포인트
- Hexagon 아키텍처 기반 Flash Attention 최적화 및 정확도 개선
- 양자화(quant) 작업을 메인 행렬 곱셈 스레드로 통합하여 효율성 증대
- DMA 캐싱 및 마스크 처리 최적화를 통한 메모리 접근 성능 향상
- FP32 누산기 사용 및 수학 함수 교체를 통한 수치적 안정성 확보
hexagon: flash attention 재작업 (최적화, 정확도 개선 등) (#25085)
-
hex-mm: mm 양자화 (quant) 작업을 메인 행렬 곱셈 (matmul) 스레드로 통합
-
hex-mm: 사소한 포맷팅 수정
-
hex-mm: dma 디스패치(dispatch) 내 is_quant 체크 정리
-
hex-mm: dst-spad 정렬(alignment) 수정
-
hex-mm: hvx-mm-kernels 헤더 내 fp 커널 이동
-
hex-mm: ADD와 융합 (fuse)
-
hex-fa: ukernel을 별도 헤더로 분리하고 나머지를 통합
-
hex-fa: kernel-params 계산을 호스트(host)로 이동
-
hex-fa: 일관성을 위해 vtcm 할당 (alloc) 리팩토링
-
hex-fa: FA_SELECT 지원 추가
-
hex-fa: 모든 함수를 포함하도록 트레이싱 (tracing) 계측 업데이트
-
hex-fa: t/g 회귀를 복구하기 위해 hvx 폴백 (fallback) 임계값 업데이트
-
hex-fa: 트레이싱 (tracing) 계측 업데이트
-
hex-fa: 추가 이벤트를 통한 트레이싱 (tracing) 개선
-
hex-fa: 마스크 처리 최적화 (fastdiv 등)
-
hex-fa: 마스크 dma 캐싱 개선
-
hmx-fa: 마스크 캐시 히트 (cache hits)를 최대화하기 위해 루프 순서 변경
-
hex-fa: 과도한 계측 제거
-
hex-fa: QKV 준비 트레이싱 (trace) 이벤트 세분화
-
hmx-fa: 마스크 처리 최적화 추가 진행
-
hex-fa: 마스크 브로드캐스트 (broadcast)가 일반적인 경우이므로 이에 맞춰 최적화
-
hex-fa: 가능한 경우 정렬된 로드 (aligned loads) 사용
-
hex-fa: uint32_t 인덱스를 사용하도록 루프 업데이트
-
hmx-fa: vtcm 초기화를 q 준비 작업으로 통합
-
hex-fa: 나머지 hmx 함수들이 uint32_t를 사용하도록 업데이트
-
hmx-fa: build_d를 메인 소프트맥스 (softmax) 루프에 통합
-
hmx-fa: kv dma를 더 일찍 시작
-
hmx-fa: 마스크 dma를 약간 더 일찍 시작
-
hex-fa: 나눗셈 (divs)을 피하기 위해 작업당 행 (rows) 사전 계산
-
hmx-fa: f16 및 f32를 위한 fa_o_store 특화
-
hmx-fa: Sinks에 대한 예비 지원
-
hmx-fa: 소프트맥스 (softmax) 누산기 (accumulators)를 fp32로 유지
-
hex-fa: tanh_f16 및 exp2_f16 추가 및 FA에서 사용
-
hex-fa: hvx 커널에서 fp16 수학 사용
-
hex-fa: 기울기(slopes) 및 softcap을 위한 비용이 큰 float -> __fp16 캐스트(cast) 방지
-
hex-fa: 대부분의 vec_exp_f32를 vec_exp2_f16으로 교체
-
hmx-fa: sinks 업데이트 벡터화 (vectorize)
-
hex-fa: 사소한 포맷팅 수정
-
hmx-fa: softcap 루프를 타일 로드(tile load)에 통합
-
hmx-fa: sinks를 채우기 위해 vectoralias 사용
-
hex-fa: 중복 체크 제거
-
hex-fa: 누산기(accumulators)에 fp32를 사용하도록 vtcm 크기 계산 수정
-
hex-mm: trailing spaces 수정
-
hmx-fa: 변환 오버플로(conversion overflows)를 방지하기 위해 마스크 초기화 시 -inf를 사용하지 않음
-
hex-fa: 이제 f16->f32 변환기에서 -inf를 명시적으로 가드(guard)할 필요 없음
-
hmx-fa: fa sinks 처리 정리
-
hex-mm: mm이 add와 융합(fused)될 때 src2 stride 처리 수정
-
hex-fa: LTO(Link Time Optimization) 최적화
macOS/iOS:
- macOS Apple Silicon (arm64)
- macOS Apple Silicon (arm64, KleidiAI 활성화) 비활성화됨
- macOS Intel (x64)
- iOS XCFramework
Linux:
<strong>Linux:</strong>
- 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)
<strong>Android:</strong>
<strong>Windows:</strong>
<strong>Windows:</strong>
- 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가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기