Post

1-bit의 마법, 곱셈을 버리고 덧셈을 택하다: Microsoft BitNet b1.58 아키텍처 딥다이브

1-bit의 마법, 곱셈을 버리고 덧셈을 택하다: Microsoft BitNet b1.58 아키텍처 딥다이브

1-bit의 마법, 곱셈을 버리고 덧셈을 택하다: Microsoft BitNet b1.58 아키텍처 딥다이브

1. The Hook: “GPU 좀 더 사주세요…” 끝나지 않는 비용의 굴레

안녕하세요. 최근에 서버실이나 클라우드 비용 청구서 보고 뒷목 한 번씩 잡아보셨나요? 💸 10년 차 백엔드 개발자이자 아키텍트로 현업에서 구르면서 참 많은 기술의 흥망성쇠를 봤지만, 요새처럼 ‘하드웨어 스펙’이 모든 걸 압도하는 시기는 처음인 것 같습니다. “우리 서비스에도 LLM을 도입합시다!”라는 기획팀의 해맑은 외침 뒤에는, A100이나 H100 같은 천문학적인 가격의 GPU를 몇 장이나 태워야 하는지 계산하며 절망하는 우리 엔지니어들의 깊은 한숨이 서려 있죠.

특히 모델의 파라미터가 7B, 13B를 넘어 70B, 심지어 MoE(Mixture of Experts) 방식을 채택하며 수백 B까지 덩치를 키우는 걸 보면서 개발자로서 묘한 회의감이 들더라고요. ‘언제까지 모델 크기와 GPU 메모리만 무식하게 늘려야 할까? 이게 과연 지속 가능한 아키텍처일까?’ 하드웨어의 무력 발전이 소프트웨어의 비효율성을 멱살 잡고 끌고 가는 이 기형적인 ‘Scale 웩’ 트렌드 속에서, 오늘 딥다이브할 Microsoft의 BitNet (특히 b1.58)은 제가 오랜만에 만난, 진짜 ‘사람 냄새 나는 소프트웨어적 혁신’이었습니다.

2. TL;DR (The Core)

“LLM의 가장 무겁고 비싼 연산인 행렬 곱셈(MatMul)을 완전히 제거하고, 가중치를 단 3개의 값 {-1, 0, 1}으로 압축하여 덧셈만으로 추론을 가능하게 한 극단적 효율의 1.58비트 아키텍처.”

3. Deep Dive: Under the Hood (진짜 병목을 부수다)

파라미터 다이어트, 왜 하필 1.58비트인가?

이 프로젝트의 코어 로직을 뜯어보기 전에, 우리가 LLM을 서빙할 때 왜 그렇게 느리고 전기를 많이 먹는지 진짜 병목 지점(Bottleneck)을 명확히 알아야 합니다. 흔히 연산 장치(Compute)가 느리다고 오해하지만, 사실 대부분의 추론 지연은 메모리 대역폭(Memory Bandwidth)의 벽에서 발생합니다. HBM(고대역폭 메모리)에서 GPU 내부의 SRAM으로 무거운 가중치(Weight) 데이터를 퍼 나르는 속도가, GPU가 계산하는 속도를 도저히 못 따라가는 현상이죠.

기존의 주류 모델들은 FP16(16비트 부동소수점)을 씁니다. 가중치 파라미터 하나당 16비트의 메모리를 꽉꽉 채워 차지하죠. BitNet 연구진은 이걸 극단적으로 줄이기로 마음먹습니다. 초기 연구에서는 1비트 {-1, 1}만 시도하다가, 성능 저하를 막기 위해 아주 우아한 타협점을 찾아냅니다. 바로 ‘0’을 포함한 {-1, 0, 1}의 3진법(Ternary) 가중치입니다. 정보 이론상 통계적으로 $\log_2(3) \approx 1.58$비트가 되기 때문에 ‘b1.58’이라는 매력적인 이름이 붙었습니다.

곱셈을 버리다: 하드웨어적 관점의 패러다임 전환

기존 Transformer 아키텍처의 선형 레이어(Linear Layer)는 기본적으로 행렬 곱셈의 연속입니다. 입력된 활성화 값(Activation)과 가중치를 끝없이 ‘곱하고 더하는(MAC)’ 연산이죠. 이 곱셈 연산은 하드웨어 수준에서 실리콘 면적도 엄청나게 차지하고, 발생시키는 열과 전력 소모도 큽니다.

