CANN: 새로운 연산자 추가 및 기존 연산자 최적화 (#21204)
새로운 연산자:
GGML_OP_SET: 타겟 영역에서 aclnnInplaceCopy 를 통해 구현
GGML_OP_CUMSUM: aclnnCumsum 을 통해 구현
GGML_OP_FILL: aclnnInplaceFillScalar 를 통해 구현
GGML_OP_DIAG: 대각선 스트라이드에서 aclnnInplaceCopy 를 통해 구현
GGML_OP_TRI (lower/lower_diag/upper_diag/upper): 적절한 대각선 오프셋과 함께 aclnnTril(-1/0) 및 aclnnTriu(0/1) 을 통해 구현
GGML_OP_SOLVE_TRI: aclnnTriangularSolve 를 통해 구현
GGML_UNARY_OP_SOFTPLUS: aclnnSoftplus 를 통해 구현
최적화:
GLU (SwiGLU/GeGLU/GeGLU_ERF/GeGLU_QUICK): 적용 가능한 경우 aclnnSwiGlu / aclnnGeGluV3 와 퓨전; 이제 호출 사이트가 아닌 각 함수 내부에서 폴백 조건을 확인
CROSS_ENTROPY_LOSS: (LogSoftmax→Mul→ ReduceSum×2→Muls) 의 5 커널 시퀀스를 단일 aclnnSoftmaxCrossEntropyWithLogits 호출로 교체
L2_NORM: 노름 결과에 대한 in-place ClampMin 수정 (잘못된 텐서를 클램핑함); 제로 나누기를 피하기 위해 나눗셈 전에 eps 클램핑 추가
PAD_REFLECT_1D: per-ne[3] 루프 제거; 연속성 확인 및 전체 4-D 뷰에서 한 번 ReflectionPad1d 호출; 중복 nb 복사 제거
GET_ROWS: IndexSelect 를 각 배치 슬라이스당 GatherV2 로 교체; 헬퍼를 batch loop 가 인라인된 gather_batched 람다로 재작성
SET_ROWS: IndexCopy 를 각 배치 슬라이스당 InplaceIndexCopy 로 교체; 헬퍼를 batch loop 가 인라인된 scatter_batched 람다로 재작성
OUT_PROD: O(ne[3]*ne[2]*ne[1]) Ger+InplaceAdd 루프를 per-slice Matmul 루프 (src0 @ src1^T) 로 교체; ne02/ne03 가 ne2/ne3 와 다를 수 있는 스트라이드 브로드캐스트 배치 차원을 처리
backend memset_tensor: NULL 이었던 aclrtMemset 을 통해 구현
버그 수정:
COUNT_EQUAL: InplaceEqTensor 대신 동일한 타입의 임시 버퍼에 non-inplace EqTensor 를 사용하여 src0 의 ACL 그래프 캐시 손상 방지
ACL graph cache (USE_ACL_GRAPH): ggml_graph_node_properties 의 node_type 과 src_type[] 필드 복원; has_matching_properties() 가 타입 체크를 누락하여 nb[0]=2 인 F16 및 BF16 텐서가 잘못되어 캐시된 그래프를 공유하고 잘못된 결과를 생성함 (ERR≈679)
graph cache op_params 매칭: ops 만 파라미터가 다를 경우에도 캐시에서 잘못 재생되지 않도록 전체 GGML_MAX_OP_PARAMS 바이트 비교
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)