b8956
요약
이 기술 기사는 GGML 라이브러리의 백엔드(Backend) 기능을 대폭 개선한 내용을 담고 있습니다. 주요 내용은 새로운 연산자 추가(예: `GGML_OP_SET`, `GGML_OP_CUMSUM`), 기존 연산자의 성능 최적화(예: GLU, CROSS_ENTROPY_LOSS), 그리고 여러 버그 수정 및 아키텍처 개선 사항을 포함합니다. 이를 통해 다양한 하드웨어 플랫폼(CPU, GPU, NPU 등)에서 더 빠르고 안정적인 AI 모델 추론 및 학습 환경을 제공하는 것을 목표로 합니다.
핵심 포인트
- 다양한 연산자 추가: `GGML_OP_SET`, `GGML_OP_CUMSUM` 등 새로운 기능을 지원하는 연산자들이 도입되어 모델의 표현력을 확장했습니다.
- 핵심 연산 최적화: GLU, 크로스 엔트로피 손실 함수 계산 등 주요 AI 워크로드에 대해 커널 퓨전 및 알고리즘 개선을 적용하여 성능을 극대화했습니다.
- 메모리 관리 및 그래프 캐시 안정성 강화: `ACL graph cache`의 타입 체크 누락 버그 수정과 인플레이스 연산자 최적화를 통해 시스템 안정성과 정확도를 높였습니다.
- 광범위한 플랫폼 지원 확대: macOS, Linux(다양한 GPU/CPU), Android, Windows 등 거의 모든 주요 운영체제와 아키텍처에 대한 빌드 및 호환성을 확보했습니다.
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)
AI 자동 생성 콘텐츠
본 콘텐츠는 llama.cpp Releases의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기