BitNet์€ 1-bit ๊ณ„์—ด LLM์„ CPU์™€ GPU์—์„œ ๋น ๋ฅด๊ณ  ํšจ์œจ์ ์œผ๋กœ ๋Œ๋ฆฌ๊ธฐ ์œ„ํ•œ ๊ณต์‹ ์ถ”๋ก  ํ”„๋ ˆ์ž„์›Œํฌ๋‹ค. ์š”์ฆ˜ ๋กœ์ปฌ LLM ํ๋ฆ„์ด ๋‹ค์‹œ ์„ธ์ง€๋Š” ๊ฐ€์šด๋ฐ, โ€œ์ž‘์€ ์–‘์žํ™” ์ตœ์ ํ™”โ€๊ฐ€ ์•„๋‹ˆ๋ผ ์•„์˜ˆ ์ €๋น„ํŠธ ์„ค๊ณ„๋ฅผ ์ œ๋Œ€๋กœ ํ™œ์šฉํ•˜๋Š” ์ชฝ์œผ๋กœ ์ฃผ๋ชฉ๋ฐ›๊ณ  ์žˆ๋‹ค.

์ด ๋ ˆํฌ๋Š” 10์œ„ ยท โญ +4.8K๋กœ ํšŒ์ž๋œ ํ”„๋กœ์ ํŠธ๋‹ค. ๋ณ„ ์ˆซ์ž๋งŒ ๋ณด๋ฉด ์œ ํ–‰์ฒ˜๋Ÿผ ๋ณด์ผ ์ˆ˜ ์žˆ์ง€๋งŒ, ์‹ค์ œ๋กœ๋Š” ๊ฐœ๋ฐœ์ž๋“ค์ด ์ง€๊ธˆ ์–ด๋””์— ์‹œ๊ฐ„์„ ์“ฐ๊ณ  ์žˆ๋Š”์ง€๋ฅผ ๊ฝค ์†”์งํ•˜๊ฒŒ ๋“œ๋Ÿฌ๋‚ธ๋‹ค. ์Šคํƒ€ ์ˆ˜๊ฐ€ ํญ๋ฐœ์ ์œผ๋กœ ํฌ์ง€ ์•Š์•„๋„ BitNet์ด 10์œ„์— ๋“ค์–ด์˜จ ๊ฑด ์ƒ์ง•์„ฑ์ด ํฌ๋‹ค. ๋‹ค๋“ค ๋” ํฐ ๋ชจ๋ธ๋งŒ ๋ณด๋˜ ํ๋ฆ„์—์„œ, ์ด์ œ๋Š” ๋กœ์ปฌ ์žฅ๋น„ยทCPUยท์ „๋ ฅ ํšจ์œจ์ด ๋‹ค์‹œ ์ค‘์š”ํ•œ ์งˆ๋ฌธ์ด ๋๋‹ค๋Š” ๋œป์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ํŠนํžˆ CPU ๋‹จ๋… 100B๊ธ‰ ๊ฐ€๋Šฅ์„ฑ, ์—๋„ˆ์ง€ ์ ˆ๊ฐ ์ˆ˜์น˜, ์ถ”๊ฐ€ ์ตœ์ ํ™” ์†Œ์‹์ด ๊ฐœ๋ฐœ์ž ํ˜ธ๊ธฐ์‹ฌ์„ ๊ฐ•ํ•˜๊ฒŒ ์ž๊ทนํ•œ๋‹ค.

flowchart LR
A[๋ฌธ์ œ] --> B[bitnet]
B --> C[์„ค์น˜]
C --> D[์ตœ์†Œ ์‹คํ—˜]
D --> E[์—…๋ฌด ์ ์šฉ ํŒ๋‹จ]

์น ํŒ ํŒ์„œํ˜• ์น˜ํŠธ์‹œํŠธ

  • ์ด ๋ ˆํฌ์˜ ํ•œ ์ค„ ํ‚ค์›Œ๋“œ๋Š” bitnet๋‹ค.
  • ์ด๋ฒˆ ๋ณด๊ฐ•์—์„œ๋Š” ์„ค์น˜์™€ ์‚ฌ์šฉ ์ˆœ์„œ๋ฅผ ๊ณต์‹ README ๊ธฐ์ค€์œผ๋กœ ๋” ์ด˜์ด˜ํ•˜๊ฒŒ ์ •๋ฆฌํ–ˆ๋‹ค.
  • ์ฝ์„ ๋•Œ๋Š” ์ „์ œ ์กฐ๊ฑด โ†’ ์„ค์น˜ โ†’ ์ฒซ ์‹คํ–‰ โ†’ ๊ฒ€์ฆ ์ˆœ์„œ๋กœ ๋ณด๋ฉด ๋œ๋‹ค.
  • โ€œ๋Œ€๋‹จํ•ด ๋ณด์ธ๋‹คโ€๋ณด๋‹ค โ€œ๋‚ด ์—…๋ฌด์—์„œ ๋ฐ˜๋ณต ๋น„์šฉ์„ ์ค„์ด๋Š”๊ฐ€โ€๋ฅผ ๋จผ์ € ๋ณธ๋‹ค.

