순수 C 언어로 구현한 바닥부터 만든 BitNet 추론 엔진 — Xeon에서 bitnet.cpp보다 1.8배 빠름 (36 tok/s), 의존성
요약
순수 C99로 구현된 CPU 전용 LLM 추론 엔진인 Project Zero를 소개합니다. 외부 의존성 없이 단일 바이너리로 작동하며, bitnet.cpp 대비 Intel Xeon 환경에서 약 1.8배 빠른 성능을 보여줍니다.
핵심 포인트
- Python, CUDA 등 외부 의존성 없는 순수 C99 구현
- Intel Xeon에서 bitnet.cpp 대비 1.87배 빠른 속도 달성
- VBMI 커널 및 C11 원자성을 활용한 성능 최적화
- BitNet b1.58 및 Qwen Bonsai-27B 모델 지원
- mmap 아키텍처를 통한 메모리 효율성 극대화
안녕하세요 r/LocalLLM 여러분, Project Zero를 만들었습니다 — 순수 C99로 작성된 바닥부터 만든 CPU 전용 LLM 추론 엔진입니다. 동일한 하드웨어에서 bitnet.cpp보다 1.8배 더 빠릅니다. 또한 CPU에서 Qwen Bonsai-27B를 완벽하게 지원하며, 두 모델 모두에 대해 x86 CPU 벤치마크 데이터를 확보하기 위해 커뮤니티의 도움을 구하고 있습니다.
이것은 무엇인가?
단일 바이너리, 외부 의존성 제로 — Python, CUDA, ONNX, PyTorch가 필요 없습니다. GCC + make + CPU만 있으면 됩니다.
지원 사항:
- Microsoft BitNet b1.58-2B-4T — 삼진 가중치 (ternary weights, {−1, 0, +1}), 1.18 GB 바이너리, 전체 REPL + 에이전트 루프 (agentic loop) 지원
- Qwen Bonsai-27B — GGUF를 직접 읽음 (예: Ternary-Bonsai-27B-Q2_0.gguf), 메모리 안전 mmap (memory-mapped file) 아키텍처를 사용하여 제한된 RAM 환경에서도 OOM (Out of Memory)이 발생하지 않음.
BitNet 성능 — 긍정적인 부분
| 하드웨어 | Project Zero 속도 | bitnet.cpp 속도 | 배속 (Speedup) |
|---|---|---|---|
| Intel Xeon (Emerald Rapids, 4C) | 36.25 tok/s | 19.33 tok/s | 1.87× |
| i5-11300H (Tiger Lake, dual DDR4) | ~16.1 tok/s | ~13.0 tok/s | 1.23× |
우리는 Xeon에서 이론적 DRAM 대역폭 한계치의 약 95%에 도달했습니다. 해당 장비에서 BitNet으로부터 더 짜낼 수 있는 성능은 사실상 남아있지 않습니다.
속도가 향상되는 원리:
BitNet 가중치는 4/byte로 삼진 패킹 (ternary packed)되어 있습니다. 언패킹(unpacking) → float → FMA 과정을 거치는 대신, 3가지 명령어로 구성된 VBMI 커널 (vpermi2b + vpternlogd + vpaddb)을 사용하여 INT8 VNNI 누적 (vpdpbusds)으로 직접 전달합니다. 스레드 풀은 futex 시스템 콜 (syscall)을 제거하기 위해 C11 원자성 (atomics) 기반의 spin-then-sleep 방식을 사용합니다.
커뮤니티 챌린지: BitNet & Bonsai 벤치마크
우리는 지금까지 두 대의 머신에서만 BitNet을 벤치마킹했습니다. 폴백 삼진 커널 (fallback ternary kernels)이 구형 CPU 아키텍처에서도 여전히 속도 향상을 제공하는지 확인하고, 서버 하드웨어에서의 메모리 대역폭 한계를 파악해야 합니다.
또한, PrismML은 Bonsai-27B에 대한 커뮤니티 벤치마크 수치를 적극적으로 찾고 있습니다. 현재 그들의 리더보드에 있는 모든 항목은 GPU 기반 (CUDA/Metal/MLX)입니다. CPU 전용 x86 항목은 단 하나도 존재하지 않습니다. 우리는 그것을 바꾸고 싶습니다. Project Zero는 제로 카피 (zero-copy) mmap 아키텍처를 사용하므로, 매우 제한된 하드웨어에서도 충돌 없이 Bonsai-27B를 실행할 수 있습니다.
만약 구형 AVX2 칩을 사용 중이거나, 코어 수가 많은 Xeon/EPYC를 사용 중이라면, 두 모델 각각에 대해 어떤 토큰 속도 (token rates)가 나오는지 저희에게 알려주시기 바랍니다.
Clone 및 빌드 방법, 테스트 및 벤치마크 방법:
bash git clone https://github.com/shifulegend/project-zero.git
cd project-zero
make demo
BitNet 또는 Bonsai-27B 실행하기:
# BitNet (b1.58-2B-4T)의 경우:
./adaptive_ai_engine --model models/bitnet-b1.58-2B-4T.bin --tokenizer models/bitnet-b1.58-2B-4T_tokenizer_proper.bin --threads 4
# Qwen Bonsai-27B (GGUF)의 경우:
./adaptive_ai_engine --model models/Ternary-Bonsai-27B-Q2_0.gguf --threads 4
결과 게시 위치:
이 스레드에 직접 결과를 게시하거나, 리포지토리(repo)의 Discussion #3에 남겨주세요.
리포지토리: https://github.com/shifulegend/project-zero
삼진 커널 (ternary kernel) 설계, AVX-512 VNNI 디스패치 (dispatch), DRAM 병목 현상 (bottleneck), 또는 왜 우리가 Bonsai-27B에 집중했는지에 대한 질문이 있다면 기꺼이 답변해 드리겠습니다!
제출자: /u/shifu_legend [link] [comments]
AI 자동 생성 콘텐츠
본 콘텐츠는 r/LocalLLaMA의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기