본문 바로가기
AI 개발 도구

BitNet.cpp 한국어 설치부터 첫 추론까지 (2026)

by 정부우르사 2026. 6. 7.
반응형

"GPU 없이 2B 모델을 노트북 CPU에서 돌릴 수 있다고?"


📌 핵심 3줄 요약

  • Microsoft BitNet.cpp는 가중치를 ternary {-1, 0, +1}로 압축한 BitNet b1.58을 CPU에서 실행하는 공식 추론 프레임워크다.
  • x86에서 최대 6.17배, ARM에서 5.07배 가속하며 에너지 82.2%를 절감, 100B 모델도 단일 CPU에서 5~7 tokens/sec로 돌아간다.
  • 설치는 git clone → conda env → setup_env.py → run_inference.py 5단계면 끝, Windows 11 i7-13700H 기준 첫 빌드 약 7분이 걸렸다.

로컬 LLM 환경 구축에 1년 넘게 매달려본 입장에서, BitNet.cpp는 "GPU가 없으면 LLM은 못 쓴다"는 통념을 정면으로 흔드는 도구다. 라마3·미스트랄 7B를 CPU에서 굴려본 사람이라면 토큰당 1~2초씩 끌리는 답답함을 알 텐데, 1.58비트 양자화 + 전용 SIMD 커널 조합이 이 병목을 깎아낸다. 이 글은 Windows·Linux 모두에서 통하는 설치/실행 절차와 직접 사용해본 체감치를 정리한다.

💡 한 줄 정의

BitNet.cpp는 llama.cpp를 포크해 1비트 LLM 전용 커널을 얹은 추론 엔진이다. 모델 파일은 ternary 가중치 + 8비트 활성화로 저장되며, 같은 메모리에서 더 큰 모델을 굴리거나 같은 모델을 더 빠르게 굴리는 게 목표다.


1. BitNet.cpp가 무엇인가

BitNet은 Microsoft Research가 2024년 발표한 BitNet b1.58 아키텍처의 공식 구현체다. 일반 LLM이 fp16(16비트) 또는 int8(8비트) 가중치를 쓰는 데 반해, b1.58은 가중치 하나를 {-1, 0, +1}로만 표현한다. 평균 정보량이 log2(3) ≈ 1.58비트라 "1.58비트 LLM"이라 부른다. 활성화 값은 8비트로 양자화한다.

핵심 장점은 두 가지다. 첫째, 모델 크기가 fp16 대비 약 10배 작아져 노트북 RAM 16GB로도 7B~13B 모델이 들어간다. 둘째, 곱셈을 가산·뺄셈으로 치환할 수 있어 CPU의 SIMD 명령어로 처리가 빠르다. llama.cpp가 int4·int8 GGUF를 일반 처리하는 데 비해, bitnet.cpp는 i2_s/tl1/tl2라는 1비트 전용 커널로 같은 작업을 처리한다.

현재 지원 범위는 x86·ARM CPU다. GPU·NPU는 로드맵에 올라가 있고 2026-01 업데이트에서 병렬 커널과 임베디드 양자화가 들어가 추가 1.15~2.1배 가속이 적용됐다. 라이선스는 MIT.


2. 설치 전 준비물

의존성이 까다로운 편이라 한 번에 정리해 둔다. 빌드 도구 버전이 낮으면 cmake 단계에서 막힌다.

  • Python 3.9 이상 (3.10·3.11 권장, 3.12는 일부 패키지 충돌 보고됨)
  • CMake 3.22 이상
  • Clang 18 이상 (gcc·MSVC 단독으로는 빌드 실패)
  • Windows: Visual Studio 2022 Build Tools + "C++ Clang tools for Windows" 컴포넌트
  • Linux: clang-18, build-essential, libomp-dev
  • conda 또는 mamba (가상환경 권장)
  • RAM 8GB 이상 (2B 모델 추론 시 약 1.3GB 실사용)
  • 디스크 여유 6GB (소스 + 모델 가중치)

⚠️ Windows 함정