์ด ๋ ˆํฌ๋ฅผ ํ•œ ์ค„๋กœ ๋ณด๋ฉด

BitNet์€ 1-bit ๊ณ„์—ด LLM์„ CPU์™€ GPU์—์„œ ๋น ๋ฅด๊ณ  ํšจ์œจ์ ์œผ๋กœ ๋Œ๋ฆฌ๊ธฐ ์œ„ํ•œ ๊ณต์‹ ์ถ”๋ก  ํ”„๋ ˆ์ž„์›Œํฌ๋‹ค. ์š”์ฆ˜ ๋กœ์ปฌ LLM ํ๋ฆ„์ด ๋‹ค์‹œ ์„ธ์ง€๋Š” ๊ฐ€์šด๋ฐ, โ€œ์ž‘์€ ์–‘์žํ™” ์ตœ์ ํ™”โ€๊ฐ€ ์•„๋‹ˆ๋ผ ์•„์˜ˆ ์ €๋น„ํŠธ ์„ค๊ณ„๋ฅผ ์ œ๋Œ€๋กœ ํ™œ์šฉํ•˜๋Š” ์ชฝ์œผ๋กœ ์ฃผ๋ชฉ๋ฐ›๊ณ  ์žˆ๋‹ค.

์™œ ์ง€๊ธˆ ์ด ๋ ˆํฌ๊ฐ€ ๋œจ๋Š”๊ฐ€

์Šคํƒ€ ์ˆ˜๊ฐ€ ํญ๋ฐœ์ ์œผ๋กœ ํฌ์ง€ ์•Š์•„๋„ BitNet์ด 10์œ„์— ๋“ค์–ด์˜จ ๊ฑด ์ƒ์ง•์„ฑ์ด ํฌ๋‹ค. ๋‹ค๋“ค ๋” ํฐ ๋ชจ๋ธ๋งŒ ๋ณด๋˜ ํ๋ฆ„์—์„œ, ์ด์ œ๋Š” ๋กœ์ปฌ ์žฅ๋น„ยทCPUยท์ „๋ ฅ ํšจ์œจ์ด ๋‹ค์‹œ ์ค‘์š”ํ•œ ์งˆ๋ฌธ์ด ๋๋‹ค๋Š” ๋œป์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ํŠนํžˆ CPU ๋‹จ๋… 100B๊ธ‰ ๊ฐ€๋Šฅ์„ฑ, ์—๋„ˆ์ง€ ์ ˆ๊ฐ ์ˆ˜์น˜, ์ถ”๊ฐ€ ์ตœ์ ํ™” ์†Œ์‹์ด ๊ฐœ๋ฐœ์ž ํ˜ธ๊ธฐ์‹ฌ์„ ๊ฐ•ํ•˜๊ฒŒ ์ž๊ทนํ•œ๋‹ค.

๋ ˆํฌ ์•ˆ์—์„œ ๋จผ์ € ๋ณผ ๊ฒƒ

  • 1.58-bit ๋ชจ๋ธ์šฉ bitnet.cpp ์ถ”๋ก  ์ปค๋„
  • x86๊ณผ ARM CPU์—์„œ์˜ ์†๋„ยท์ „๋ ฅ ํšจ์œจ ์ตœ์ ํ™”
  • Hugging Face ๋ชจ๋ธ๊ณผ GPU ์ปค๋„, ๊ธฐ์ˆ  ๋ณด๊ณ ์„œ๊นŒ์ง€ ํ•จ๊ป˜ ๊ณต๊ฐœํ•˜๋Š” ์ƒํƒœ๊ณ„

์„ค์น˜ ์ „์— ํ™•์ธํ•  ๊ฒƒ

  • python 3.9 ์ด์ƒ
  • cmake 3.22 ์ด์ƒ
  • clang 18 ์ด์ƒ
  • conda ๊ถŒ์žฅ
  • Windows๋ฉด VS2022 Developer Prompt ๊ถŒ์žฅ

์„ค์น˜ ๋ฐฉ๋ฒ•

๊ณต์‹ ํ™•์ธ ๋งํฌ

๋นŒ๋“œ ์ค€๋น„

Debian/Ubuntu ๊ณ„์—ด์ด๋ฉด clang ์ž๋™ ์„ค์น˜ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์“ธ ์ˆ˜ ์žˆ๋‹ค.

bash -c "$(wget -O - https://apt.llvm.org/llvm.sh)"

