에이전트와 개발

llama.cpp, FP8 변환·CPU 연산 지원 등 b12000~b12004 빌드 5건 공개

llama.cpp가 10월 30일 b12000부터 b12004까지 빌드 5건을 냈다. OCP FP8 E4M3 모델의 GGUF 변환과 CPU 연산 지원, AMD RDNA4_M 계열 추가, 배치 텐서 복사 API 등이 담겼다.

루카스 ·

llama.cpp 프로젝트가 2026년 10월 30일 b12000부터 b12004까지 빌드 다섯 개를 하루에 연달아 공개했다. 가장 큰 변경은 b12000에 들어간 OCP FP8 E4M3 지원으로, 이 형식으로 저장된 모델을 GGUF로 변환하고 CPU에서 연산하는 경로가 생겼다. 다만 Metal 백엔드에서는 FP8을 차단 목록에 올려 지원 대상에서 뺐다. b12001은 AMD GPU 계열 지원을 넓혔고, b12002는 텐서 복사 API를 추가했으며, b12003은 SYCL 백엔드의 FLASH_ATTN_EXT 실패를, b12004는 추론 예산 강제(reasoning budget forcing) 종료 처리를 다뤘다.1,2,3,4,5

빌드는 모두 GitHub 릴리스 페이지에서 내려받는다. 각 빌드에는 macOS(Apple Silicon·Intel)와 iOS XCFramework, Ubuntu, Android, Windows용 실행 파일이 붙는다. 가속 백엔드는 Vulkan, CUDA 12·13, ROCm, OpenVINO, SYCL이며, Snapdragon용 빌드는 CPU와 Adreno GPU, Hexagon NPU를 묶어 제공한다. KleidiAI를 켠 macOS 빌드와 openEuler 빌드는 다섯 빌드 모두 비활성(DISABLED)으로 표시돼 있다.1,5

b12000, FP8 E4M3 변환과 CPU 연산

b12000의 변경 번호는 #27512다. 양자화 항목으로 분류됐고, 변환 스크립트가 FP8 텐서를 읽어 처리하도록 고친 내용이 중심이다. 입력 스케일 텐서를 FP8에서도 만들어 내고, 남은 FP8 텐서는 변환 중 역양자화할 수 있게 했다. 텐서 전체에 하나의 스케일을 쓰는 방식(tensor strategy)으로 FP8만 담은 compressed-tensor(압축 텐서 형식) 체크포인트도 받아들이며, 출력 스케일 텐서는 어느 GGUF 조각 파일에 있어도 된다.

변환 오류도 여럿 잡았다. Hugging Face의 RedHatAI Qwen3.8-27B-NVFP4 변환을 고치는 과정에서, 행 단위(per row) FP8이 차원만 보는 NVFP4 판정에 걸려 잘못 변환되던 문제를 찾아 dtype까지 확인하도록 바꿨다. FP8 QKV 투영의 스케일도 가중치와 같은 방식으로 reshape하며, Qwen3-Next의 fused qkvz 변환도 고쳤다. 다만 FP8의 QKV 융합은 당분간 허용하지 않고, --fuse-gate-up-exps에서도 FP8은 융합하지 않는다. 가중치 스케일이 서로 다를 수 있기 때문이며, 융합을 건너뛰면 변환 중 경고를 낸다.

연산 쪽에서는 CPU에서 FP8로, 또는 FP8에서 나가는 strided copy를 지원하고, F8_E4M3용 빠른 CPU 커널을 추가했다. 이 빠른 경로는 arm을 이미 제외했고 RISC-V는 후속 작업으로 남겼다. FP8 전용 인코더·디코더 테스트와 gguf-py의 FP8_E4M3 동작 테스트도 들어갔다. CI 실패에 대응해 Metal 백엔드는 처음에 ggml_op_get_rows를 허용 목록(whitelist)에 올리는 방식을 썼으나, 이후 FP8을 차단 목록(blacklist)에 넣는 방식으로 바꿨다.1

b12001~b12004의 변경 내용

b12001(#31373)은 ROCm/HIP에 gfx1170·gfx1171용 RDNA4_M 계열을 추가했다. gfx117X는 128비트 WMMA를 쓰는 RDNA4와 비슷하지만 같지는 않아서, 정의를 따로 나눠 필요한 곳에만 적용했다. 이 변경에는 Codex와 GitHub Copilot의 보조 표기(Assisted-by)가 붙었고, Mario Limonciello가 공동 작성자(Co-authored-by)로 올랐다.2

b12002(#30881)는 ggml에 일괄 텐서 복사(batched tensor copy) API를 넣고, llama의 컨텍스트 입출력과 장치 입출력 복사에 쓰도록 바꿨다. CUDA에서도 이 일괄 API를 지원하며, 같은 변경 안에서 비동기 tensor_n API를 제거하고 null 버퍼 훅을 더했다.3

b12003(#30761)은 SYCL 백엔드의 FLASH_ATTN_EXT 실패를 고쳤다. 릴리스 노트에는 한 줄만 있어 어떤 조건에서 실패했는지는 확인되지 않는다. b12004(#31374)는 추론 예산 강제를 프롬프트에 든 종료 태그(end tag)에서 끝내도록 했다. 이 역시 릴리스 노트에는 제목 한 줄뿐이어서 구체적인 동작 변화는 밝혀져 있지 않다.4,5

FP8 모델을 GGUF로 바꾸려는 사용자는 b12000 이후 빌드를 쓰면 되지만, FP8의 QKV 융합 제외 같은 임시 제한이 남아 있다.1

댓글

기사에 대한 의견이나 틀린 내용 제보를 남겨 주세요.

댓글을 불러오고 있습니다.