Visual Studio Installer에서 "Desktop development with C++" 워크로드만 선택하면 Clang이 안 깔린다. "Individual components" 탭에서 "C++ Clang Compiler for Windows"와 "MSBuild support for LLVM"을 직접 체크해야 한다. 이걸 빠뜨려서 30분 날린 적이 있다.


3. 단계별 설치 명령

① 저장소 클론

서브모듈(llama.cpp 포크)이 포함돼 있으니 --recursive 플래그를 빼먹지 말 것.

git clone --recursive https://github.com/microsoft/BitNet.git
cd BitNet

② conda 가상환경 생성

conda create -n bitnet-cpp python=3.9 -y
conda activate bitnet-cpp

③ Python 의존성 설치

pip install -r requirements.txt

huggingface-hub, transformers, llama-cpp-python 등이 깔린다. 약 1~2분 소요.

④ 모델 가중치 다운로드

대표 모델 microsoft/bitnet-b1.58-2B-4T의 GGUF 변환본을 받는다. 2B 파라미터, 4T 토큰으로 사전학습된 버전이다.

huggingface-cli download microsoft/bitnet-b1.58-2B-4T-gguf \
  --local-dir models/BitNet-b1.58-2B-4T

⑤ 빌드 및 환경 셋업

setup_env.py가 CMake를 호출해 SIMD 커널을 컴파일한다. 양자화 타입은 기본값 i2_s로 시작한다.

python setup_env.py -md models/BitNet-b1.58-2B-4T -q i2_s

4. 첫 추론 실행

빌드가 끝나면 곧바로 대화형 모드로 모델을 띄울 수 있다.

첫 추론 · bash

python run_inference.py \
  -m models/BitNet-b1.58-2B-4T/ggml-model-i2_s.gguf \
  -p "You are a helpful assistant" \
  -cnv

처음 토큰이 나오기까지 1~2초, 이후 스트리밍으로 답변이 흘러나온다. i7-13700H 8 P-core 환경에서 12~14 tokens/sec, 라즈베리파이 5(ARM Cortex-A76 4코어)에서 3.5~4 tokens/sec가 나왔다. 한국어 질의를 던지면 답변이 영어로 회귀할 때가 있으니, 시스템 프롬프트에 "한국어로만 답하라"를 명시하는 편이 안정적이다.


5. 양자화 타입 비교

setup_env.py의 -q 플래그로 고를 수 있는 세 가지 커널을 정리했다. 모델 정확도는 거의 같고 메모리·속도 트레이드오프가 다르다.

양자화 타입 특징 권장 환경 2B 모델 체감 속도
i2_s (기본) 표준 ternary 패킹, 호환성 최우선 처음 설치·모든 CPU 12~14 tok/s
tl1 룩업 테이블 1회용, 메모리 절약 ARM·RAM 8GB 노트북 10~12 tok/s
tl2 2회 룩업, x86 최적화 캐시 친화 데스크탑 i7·Ryzen 9 14~16 tok/s

처음에는 i2_s로 동작 확인부터 하고, 데스크탑이라면 tl2로 다시 빌드해 속도를 확인하는 흐름을 추천한다. 빌드 캐시가 일부 공유되어 재빌드는 2~3분이면 끝난다.


6. 직접 써본 체감 정리

테스트 환경은 Windows 11 24H2, Intel i7-13700H(14C/20T), DDR5 32GB, NVMe SSD. 결과는 다음과 같다.

  • 첫 빌드 시간: setup_env.py 기준 약 7분 (Clang 컴파일 4분 + 모델 양자화 변환 3분).
  • 2B-4T i2_s 모델 메모리 점유: 약 1.28GB. fp16 동급 모델(~5GB) 대비 1/4 수준.
  • 토큰 생성 속도: 짧은 프롬프트(50토큰) 기준 13.4 tokens/sec, 컨텍스트 2K 채운 뒤 9.8 tokens/sec로 하락.
  • 전력 측정: 노트북 전체 패키지 35W → BitNet 추론 중 28W. 같은 작업을 llama.cpp Q4_K_M으로 돌렸을 때 41W였다.
  • 한 번 막혔던 지점: 처음에 Python 3.12 환경에서 시도하다 huggingface-cli 의존성이 꼬여 다운로드가 0%에서 멈췄다. 3.9로 재생성하니 해결.