Windows๋Š” Visual Studio 2022์—์„œ C++/CMake/Clang ๋„๊ตฌ๋ฅผ ์ผ  ๋’ค Developer Command Prompt ๋˜๋Š” PowerShell์„ ์“ฐ๋Š” ๊ฒƒ์„ README๊ฐ€ ๊ฐ•ํ•˜๊ฒŒ ๊ถŒ์žฅํ•œ๋‹ค.

์†Œ์Šค์—์„œ ์„ค์น˜

git clone --recursive https://github.com/microsoft/BitNet.git
cd BitNet
conda create -n bitnet-cpp python=3.9
conda activate bitnet-cpp
pip install -r requirements.txt

๊ทธ๋‹ค์Œ ๋ชจ๋ธ์„ ๋‚ด๋ ค๋ฐ›๊ณ  ํ™˜๊ฒฝ์„ ์žก๋Š”๋‹ค.

huggingface-cli download microsoft/BitNet-b1.58-2B-4T-gguf --local-dir models/BitNet-b1.58-2B-4T
python setup_env.py -md models/BitNet-b1.58-2B-4T -q i2_s

setup_env.py๋Š” ๋ชจ๋ธ ๊ฒฝ๋กœ(-md)์™€ ์–‘์žํ™” ํƒ€์ž…(-q)์„ ๋ฐ›๋Š”๋‹ค.

์„ค์น˜ ํ™•์ธ

  • ์ง€์› ๋ชจ๋ธ์ด ํ˜„์žฌ CPU ์•„ํ‚คํ…์ฒ˜์™€ ๋งž๋Š”์ง€ ํ‘œ๋ฅผ ๋จผ์ € ํ™•์ธํ•œ๋‹ค.
  • ๊ณต์‹ 2B ๋ชจ๋ธ๋กœ ๊ฐ€์žฅ ๋จผ์ € ์‹œ์ž‘ํ•˜๋Š” ํŽธ์ด ์•ˆ์ „ํ•˜๋‹ค.

์‚ฌ์šฉ ๋ฐฉ๋ฒ•

  1. ๊ธฐ๋ณธ ์‚ฌ์šฉ์€ quantized model ํŒŒ์ผ ๊ฒฝ๋กœ๋ฅผ ์ง€์ •ํ•ด ์ถ”๋ก ์„ ๋Œ๋ฆฌ๋Š” ๋ฐฉ์‹์ด๋‹ค.
  2. ์ฒซ ํ”„๋กฌํ”„ํŠธ๋Š” ์งง๊ฒŒ ์žก๊ณ , thread ์ˆ˜์™€ context size๋ฅผ ๊ธฐ๋ณธ๊ฐ’์—์„œ ํฌ๊ฒŒ ๊ฑด๋“œ๋ฆฌ์ง€ ์•Š๋Š”๋‹ค.
  3. ๊ทธ๋‹ค์Œ ๋ฒค์น˜๋งˆํฌ ์Šคํฌ๋ฆฝํŠธ๋กœ ์†๋„์™€ ํ’ˆ์งˆ์„ ๊ฐ™์ด ๋ณธ๋‹ค.
  4. ์ดํ›„์—์•ผ ๋” ํฐ ๋ชจ๋ธ์ด๋‚˜ ๋‹ค๋ฅธ ์–‘์žํ™” ํƒ€์ž…์„ ๋น„๊ตํ•œ๋‹ค.

๊ณต์‹ README์˜ ๊ธฐ๋ณธ ์ถ”๋ก  ์˜ˆ์‹œ๋Š” ์•„๋ž˜๋‹ค.

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

์ฃผ์š” ์˜ต์…˜์€ -m(๋ชจ๋ธ ๊ฒฝ๋กœ), -p(ํ”„๋กฌํ”„ํŠธ), -t(threads), -c(context size), -cnv(chat ๋ชจ๋“œ)๋‹ค. ๋ฒค์น˜๋งˆํฌ๋Š” ์•„๋ž˜์ฒ˜๋Ÿผ ๋Œ๋ฆด ์ˆ˜ ์žˆ๋‹ค.

python utils/e2e_benchmark.py -m /path/to/model -n 200 -p 256 -t 4

์–ด๋””์— ๋ฐ”๋กœ ์จ๋จน์„ ์ˆ˜ ์žˆ๋‚˜

์‚ฌ๋ก€ A. ๋กœ์ปฌ ์ถ”๋ก  ์‹คํ—˜

