gated_delta_net 이후의 불필요한 CUDA 복사 제거
요약
llama.cpp 프로젝트에서 gated_delta_net 연산 시 발생하는 불필요한 CUDA 복사 과정을 제거하여 성능을 최적화했습니다. 중간 테일 쓰기와 복사 커널을 건너뛰고 CUDA 커널이 순환 캐시에 직접 기록하도록 개선되었습니다.
핵심 포인트
- gated_delta_net 이후 발생하는 불필요한 CUDA 복사(ggml_cuda_cpy) 제거
- 중간 테일 쓰기 및 복사 커널을 생략하여 연산 효율성 증대
- CUDA GDN 커널이 상태 스냅샷을 순환 캐시에 직접 기록하도록 변경
- MTP(Multi-Token Prediction) 환경에서의 오버헤드 감소
gated_delta_net 이후의 불필요한 CUDA 복사 제거. (#23940)
- gated_delta_net 이후의 불필요한 CUDA 복사 제거.
현재 GDN은 순환 상태(recurrent state) 스냅샷을 출력 테일(output tail)에 기록한 다음, 그래프가 즉시 해당 스냅샷을 ssm_states_all로 복사합니다. MTP 초안 길이(draft length)가 3일 때, 타겟 디코딩(target decode)은 K=4를 사용하므로, 이는 4번의 추가적인 ggml_cuda_cpy 호출이 됩니다.
이번 변경 사항은 gated_delta_net -> view -> cpy 패턴을 감지하여, 안전할 경우 중간 테일 쓰기(tail writes) 및 복사 커널(copy kernels)을 건너뛰고 CUDA GDN 커널이 상태 스냅샷(s)을 순환 캐시(recurrent cache)에 직접 기록하도록 합니다.
- 리뷰 의견 반영
macOS/iOS:
- macOS Apple Silicon (arm64)
- macOS Apple Silicon (arm64, KleidiAI 활성화됨) 비활성화됨
- macOS Intel (x64)
- iOS XCFramework
Linux:
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가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기