metal: concat 커널 최적화 및 set 커널 스레드 수정 (#23411) metal: GGML_OP_SET 커널 스레드 수정 tests
요약
llama.cpp의 Metal 커널 최적화 및 테스트 확장 업데이트입니다. concat 커널의 row batching을 통해 GPU 점유율을 높이고, CPY 연산의 다양한 텐서 형상 지원을 위한 테스트 케이스를 대폭 강화했습니다.
핵심 포인트
- Metal concat 커널에 row batching을 적용하여 작은 너비의 텐서 처리 효율 개선
- GGML_OP_SET 커널의 스레드 구성 수정 및 버그 수정
- CPY 연산의 다양한 텐서 형상(1D~4D) 지원을 위한 50개 이상의 테스트 케이스 추가
- 테스트 리팩토링을 통해 차원 순열 기반의 자동화된 검증 체계 구축
metal: concat 커널 최적화 및 set 커널 스레드 수정 (#23411)
metal: GGML_OP_SET 커널 스레드 수정
tests: CPY 연산의 다양한 src/dst 형상(shape)을 지원하도록 test_cpy 확장
- 총 요소(element) 수가 일치해야 하는 CPY 연산(reshaping)에 대해 서로 다른 소스(source) 및 대상(destination) 텐서 형상을 지원하도록 test_cpy를 확장합니다.
- ne를 ne_src로 변경하고, ne_dst 파라미터를 추가했습니다 (기본값: src 형상 사용).
- 1D<->2D<->3D<->4D 변환을 포함하는 50개의 새로운 reshaping 테스트 케이스를 추가했습니다.
- 1024 경계값, 작은 형상 및 큰 차원 변경에 대한 테스트를 수행합니다.
- dangling reference 버그를 수정했습니다 (임시 std::array에 & 저장).
- 호환성을 위해 기존의 모든 테스트 호출을 permute/transpose 인자와 함께 업데이트했습니다.
- 도움을 준 사람: llama.cpp:local pi
metal: 작은 너비에 대해 row batching을 사용하여 concat 커널 최적화
- ne0 < 256일 때, 점유율(occupancy)을 높이기 위해 여러 행을 단일 스레드그룹(threadgroup)으로 배치(batch)합니다. 이는 좁은 텐서를 처리할 때 GPU 활용도가 낮아지는 것을 방지합니다.
- 그룹당 nth = min(256, ne0) 스레드를 할당합니다.
- 최대 256개 스레드를 채우기 위해 nrptg(스레드그룹당 행 수)를 계산합니다.
- row batching을 처리하도록 커널 인덱스 계산을 업데이트합니다.
- i1 >= ne1에 대한 경계 검사를 추가합니다.
- 도움을 준 사람: llama.cpp:local pi
tests: 테스트 정리
tests: 차원 순열(dimension permutations)을 사용하도록 CPY 형상 테스트 리팩토링
- 75개의 하드코딩된 테스트 케이스를 {3, 5, 7, 32}의 순열에 대한 루프로 교체했습니다 (총 요소 수: 3360). 각 src 순열은 동일한 형상을 제외하고, 정렬된 표준(canonical) 및 역순 dst에 대해 테스트됩니다.
- F32, F16 및 Q4_0(src와 dst의 ne0가 모두 32인 경우)를 지원합니다.
지원 환경:
- llama.cpp:local pi macOS/iOS: macOS Apple Silicon (arm64) macOS Apple Silicon (arm64, KleidiAI enabled) 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가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기