GPU๊ฐ€ ๋„‰๋„‰ํ•˜์ง€ ์•Š์€ ํ™˜๊ฒฝ์—์„œ ๋กœ์ปฌ LLM์„ ๋ถ™์—ฌ๋ณด๊ณ  ์‹ถ๋‹ค๋ฉด BitNet ๊ณ„์—ด์€ ๋งค์šฐ ํฅ๋ฏธ๋กญ๋‹ค. ํŠนํžˆ CPU ๊ธฐ๋ฐ˜ ์ถ”๋ก  ๊ฐ€๋Šฅ์„ฑ์€ ์‚ฌ๋‚ด ๋ณด์•ˆ ํ™˜๊ฒฝ์ด๋‚˜ ์—ฃ์ง€ ์žฅ๋น„ ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ ์˜๋ฏธ๊ฐ€ ํฌ๋‹ค.

์‚ฌ๋ก€ B. ๋น„์šฉ ๋ฏผ๊ฐํ•œ ์ถ”๋ก  ์„œ๋น„์Šค

ํ•ญ์ƒ ์ตœ๊ณ  ์„ฑ๋Šฅ ๋ชจ๋ธ์ด ํ•„์š”ํ•˜์ง€ ์•Š์€ ์—…๋ฌด๋ผ๋ฉด, ์ €๋น„ํŠธ ๋ชจ๋ธ์˜ ์†๋„์™€ ์—๋„ˆ์ง€ ์ ˆ๊ฐ์€ ์ง์ ‘์ ์ธ ์šด์˜ ๋น„์šฉ ์ ˆ๊ฐ์œผ๋กœ ์ด์–ด์งˆ ์ˆ˜ ์žˆ๋‹ค. ๋‹ค๋งŒ ํ’ˆ์งˆ๊ณผ ์ง€์› ๋ชจ๋ธ ๋ฒ”์œ„๋ฅผ ํ•จ๊ป˜ ๋ด์•ผ ํ•œ๋‹ค.

์ฒ˜์Œ ํ•ด๋ณผ ์ตœ์†Œ ์‹คํ—˜

  1. ๊ณต์‹ 2B ๋ชจ๋ธ์„ Hugging Face์—์„œ ๋‚ด๋ ค๋ฐ›๋Š”๋‹ค.
  2. setup_env.py๋กœ ํ™˜๊ฒฝ์„ ์žก๋Š”๋‹ค.
  3. run_inference.py๋กœ ์งง์€ ์‹œ์Šคํ…œ ํ”„๋กฌํ”„ํŠธ ํ•˜๋‚˜๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.
  4. ๊ฐ™์€ ํ”„๋กฌํ”„ํŠธ๋กœ ๊ธฐ์กด ๋กœ์ปฌ ์Šคํƒ๊ณผ ์†๋„ยทํ’ˆ์งˆยท์ „๋ ฅ ์†Œ๋ชจ๋ฅผ ๋น„๊ตํ•œ๋‹ค.

๊ฒ€์ฆ ํฌ์ธํŠธ๋Š” ๊ฐ„๋‹จํ•˜๋‹ค. ๋ฒค์น˜๋งˆํฌ ์ˆซ์ž๋งŒ ๋ณด์ง€ ๋ง๊ณ , ์‹ค์ œ ๋‚ด ์—…๋ฌด ํ”„๋กฌํ”„ํŠธ์—์„œ ์ดˆ๋‹น ํ† ํฐ ์ˆ˜์™€ ๊ฒฐ๊ณผ ํ’ˆ์งˆ์ด ์–ด๋””๊นŒ์ง€ ์œ ์ง€๋˜๋Š”์ง€ ๊ฐ™์ด ์ธก์ •ํ•ด์•ผ ํ•œ๋‹ค.

๋ณผ ๋•Œ ์ฃผ์˜ํ•  ์ 

  • ๋ชจ๋“  ๋ชจ๋ธ์„ BitNet์ฒ˜๋Ÿผ ๋ฐ”๋กœ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค.
  • ์„ค์น˜ ์š”๊ตฌ์‚ฌํ•ญ๊ณผ ๋นŒ๋“œ ๋„๊ตฌ ์ฒด์ธ์ด ๋งŒ๋งŒ์น˜ ์•Š๋‹ค.
  • ์ €๋น„ํŠธ ํšจ์œจ์ด ์ข‹์•„๋„ ์—…๋ฌด ํ’ˆ์งˆ์ด ๋–จ์–ด์ง€๋ฉด ์ „์ฒด ๋น„์šฉ ์ ˆ๊ฐ ํšจ๊ณผ๊ฐ€ ์‚ฌ๋ผ์ง„๋‹ค.

๋‹ค์Œ ์ฝ๊ธฐ

์ด ๊ธ€์€ AI๋ฅผ ํ™œ์šฉํ•ด ์ดˆ์•ˆ์„ ์ •๋ฆฌํ–ˆ๊ณ , GitHub README์™€ ๊ณต์‹ ๋งํฌ๋ฅผ ๋‹ค์‹œ ํ™•์ธํ•ด ์‹ค๋ฌด ์ ์šฉ ๊ด€์ ์œผ๋กœ ํ’€์–ด์ผ๋‹ค.