그런데 가중치 값이 오직 {-1, 0, 1}밖에 없다면 어떤 마법이 일어날까요?

  • 가중치가 1이면: 입력값을 그냥 더합니다.
  • 가중치가 -1이면: 입력값을 뺍니다.
  • 가중치가 0이면: 아무것도 안 합니다 (연산 자체를 스킵).

네, 무겁고 비싼 곱셈이 아예 사라집니다. 이 차이는 아키텍처 관점에서 엄청난 혁명입니다. 아래 비교표를 보면 그 차이가 명확해집니다.

아키텍처 비교기존 FP16 TransformerBitNet b1.58
가중치(Weight) 정밀도16-bit (Float16)1.58-bit (Ternary: -1, 0, 1)
핵심 연산 방식행렬 곱셈 (MatMul)덧셈 및 뺄셈 (Addition)
메모리 대역폭 요구량매우 높음 (병목의 주원인)극도로 낮음 (기존 대비 최대 1/10 수준)
에너지 효율(7B 기준)기준점 (Base)약 70% 이상 전력 소모 절감

이해를 돕기 위해 BitLinear 레이어가 내부적으로 어떻게 동작하는지 PyTorch 스타일의 수도 코드(Pseudo-code)로 살펴보죠.

1
2
3
4
5
6
7
8
9
10
11
12
# BitLinear 레이어의 개념적 이해를 위한 핵심 로직
class BitLinear(nn.Module):
    def forward(self, x):
        # 1. 입력 활성화 값(Activation)을 8-bit로 양자화 (absmax 기반)
        x_quant = quantize_activations_to_int8(x)
        
        # 2. Weight는 사전에 학습된 {-1, 0, 1} 상태 (양자화 과정 생략)
        # 3. 핵심: 곱셈 기호(*)가 없습니다. 내부적으로 덧셈/뺄셈 커널만 호출
        out = custom_add_sub_only_matmul(x_quant, self.weight)
        
        # 4. 양자화 과정에서 잃어버린 스케일링 팩터 복원(De-quantization)
        return out * (self.weight_scale * x_scale)

특히 여기서 ‘0’이라는 값이 주는 희소성(Sparsity)의 마법은 매우 놀랍습니다. 불필요한 특징(Feature)이나 노이즈를 명시적으로 필터링할 수 있는 ‘스위치’ 역할을 해주어, 순수 1비트 모델이 겪었던 치명적인 성능 저하(Perplexity 상승)를 완벽하게 방어해 냅니다. 실제로 BitNet b1.58 논문 결과를 보면, 동일 파라미터 크기의 LLaMA 모델과 비교했을 때 언어 이해 능력과 다운스트림 태스크 성능이 거의 동일합니다.

4. Hands-on / Pragmatic Use Cases

‘아키텍처가 훌륭한 건 알겠고, 그래서 이 기술을 당장 내 프로젝트에 어떻게 써먹을 수 있는데?’ 현업 개발자라면 당연히 던질 질문이죠.

  1. 진정한 온디바이스(On-device) AI의 실현 지금도 스마트폰이나 엣지 디바이스에서 NPU를 이용해 소형 모델을 구동하고 있지만, 높은 발열과 배터리 광탈 문제는 여전히 해결되지 않았습니다. BitNet의 ‘메모리 다이어트 + 덧셈 기반 연산’ 아키텍처는 스마트폰은 물론, 라즈베리 파이(Raspberry Pi)나 메모리가 극도로 제한된 스마트홈 IoT 칩셋 환경에서도 7B 수준의 준수한 LLM을 로컬로 구동할 수 있는 길을 엽니다. 서버 통신 없이 사용자 민감 데이터를 로컬에서 처리하는 개인화 AI 비서 개발에 안성맞춤입니다.

  2. 초거대 컨텍스트(Long-context) 처리 모델 구축 서버 환경에서도 이점은 명확합니다. 모델 파라미터가 차지하는 메모리 풋프린트가 압도적으로 작다는 것은, 남는 VRAM을 전부 KV Cache(컨텍스트 윈도우)에 쏟아부을 수 있다는 뜻입니다. 기업 내 문서 수백 장, 혹은 수십만 줄의 코드를 한 번에 읽고 분석해야 하는 사내 QA 봇을 구축할 때, 훨씬 저렴한 서버 비용으로 100K 이상의 컨텍스트를 거뜬히 처리하는 시스템을 설계할 수 있습니다.