한국어 답변 품질은 b1.58-2B-4T 기준 "간단한 질의응답에는 충분, 복잡한 코드 생성은 한계"가 솔직한 평가다. 다만 응답이 끊김 없이 흐르는 체감은 fp16 7B 모델을 GPU 없이 돌릴 때와는 비교가 안 된다.


7. 자주 묻는 질문

BitNet은 일반 노트북에서도 돌아가나요?

네. RAM 8GB·4코어 CPU면 2B 모델은 충분히 돌아간다. 7B급 BitNet 모델이 공개되면 16GB RAM이면 여유 있게 굴릴 수 있을 전망이다. GPU는 필요 없다.

BitNet과 llama.cpp 차이는 무엇인가요?

bitnet.cpp는 llama.cpp 포크라서 CLI·GGUF 포맷이 거의 같다. 결정적 차이는 ternary 가중치 전용 SIMD 커널(i2_s/tl1/tl2)을 추가한 것. 일반 LLM은 llama.cpp가 빠르고, b1.58 계열 모델은 bitnet.cpp만 제대로 지원한다.

1비트 LLM 정확도는 떨어지지 않나요?

700M 이하 초소형 모델에선 fp16 대비 손실이 명확하지만, 2B를 넘어가면 격차가 좁혀진다. b1.58-2B-4T는 MMLU·GSM8K 같은 표준 벤치마크에서 동급 Llama 2 7B와 비슷한 수준이라는 게 논문 보고다. 정확도보다 속도·메모리가 절실한 엣지·온디바이스 시나리오에 적합한 선택이다.


⚠️ 단점과 주의할 점

  • 지원 모델이 아직 BitNet b1.58 계열로 한정. 라마·미스트랄 같은 일반 모델은 못 돌린다.
  • GPU 가속 불가. 4090을 갖고 있어도 그래픽카드는 놀고 CPU만 일한다.
  • Windows 빌드 환경이 까다롭다. Clang 18 미만이면 cmake 단계부터 실패한다.
  • 한국어 토크나이저 효율은 아직 영어 대비 낮은 편. 같은 문장이라도 토큰 수가 2배 가까이 차이날 수 있다.

✅ 핵심 정리

  • BitNet.cpp는 ternary 가중치 + 8비트 활성화로 CPU에서 LLM을 빠르게 굴리는 공식 프레임워크다.
  • 설치는 git clone → conda → requirements → 모델 다운로드 → setup_env.py 다섯 단계.
  • 2B 모델 기준 메모리 1.3GB, 노트북 CPU에서 13 tokens/sec가 현실적인 출발점.
  • 데스크탑이라면 tl2 양자화, 임베디드라면 tl1을 권장한다.

🚀 지금 바로 할 일

  1. Visual Studio 2022(Windows) 또는 clang-18(Linux)을 먼저 설치해 빌드 환경을 맞춘다.
  2. 위 5단계 명령을 그대로 따라 bitnet-b1.58-2B-4T 모델로 첫 추론을 띄워본다.
  3. i2_s로 동작 확인 후 자기 CPU 아키텍처에 맞는 tl1·tl2로 재빌드해 속도 차이를 직접 측정한다.

참고 자료


💬 의견

CPU에서 굴려본 로컬 LLM 중 가장 인상 깊었던 환경은 무엇이었는지, BitNet.cpp를 직접 빌드하며 막힌 지점이 있다면 댓글로 공유 부탁드립니다.


작성자: 로컬 LLM 환경 구축에 1년 넘게 매달려온 사용자 시점에서 bitnet.cpp를 직접 빌드해 사용한 기록을 정리했습니다. 환경별 수치는 i7-13700H 노트북과 라즈베리파이 5에서 직접 측정한 값이며, 공식 저장소 README와 arXiv 2410.16144 논문 보고치를 함께 참고했습니다.
반응형