HIP: RDNA3 mma FA, 더 빠른 AMD transpose, AMD 튜닝 ( #22880 ) CUDA mma FA 커널에 RDNA3 지
요약
이 기술 기사는 HIP를 사용하여 RDNA3 아키텍처에서 CUDA mma FA 커널을 지원하고 AMD 튜닝을 개선한 내용을 다룹니다. 특히 VKQ(Vector Quantization)의 FP16 누산 작업 시 RDNA3 텐서 코어를 활용하기 위해 타일 크기 조건을 정의했으며, 헤드 크기에 따른 적절한 누산 방식을 적용했습니다. 또한 RDNA3/4 및 CDNA1에 대한 커널 파라미터 튜닝을 통해 성능 개선 사항과 제약 조건(예: 헤드 크기가 128보다 클 때의 성능 한계)을 발견하고 새로운 데이터 레이아웃 항목을 추가했습니다.
핵심 포인트
- RDNA3 아키텍처에서 CUDA mma FA 커널 지원 및 AMD 최적화가 이루어졌습니다.
- VKQ FP16 누산 시 RDNA3 텐서 코어 사용을 위해 타일 크기(attention head 방향)에 대한 특정 조건이 설정되었습니다.
- 헤드 크기가 128보다 큰 경우, RDNA3/4에서는 타일 커널 방식보다 성능 개선 폭이 제한적입니다.
- CDNA 아키텍처의 경우 최대 헤드 크기 256까지 커널 작동이 가능함을 확인했습니다.
- 다양한 플랫폼(macOS, Linux, Android, Windows 등) 및 API(CUDA, Vulkan, SYCL, HIP 등)에 대한 빌드 지원 목록이 제공되었습니다.
HIP: RDNA3 mma FA, 더 빠른 AMD transpose, AMD 튜닝 ( #22880 ) CUDA mma FA 커널에 RDNA3 지원을 추가합니다. VKQ를 위한 FP16 누산 (accumulation) 작업 시 RDNA3 텐서 코어 (tensor cores)가 작동하게 하려면, 타일 (tiles)의 길이가 어텐션 헤드 (attention head) 방향으로 32 논리 유닛(logical units) 길이어야 합니다. 32로 정확히 나누어떨어지지 않는 헤드 크기 80 및 112의 경우, 대신 FP32 누산 (accumulation)을 사용하는 일반적인 길이인 16이 사용됩니다. 더 긴 타일은 워프 크기 (warp size) 32에 대해 더 효율적인 전치 (transposition)를 가능하게 하며, 이것이 RDNA4에서도 사용되는 이유입니다. 그러나 이는 어텐션 헤드 차원을 따라 누산기 (accumulators)의 데이터 레이아웃 (data layout)을 뒤섞습니다. 실수로 잘못 사용하는 것을 방지하기 위해 ggml_cuda_mma::data_layout에 새로운 항목을 추가했습니다. 또한 RDNA3, RDNA4, 그리고 전반적인 CDNA1에 대해 커널 파라미터 (kernel parameters)를 튜닝했으며, 이 과정에서 CDNA의 경우 헤드 크기 최대 256까지 커널이 작동할 수 있음을 발견했습니다. RDNA3/4의 경우, 헤드 크기가 128보다 큰 경우에는 타일 커널 (tile kernel)보다 더 나은 성능을 얻을 수 없었습니다.
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가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기