본문으로 건너뛰기

© 2026 Molayo

llama.cpp헤드라인2026. 05. 22. 11:01

vulkan: snake 활성화 함수 융합 (mul, sin, sqr, mul, add) ( #22855 ) vulkan: snake 활성화 함

요약

Vulkan 백엔드에서 Snake 활성화 함수를 위한 연산 융합(Operator Fusion) 기능을 추가했습니다. 5개의 개별 연산을 단일 요소별 커널로 재작성하여 F32, F16, BF16 파이프라인에서 성능을 최적화합니다.

핵심 포인트

  • Snake 활성화 함수(y = x + sin(a*x)^2 * inv_b)의 연산 융합 구현
  • Vulkan 기반 단일 요소별 커널을 통한 연산 효율성 증대
  • F32, F16, BF16 데이터 타입에 대한 지원 및 타입 체크 강화
  • 오디오 디코더(BigVGAN, Vocos) 등의 워크로드 최적화

vulkan: snake 활성화 함수 융합 (mul, sin, sqr, mul, add) ( #22855 ) vulkan: snake 활성화 함수 융합 (mul, sin, sqr, mul, add) F32 / F16 / BF16 파이프라인을 포함하는 snake.comp 셰이더와 ggml_vk_snake_dispatch_fused를 추가합니다. 매처(Matcher)는 오디오 디코더(BigVGAN, Vocos)에서 snake 활성화 함수 y = x + sin(ax)^2 * inv_b를 위해 생성하는 단순한 5개 연산 분해를 인식하고, 이를 단일 요소별 커널(elementwise kernel)로 재작성합니다. CUDA PR에 포함되었던 test_snake_fuse는 이제 F32 / F16 / BF16 전반에 걸쳐 CPU 단순 구현과 Vulkan 융합 구현을 비교합니다. vulkan: 융합된 snake 활성화 함수에 대한 jeffbolznv의 리뷰 반영 vulkan: Vulkan 백엔드 전반에서 사용되는 표준 명명 규칙에 맞추기 위해 셰이더와 푸시 상수(push constants) 내의 T / C를 ne0 / ne1로 변경합니다. ggml_vk_can_fuse_snake를 강화합니다: x와 dst가 연속적(contiguous)이어야 하며(셰이더는 idx = i0 + i1 * ne0를 사용함), a / inv_b가 브로드캐스트 차원(broadcast dim)에 타이트하게 패킹되어 있어야 합니다(셰이더는 data_a[i1]을 읽음). vulkan: 모든 피연산자에 대한 snake 융합 타입 체크 강화 (jeffbolznv 리뷰 반영) vulkan: ne[2] 또는 ne[3] > 1인 경우 snake 융합 거부 (jeffbolznv 리뷰 반영) vulkan: 융합된 snake 활성화 함수에 대한 0cc4m의 리뷰 반영 snake.comp의 이름이 ggml DATA_A_ / A_TYPE 컨벤션을 따르도록 변경되었습니다. A_TYPE은 이제 브로드캐스트 승수 대신 활성화 텐서 data_a에 적용되며, 바인딩은 data_a (A_TYPE), data_b (float), data_c (float), data_d (D_TYPE)가 됩니다. 셰이더 상단의 헤더는 각 버퍼를 y = x + sin(b * x)^2 * c에서의 역할에 매핑합니다. C++ 측면에서, ggml_vk_can_fuse_snake는 연산 목록을 중복하는 대신 기존의 snake_pattern 상수를 재사용하며, sin_node는 다른 체인 노드들과 함께 이름이 지정된 로컬 변수로 추출됩니다. 또한 브로드캐스트 피연산자인 a와 inv_b는 이제 data_b 및 data_c의 하드코딩된 float 바인딩과 일치하도록 GGML_TYPE_F32여야 합니다 (이전의 a->type == x->type 방식은 SIN / SQR에 대한 supports_op 게이트가 해제될 경우 향후 모든 BF16 또는 F16 체인을 조용히 거부하게 됩니다).

ggml_vk_snake_dispatch_fused는 조용한 f32 폴백 (fallback) 대신 명시적인 GGML_TYPE_F32 케이스와 기본값에 대한 GGML_ABORT를 갖게 되며, data_a[i1] / data_inv_b[i1]에 관한 오래된 주석이 새로운 바인딩 이름에 맞춰 갱신되었습니다. 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: Android arm64 (CPU) Windows: Windows x64 (CPU) Windows arm64 (CPU) Windows x64 (CUDA 12) - CUDA 12.4 DLLs Windows x64 (CUDA 13) - CUDA 13.1 DLLs Windows x64 (Vulkan) Windows x64 (SYCL) Windows x64 (HIP) openEuler: openEuler x86 (310p) openEuler x86 (910b, ACL Graph) openEuler aarch64 (310p) openEuler aarch64 (910b, ACL Graph)

AI 자동 생성 콘텐츠

본 콘텐츠는 llama.cpp Releases의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
0

댓글

0