- bitnet.cpp ของ Microsoft เป็น เฟรมเวิร์กการอนุมานอย่างเป็นทางการ สำหรับโมเดลภาษาขนาดใหญ่ (LLM) แบบ 1 บิต โดยรองรับ การอนุมานที่รวดเร็วและไม่สูญเสียคุณภาพ บน CPU และ GPU
- บน ARM CPU ทำได้ เร็วขึ้น 1.37~5.07 เท่า และ ลดการใช้พลังงาน 55.4~70% ส่วนบน x86 CPU ทำได้ เร็วขึ้น 2.37~6.17 เท่า และ ลดการใช้พลังงาน 71.9~82.2%
- เพิ่ม การใช้งานเคอร์เนลแบบขนานและการควอนไทซ์ embedding เพื่อมอบ ประสิทธิภาพเพิ่มขึ้นอีก 1.15~2.1 เท่า เมื่อเทียบกับเดิม
- สามารถรันโมเดล BitNet b1.58 ได้บน CPU เดียวที่ความเร็ว 5~7 โทเคนต่อวินาที ช่วยขยายความเป็นไปได้ในการใช้งาน โมเดลขนาดใหญ่มากบนเครื่องโลคัล
- พัฒนาบนพื้นฐานของ llama.cpp และ T-MAC มีส่วนช่วยขยายระบบนิเวศโอเพนซอร์สเพื่อ เพิ่มประสิทธิภาพการอนุมานของ LLM แบบบิตต่ำ
ภาพรวมของ bitnet.cpp
- bitnet.cpp เป็น เฟรมเวิร์กการอนุมานอย่างเป็นทางการ สำหรับ LLM แบบ 1 บิต (เช่น BitNet b1.58) โดยมี เคอร์เนลที่ปรับแต่งมาสำหรับ CPU และ GPU
- มีแผนจะเพิ่มการรองรับ NPU ในอนาคต
- รุ่นแรกเริ่มรองรับการอนุมานบน CPU และพิสูจน์แล้วว่าสามารถปรับปรุง ความเร็วและประสิทธิภาพพลังงาน ได้ทั้งบนสถาปัตยกรรม ARM และ x86
- ARM CPU: เร็วขึ้น 1.37~5.07 เท่า, ลดการใช้พลังงาน 55.4~70%
- x86 CPU: เร็วขึ้น 2.37~6.17 เท่า, ลดการใช้พลังงาน 71.9~82.2%
- สามารถรัน โมเดล BitNet b1.58 ขนาด 100B พารามิเตอร์ ได้บน CPU เดียวที่ความเร็ว 5~7 โทเคนต่อวินาที
การปรับแต่งล่าสุด
- มีการเพิ่ม การใช้งานเคอร์เนลแบบขนาน รวมถึงฟังก์ชัน การตั้งค่า tiling และการควอนไทซ์ embedding ทำให้ได้ ความเร็วเพิ่มขึ้นอีก 1.15~2.1 เท่า จากเดิม
- ยืนยันการปรับปรุงประสิทธิภาพบนแพลตฟอร์มฮาร์ดแวร์และเวิร์กโหลดที่หลากหลาย
- รายละเอียดเชิงเทคนิคเพิ่มเติมมีอยู่ในเอกสาร
optimization guide
เดโมและโมเดลทางการ
- มีเดโมการรัน โมเดล BitNet b1.58 3B บน Apple M2
- โมเดลทางการ BitNet-b1.58-2B-4T ถูกเผยแพร่บน Hugging Face และรองรับทั้ง x86 และ ARM CPU
- โมเดลที่รองรับประกอบด้วย bitnet_b1_58-large(0.7B), bitnet_b1_58-3B(3.3B), Llama3-8B-1.58, Falcon3, และซีรีส์ Falcon-E
การติดตั้งและการบิลด์
- ข้อกำหนด: Python 3.9 ขึ้นไป, CMake 3.22 ขึ้นไป, Clang 18 ขึ้นไป
- ผู้ใช้ Windows ต้องติดตั้ง Visual Studio 2022
- ผู้ใช้ Debian/Ubuntu มีสคริปต์ติดตั้งอัตโนมัติให้
- แนะนำให้ใช้สภาพแวดล้อม Conda และสามารถตั้งค่าสภาพแวดล้อมของโมเดลได้ด้วย
setup_env.py
- ดาวน์โหลดโมเดลจาก Hugging Face แล้วนำมารันจากพาธโลคัลได้
วิธีใช้งานและเบนช์มาร์ก
- ใช้
run_inference.py เพื่อรัน การอนุมานของโมเดลที่ถูกควอนไทซ์
- อาร์กิวเมนต์หลัก: พาธโมเดล(-m), พรอมป์ต์(-p), จำนวนเธรด(-t), ขนาดคอนเท็กซ์(-c), อุณหภูมิ(-temp)
- ใช้สคริปต์
e2e_benchmark.py เพื่อวัดประสิทธิภาพโดยกำหนด จำนวนโทเคน, ความยาวพรอมป์ต์, จำนวนเธรด ได้
- หากไม่มีโมเดลสาธารณะ สามารถใช้
generate-dummy-bitnet-model.py เพื่อ สร้างโมเดลจำลองแล้วทำเบนช์มาร์ก ได้
การแปลงโมเดลและ FAQ
- มีสคริปต์สำหรับแปลงเช็กพอยต์
.safetensors เป็น ฟอร์แมต gguf
- ใน FAQ มีคำแนะนำวิธีแก้ ข้อผิดพลาดการบิลด์ของ llama.cpp (เกี่ยวกับ std::chrono) และขั้นตอน ตั้งค่าสภาพแวดล้อม clang บน Windows
- ต้องเริ่มต้นสภาพแวดล้อมผ่าน Visual Studio Developer Command Prompt หรือ PowerShell
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
Microsoft จริง ๆ แล้วใช้ 2 บิต ไม่ใช่ 1.58 บิต
ในกรณีนี้สามารถแทนค่าได้ 4 ค่า คือ -1, 0, 1, 2
เมื่อพิจารณาว่าไซแนปส์แบบยับยั้งมีสัดส่วนอยู่ที่ 20~30% ก็เลยคิดว่าโครงสร้างแบบนี้ สอดคล้องกับโครงสร้างของสมองทางชีววิทยา ได้ดี
ฉันมักจะสงสัยว่า “LLM ที่มีฟังก์ชันขั้นต่ำ” จะมีหน้าตาแบบไหน
หมายถึงโมเดลที่มีข้อมูลติดตัวมาให้น้อยที่สุด แต่ยังให้คำตอบที่สมเหตุสมผลได้โดยอาศัยการค้น Google เติมส่วนที่ขาดเอา
ถ้าสถานที่อย่าง Encyclopedia Britannica ขายข้อมูลให้ LLM และให้บริการตรวจสอบผลลัพธ์ด้วย ก็น่าจะสร้างความแตกต่างได้มาก
Wikipedia ก็ดี แต่ก็น่าเสียดายที่มี ความผิดพลาดและอคติของมนุษย์ อยู่มาก
LLM ขนาดเล็กกำลังพัฒนาไปในทิศทางนี้อยู่แล้ว แม้จะขาดความรู้ทั่วไป แต่ ความสามารถในการใช้เครื่องมือ (เช่น การค้น Google) กำลังดีขึ้นเรื่อย ๆ
เพียงแต่การแยกให้ชัดว่าอะไรคือสิ่งที่ตัวเองรู้และไม่รู้ ก็ยังเป็นปัญหาที่ยากอยู่
คล้ายวิศวกรที่ไม่รู้จักอุปกรณ์บางอย่าง คือมีความสามารถในการแก้ปัญหา แต่ไม่มีความรู้เชิงรายละเอียด
ยังสงสัยว่าโมเดลแบบนี้จะแก้ได้ด้วยแค่การค้น Google หรือค้นในวิกิหรือไม่ แต่ สถาปัตยกรรม Edge LLM น่าจะกลายเป็นมาตรฐานในอนาคต
ยิ่งเป็นข้อมูลที่รวมอยู่ในชุดฝึก ก็ยิ่งค้นหาและตีความได้ง่าย
เพราะฉะนั้น การฝึกที่พึ่งพา หน่วยความจำภายนอก (เช่น การค้นหา) มากกว่าการท่องจำภายใน อาจใช้งานได้จริงกว่า
ฉันกลับคิดว่าจริง ๆ แล้วตรงกันข้าม
ตาม บทความต้นฉบับ (pdf) ต้องใช้พารามิเตอร์มากกว่าโมเดล fp16 ราว 4~5 เท่า
จะลอง build เองก็ได้ แต่เพราะต้องฝึกตั้งแต่ต้น ทางเลือกเลยมีจำกัด
ถึงอย่างนั้นก็คาดว่า ความเร็วในการอนุมาน น่าจะเร็วกว่ารุ่น quantization 4 บิต·8 บิตรุ่นล่าสุด
แก่นสำคัญจริง ๆ คือ ผลด้านการประหยัดพลังงาน
มีการบอกว่าสามารถลดลงได้ 70~82% ในการอนุมานบน CPU
ถ้าโมเดล 1 บิตดีพอ ในที่สุดก็อาจรัน LLM บนฮาร์ดแวร์ทั่วไปได้โดยไม่ต้องใช้ GPU ซึ่งจะเปลี่ยน ภูมิทัศน์ด้านการเข้าถึง ไปเลย
ถึงแม้ bitnet.cpp จะถูกบอกว่าเป็นเฟรมเวิร์กอนุมานทางการสำหรับ 1-bit LLM (อย่าง BitNet b1.58)
แต่ก็ยังมีความสับสนว่าเป็น “1 บิต” หรือ “1 trit” กันแน่
การใช้สองแนวคิดนี้ปนกันทำให้สับสน
ดีใจที่เห็นว่าโปรเจกต์นี้ยังพัฒนาต่อ
ปีที่แล้วฉันเห็นบทความที่เกี่ยวข้องแล้วรู้สึกว่ามันมีศักยภาพ แต่ก็เสียดายที่ไม่มีโมเดลใหม่ออกมา
สิ่งที่น่าสนใจจริง ๆ คือทิศทางของการ ฝึกโมเดลไบนารีโดยตรง โดยไม่ใช้การคำนวณแบบ floating point
มีงานวิจัยที่เกี่ยวข้องใน NeurIPS 2024
การบอกว่า “สามารถรัน 100B BitNet ได้” ไม่ได้หมายความว่ามีโมเดลนั้นอยู่จริง แต่หมายถึงมีเฟรมเวิร์กอนุมานที่รองรับได้
ต่อให้ค้นหา “1-bit 100b model” ก็ไม่มีโมเดลที่ดาวน์โหลดได้
คุณภาพเอาต์พุตของโมเดลใกล้เคียงกับ การพึมพำระดับ GPT-2 และยังวนย่อหน้าเดิมซ้ำ ๆ
ถึงขั้นนำ คำอ้างอิงปลอม อย่าง
(Jenkins, 2010)กลับมาใช้ซ้ำเรื่อย ๆชื่อเรื่องทำให้เข้าใจผิด
ที่จริงแล้วไม่ใช่โมเดล 100B ที่ฝึกเสร็จแล้ว แต่เป็น เฟรมเวิร์กอนุมานที่จัดการกับมันได้
ตอนนี้ฉันรันโมเดล quantized 70B บน M2 Max 96GB ด้วย llama.cpp + LiteLLM อยู่ และ แบนด์วิดท์หน่วยความจำ คือคอขวด
แนวทาง 1.58 บิตเป็น โครงสร้างที่เปลี่ยนการคูณเมทริกซ์ให้เป็นการบวก จึงมีแพตเทิร์นการคำนวณที่ต่างไปจากเดิมโดยพื้นฐานบน CPU
ถ้าสามารถรันโมเดลระดับ 100B ได้ที่ 5~7 โทเคนต่อวินาทีบน CPU คอร์เดียว มันจะเป็น จุดเปลี่ยนของการอนุมานบนอุปกรณ์
เฟรมเวิร์กพร้อมแล้ว และตอนนี้ก็เหลือแค่ ต้องมีใครสักคนฝึกโมเดลจริงขึ้นมา
ผลลัพธ์จริงยังน้อยเมื่อเทียบกับการประชาสัมพันธ์
แม้การฝึกจะยังต้องใช้ GPU อยู่ แต่ ฮาร์ดแวร์สำหรับงานอนุมาน อาจเรียบง่ายกว่ามาก
ฉันเคยใช้โมเดลที่ปล่อยออกมา 7 โทเคน/วินาที และมันให้ความรู้สึก อึดอัดเหมือนเดินตามคนที่เดินช้า
ในสภาพแวดล้อม local ควรตั้งเป้าอย่างน้อย 10 โทเคน/วินาทีขึ้นไป
คำสั่ง FMA (Fused Multiply-Add) บน CPU สมัยใหม่มี throughput แทบไม่ต่างจากการบวกธรรมดา
อยากรู้ว่าเมื่อไร PC ที่ติดตั้ง NPU จะเริ่มแสดงผลงานอย่างจริงจัง
AMD กำลังได้ผลลัพธ์ที่ดีจากเคอร์เนลอนุมานแบบไฮบริด NPU/iGPU
ถ้าโมเดลขนาดใหญ่พวกนี้รันบน NPU ได้ ประสิทธิภาพด้าน พลังงานต่อการประมวลผล ก็น่าจะดีกว่า CPU มาก
หลังจากนั้นก็กลายเป็นแฟนของ NPU ไปเลย แน่นอนว่ามันไม่ใช่ระดับ RTX 5090 แต่ก็มีประสิทธิภาพกว่าการใช้ CPU มาก
แม้อีโคซิสเต็มซอฟต์แวร์จะยังไม่นิ่ง แต่ก็ทำงานได้โดยที่ การใช้งาน CPU/GPU แทบเป็น 0
ฉันเข้าใจมาตลอดว่าพวกมันถูกออกแบบมาโดยเน้น พลังงานต่ำ เป็นหลัก