llama.cpp 프로젝트가 2026년 10월 26일 빌드 b11879부터 b11883까지 다섯 개를 연달아 공개했다. 첫 빌드 b11879는 CUDA 백엔드에서 프롬프트를 처리할 때 피드포워드 층(FFN)의 gate 행렬곱과 up 행렬곱을 하나로 합쳐 실행한다. 나머지 네 빌드는 GGUF 병합 도구, 메모리 캐시, 문법 파서, 양자화 도구의 오류를 각각 고쳤다.1,2,3,4,5
CUDA 융합 경로는 NVIDIA Turing 세대 이후 GPU에서 켜지고, Q4_K, Q5_K, Q6_K, Q8_0, IQ4_XS 양자화 형식에 적용된다. b11879 기준 내려받기 목록에는 macOS, iOS, Linux, Android, Windows용 빌드가 있고, CUDA 12와 13, Vulkan, ROCm, OpenVINO, SYCL 등 백엔드별 파일이 따로 있다. KleidiAI를 켠 macOS 빌드와 openEuler 항목은 비활성(DISABLED)으로 표시됐다.
b11879는 밀집 FFN의 gate와 up 행렬곱을 mul_mat_q 호출 한 번으로 처리하고, GLU(게이트 선형 단위) 계산을 결과를 쓰는 단계에서 함께 한다. 이런 연산 융합은 별도 커널 실행을 줄이는 방식이다.
로더는 gate 가중치를 두 번째 포인터로 받아, up 행과 gate 행을 8개 단위로 번갈아 가중치 타일에 채운다. 그래서 스레드 하나가 up 값과 짝이 되는 gate 값을 함께 쥔다. MMA 반복문은 타일, 워프 배치, vec_dot, 스레드당 sum[] 하나까지 그대로이고, 융합된 기록 단계가 레지스터에서 GLU를 계산해 행의 절반만 쓴다.
융합 경로는 stream-k 없이 일반 타일링을 쓰며, 열 타일을 가장 안쪽에 두어 이웃한 블록이 가중치 타일을 공유하게 했다. b11879에 묶인 커밋 가운데 하나는 양자화 형식과 GLU 연산별로 융합 gate/up MMQ 테스트 케이스를 하나씩 추가했다.1
b11880은 텐서 데이터가 잘린 GGUF 파일을 병합 도구가 거부하도록 바꿨다. b11881은 모든 메모리 캐시가 no_alloc 설정을 따르게 했다.2,3
b11882는 문법(grammar) 처리에서 재귀 깊이를 제한해 스택 오버플로를 막는다.4
b11883은 양자화 도구 두 곳을 고쳤다(#30820). 4차원 텐서의 전체 행 수를 ne[1]*ne[2]로 세던 탓에 ne[2]개 조각만 양자화되고 나머지 행이 빠졌다. 이제 ggml_nrows()로 ne[3]까지 모든 행을 센다. 이 수정은 이슈 #29916을 해결한다.
MXFP4_MOE 경로는 ne[2] > 1이면 전문가 혼합(MoE)의 전문가 텐서로 판정했는데, 이 조건은 3차원 이상인 비전문가 텐서에서 오판을 낳았다. MLA 투영(BailingMoE3)과 4차원 합성곱 커널이 그 예다. 이제 GGML_OP_MUL_MAT_ID가 쓰는 텐서 이름이 *_exps 또는 *_chexps인지로 판별하고, BailingMoE3 전용 예외 처리는 없앴다.
imatrix(중요도 행렬)는 2차원 조각마다 ne[0]개 값의 벡터를 담으므로 기대 크기는 ne[0]*ne[2]*ne[3]이다. 기존 계산은 ne[0]*ne[2]였다.5
출처
- ggml-org/llama.cpp b11879 github.com
- ggml-org/llama.cpp b11880 github.com
- ggml-org/llama.cpp b11881 github.com
- ggml-org/llama.cpp b11882 github.com
- ggml-org/llama.cpp b11883 github.com