5. Honest Review: 진짜 장단점과 뼈아픈 트레이드오프

기술 칼럼니스트로서 논문 데이터만 보고 칭찬만 늘어놓을 순 없겠죠. 현업에 이 기술의 도입을 검토하신다면 아래의 매우 현실적이고 뼈아픈 장벽들을 반드시 인지하셔야 합니다.

  • 환상적인 덧셈 연산? 지금 당장 내 GPU에선 무용지물일 수도 우리가 주로 사용하는 NVIDIA GPU의 Tensor Core는 철저하게 FP16이나 INT8의 ‘행렬 곱셈’을 극단적으로 빠르게 하도록 하드웨어 적으로 깎여 있는 괴물입니다. 즉, 덧셈 전용 하드웨어가 아닙니다. 따라서 BitNet 전용으로 로우 레벨에서 작성된 최적화된 CUDA 커널(Custom Kernel)이나, CPU/NPU용 특화 커널을 직접 포팅하지 않으면, 순정 PyTorch 위에서는 오히려 에뮬레이션 오버헤드 때문에 일반 모델보다 추론이 느려지는 기현상을 겪을 수 있습니다. 하드웨어 생태계가 아직 이 소프트웨어 혁신을 완벽히 받쳐주지 못하고 있다는 뜻입니다.

  • 처음부터 다시 학습(Train from Scratch)해야 하는 거대한 진입장벽 가장 치명적인 단점입니다. 기존 오픈소스 생태계에 넘쳐나는 훌륭한 FP16 모델들(Llama 3, Mistral 등)의 가중치를 가져다가 LoRA나 사후 양자화(PTQ) 기법으로 살짝 깎아서 1.58비트로 만들면 참 좋겠지만, 그렇게 하면 모델 구조상 치명적인 성능 하락이 발생합니다. 가중치 초기화 단계부터 {-1, 0, 1} 환경을 깊게 가정하고, 처음부터 막대한 컴퓨팅 파워와 말뭉치(Corpus)를 들여 프리트레이닝(Pre-training)을 해야 제 성능이 나옵니다. 자본력과 인프라가 부족한 중소규모 기업이나 개인 개발자에게는 이 학습 비용 자체가 도저히 넘을 수 없는 거대한 허들입니다.

6. Closing Thoughts: 우리의 스탠스

그럼에도 불구하고 Microsoft의 BitNet b1.58은 단순히 ‘가벼운 모델 하나 나왔네’ 수준의 가십거리가 아닙니다. 이것은 AI 발전의 패러다임이 ‘무식하게 큰 하드웨어 때려 박기’에서 ‘지능적인 알고리즘과 아키텍처의 근본적 혁신’으로 회귀하고 있다는 아주 강력한 시그널입니다.

비록 당장 내일 상용 서비스의 메인 파이프라인에 BitNet을 올리기는 시기상조일 수 있습니다. 하지만 오픈소스 커뮤니티는 이미 Groq 같은 전용 LPU나 차세대 커스텀 NPU에 이 1.58비트 아키텍처를 올리는 시도를 미친 듯이 하고 있죠. 10년 뒤 우리가 이 시기를 돌아본다면, “아, 그때가 전기를 하마처럼 먹던 GPU의 행렬 곱셈 독재가 서서히 무너지고, 소프트웨어 효율성이 다시 왕좌를 되찾기 시작한 분기점이었지”라고 회상하게 될지도 모르겠습니다.

매일같이 새로운 논문과 프레임워크가 쏟아져 피곤한 시대이기도 하지만, 개발자로서 이런 우아하고 파괴적인 아키텍처를 뜯어보는 재미야말로 우리가 이 험난한 업계에서 롱런할 수 있는 원동력이 아닐까요? 오늘 동료들과 커피 한 잔 하시면서, 이 작고 경이로운 ‘덧셈의 마법’이 가져올 생태계의 변화를 한 번 진지하게 상상해 보시길 권합니다.

References

  • https://arxiv.org/abs/2402.17764
  • https://github.com/microsoft/BitNet
This post is licensed under CC BY 4.0 by the author.