17. októbra 2024 Microsoft oznámil BitNet.cppinferenčný rámec navrhnutý na spustenie 1-bitových kvantovaných veľkých jazykových modelov (LLM). BitNet.cpp predstavuje významný pokrok v generácii AI, ktorý umožňuje efektívne nasadenie 1-bitových LLM na štandardných CPU bez potreby drahých GPU. Tento vývoj demokratizuje prístup k LLM, sprístupňuje ich na širokej škále zariadení a poskytuje nové možnosti v aplikáciách AI na zariadení.
Pochopenie 1-bitových veľkých jazykových modelov
Veľké jazykové modely (LLM) tradične vyžadujú značné výpočtové zdroje kvôli používaniu vysoko presných čísel s pohyblivou rádovou čiarkou (zvyčajne FP16 alebo BF16) pre váhy modelov. Táto nevyhnutnosť spôsobila, že nasadenie LLM je drahé a energeticky náročné.
1-bitové LLM vo svojom jadre používajú extrémne kvantizačné techniky na reprezentáciu modelových váh pomocou iba troch možných hodnôt: -1, 0 a 1, odtiaľ termín „1,58-bit“ (keďže na zakódovanie troch štáty).
Systém ternárnych váh
Koncept
1-bitová kvantizácia v BitNet.cpp je ternárny váhový systém. BitNet pracuje len s tromi možnými hodnotami pre každý parameter:
- -1 (negatívne)
- 0 (neutrálne)
- 1 (pozitívne)
To má za následok požiadavku na pamäť okolo 1,58 bitov na parameter, odtiaľ názov BitNet b1.58. Toto drastické zníženie bitovej šírky parametra vedie k pôsobivému zníženiu využitia pamäte a výpočtovej zložitosti, pretože väčšina násobení s pohyblivou rádovou čiarkou je nahradená jednoduchým sčítaním a odčítaním.
Matematický základ
1-bitová kvantizácia zahŕňa transformáciu váh a aktivácií na ich ternárne zobrazenie prostredníctvom nasledujúcich krokov:
1. Binarizácia hmotnosti
Binarizácia váh zahŕňa ich centralizáciu okolo priemeru (α
), čo má za následok ternárne zastúpenie. Transformácia je matematicky vyjadrená ako:
Wf=Podpísať(W−a)
kde:
- W je pôvodná hmotnostná matica.
- a je priemer váh.
- Podpísať (x) sa vracia +1 ak x > 0 a -1 inak.
2. Aktivácia Kvantizácia
Kvantovanie aktivácií zaisťuje, že vstupy sú obmedzené na špecifikovanú bitovú šírku:
kde:
- Qb = 2(b-1)2^{(b-1)} je maximálna úroveň kvantizácie pre b-bitová šírka.
- c je maximálna absolútna hodnota x (označené ako ∣∣x∣∣∞).
- e je malé číslo, aby sa zabránilo pretečeniu počas výpočtov.
3. BitLinear Operation
BitLinear vrstva nahrádza tradičné maticové násobenia zjednodušenou operáciou:
r=Wf×x^e×(Qbbc)
kde:
- b je škálovací faktor používaný na minimalizáciu aproximačných chýb.
- c škáluje aktivácie.
- Q_b je kvantizačný faktor.
Táto transformácia umožňuje efektívne výpočty pri zachovaní výkonu modelu.
Výkonnostné dôsledky
Efektivita pamäte
Systém trojitého závažia výrazne znižuje nároky na pamäť:
- Tradičné LLM: 16 bitov na hmotnosť
- BitNet.cpp: 1,58 bitov na hmotnosť
Toto zníženie znamená úsporu pamäte približne 90 % v porovnaní s tradičnými 16-bitovými modelmi, vďaka čomu sa väčšie modely zmestia do rovnakých hardvérových obmedzení.
1. Rýchlosť odvodenia: Rýchlejšia na oboch CPU
Inferenčná rýchlosť je reprezentovaný ako počet tokenov spracovaných za sekundu. Tu je rozpis pozorovaní:
- Na Apple M2 Ultra: BitNet.cpp dosahuje až 5,07x zrýchlenie pre väčšie modely (30B) v porovnaní s Llama.cpp so špičkovou rýchlosťou 593,43 tokenov za sekundu pre model 125M, čo je a 1,37x zrýchlenie. V prípade väčších modelov, ako sú 3.8B a 7B, BitNet.cpp udržiava rýchlosť nad 84,77 tokenov za sekundu, čo ukazuje svoju efektivitu naprieč škálami.
- Na Intel i7-13700H: BitNet.cpp dosahuje ešte výraznejšie vylepšenia rýchlosti. Pri veľkosti modelu 7B poskytuje BitNet.cpp neuveriteľné 5,68x zrýchlenie v porovnaní s Llama.cpp. Pre menšie modely ako 125M spracuje 389,08 tokenov za sekundučo je 2,37x rýchlejšie ako Llama.cpp.
2. Energetická účinnosť: Zmena hry pre zariadenia Edge
Poskytnuté grafy tiež zahŕňajú porovnanie nákladov na energiučo ukazuje výrazné zníženie spotreby energie na jeden spracovaný token:
- Na Apple M2 Ultra: Úspory energie BitNet.cpp sú značné. Pri modeli 700M spotrebuje O 55,4 % menej energie na token v porovnaní s Llama.cpp, z ktorého klesá 0,314 až 0,140. Tento trend pokračuje aj pri väčších modeloch, pričom model 70B ukazuje a 70,0% zníženie spotreby energie.
- Na Intel i7-13700H: BitNet.cpp prináša Úspora energie 71,9 %. pre model 700M, s poklesom spotreby 1,367 do 0,384. Hoci energetické údaje pre model 70B v Llama.cpp nie sú k dispozícii, BitNet.cpp zostáva efektívny, so spotrebou energie 17.33 pre model 70B.
3. Prekročenie benchmarku rýchlosti ľudského čítania
Jedným z najzaujímavejších poznatkov z týchto grafov je odkaz na rýchlosť ľudského čítaniaoznačené o 5-7 žetónov za sekundu. Táto červená čiara ukazuje, že obe implementácie, najmä BitNet.cpp, môžu pohodlne prekonať rýchlosť ľudského čítania aj pri tých najväčších modeloch:
- Zapnuté Apple M2 UltraBitNet.cpp prekonáva rýchlosť ľudského čítania pre všetky veľkosti modelov, pričom najnižšia je rýchlosť 8,67 tokenov za sekundu pre model 70B.
- Zapnuté Intel i7-13700Hmodel 100B stále dosahuje 1,70 tokenov za sekundupričom sa takmer dotýka spodného rozsahu rýchlosti ľudského čítania, pričom všetky menšie modely tento štandard prekonávajú.
Úvahy o školení
Priamy odhad (STE)
Keďže 1-bitová kvantizácia zavádza nediferencovateľné funkcie, tréning zahŕňa špecializovanú techniku známu ako Priamy odhad (STE). V tomto prístupe gradienty tečú nezmenené cez nediferencovateľné body. Tu je zjednodušená implementácia v Pythone:
class StraightThroughEstimator(Function): @staticmethod def forward(ctx, input): return input.sign() @staticmethod def backward(ctx, grad_output): return grad_output
Zmiešaný presný tréning
Na udržanie stability počas tréningu, zmiešaná presnosť je zamestnaný:
- Váhy a aktivácie: Kvantované s 1-bitovou presnosťou.
- Prechody a stavy optimalizátora: Uložené s vyššou presnosťou.
- Latentné závažia: Udržiavané vo vysokej presnosti, aby sa uľahčili presné aktualizácie počas tréningu.
Veľká stratégia miery učenia
Jedinečnou výzvou pri 1-bitových modeloch je, že malé aktualizácie nemusia ovplyvniť binarizované váhy. Aby sa to zmiernilo, zvýšila sa rýchlosť učenia, čím sa zabezpečí rýchlejšia konvergencia a lepšia optimalizácia v porovnaní s tradičnými prístupmi.
Skupinová kvantizácia a normalizácia
BitNet.cpp predstavuje Skupinová kvantizácia a normalizácia na zlepšenie paralelizmu modelu. Namiesto výpočtu parametrov pre celú maticu váh, BitNet rozdeľuje váhy a aktivácie do viacerých skupín (G
).
Toto zoskupenie umožňuje efektívne paralelné spracovanie bez ďalšej medziskupinovej komunikácie, čo umožňuje trénovanie a odvodzovanie modelov vo veľkom meradle.
Poznámky k implementácii a optimalizácie
Optimalizácia CPU
BitNet.cpp využíva niekoľko optimalizácií na nízkej úrovni na dosiahnutie špičkového výkonu procesora:
- Vektorizované operácie: Využíva inštrukcie SIMD na efektívne vykonávanie bitových manipulácií.
- Prístup do pamäte vhodný pre vyrovnávaciu pamäť: Štruktúruje údaje, aby sa minimalizovalo vynechávanie vyrovnávacej pamäte.
- Paralelné spracovanie: Efektívne rozdeľuje pracovné zaťaženie medzi viaceré jadrá CPU.
Tu je príklad kľúčovej funkcie implementujúcej kvantizáciu a odvodenie v BitNet:
Podporované modely
Aktuálne vydanie BitNet.cpp podporuje nasledovné 1-bitové LLM dostupné na Hugging Face:
- bitnet_b1_58-veľký (0,7B parametrov)
- bitnet_b1_58-3B (parametre 3,3B)
- Llama3-8B-1,58-100B-žetónov (8,0B parametrov)
Tieto modely sú verejne dostupné, aby demonštrovali schopnosti rámca odvodzovať. Hoci nie sú oficiálne vyškolené alebo vydané spoločnosťou Microsoft, ilustrujú všestrannosť rámca.
Inštalačná príručka
Ak chcete začať s BitNet.cpp, postupujte podľa nasledujúcich krokov:
Predpoklady
- Python >= 3,9
- CMake >= 3,22
- Clang >= 18
- Conda (vysoko odporúčané)
Pre Windows používateľov, Visual Studio by malo byť nainštalované s povolenými nasledujúcimi komponentmi:
- Desktop Development s C++
- Nástroje C++-CMake pre Windows
- Git pre Windows
- C++-Clang Compiler pre Windows
- Podpora MS-Build pre sadu nástrojov LLVM (Clang)
Pre Debian/Ubuntu používateľom je k dispozícii automatický inštalačný skript:
Inštalácia krok za krokom
- Klonujte úložisko:
- Inštalácia závislostí:
- Zostavte a pripravte projekt: Môžete si stiahnuť model priamo z Hugging Face a previesť ho do kvantovaného formátu:
Prípadne si manuálne stiahnite a skonvertujte model:
Spustenie inferencie s BitNet.cpp
Ak chcete spustiť odvodenie pomocou rámca, použite nasledujúci príkaz:
Vysvetlenie:
-m
určuje cestu k súboru modelu.-p
definuje text výzvy.-n
nastavuje počet tokenov, ktoré sa majú predpovedať.-temp
upravuje náhodnosť vzorkovania (teplotu) počas inferencie.
Príklad výstupu
Technické podrobnosti o BitNet.cpp
BitLinear Layer
BitNet.cpp implementuje upravenú architektúru transformátora, ktorá nahrádza štandardné násobenia matíc BitLinear
operácií. Tento prístup centralizuje váhy na nulu pred kvantizáciou a upravuje ich, aby sa znížili chyby aproximácie. Funkcia transformácie kľúča vyzerá takto:
# Binarization function for 1-bit weights def binarize_weights(W): alpha = W.mean() W_binarized = np.sign(W - alpha) return W_binarized
Kombinácia centralizovaných váh a škálovania zaisťuje, že kvantizačná chyba zostáva minimálna, čím sa zachováva výkon.
Vplyv na priemysel
BitNet.cpp by mohol mať ďalekosiahle dôsledky pre nasadenie LLM:
- Prístupnosť: Umožňuje LLM bežať na štandardných zariadeniach, čím demokratizuje prístup k výkonnej AI.
- Nákladová efektívnosť: Znižuje potrebu drahých GPU a znižuje bariéru pre prijatie.
- Energetická efektívnosť: Šetrí energiu využívaním štandardnej inferencie založenej na CPU.
- Inovácia: Otvára nové možnosti pre umelú inteligenciu na zariadení, ako je preklad jazykov v reálnom čase, hlasoví asistenti a aplikácie zamerané na súkromie bez cloudových závislostí.
Výzvy a budúce smerovanie
Zatiaľ čo 1-bitové LLM sú sľubné, zostáva niekoľko výziev. Patrí medzi ne vývoj robustných 1-bitových modelov pre rôzne úlohy, optimalizácia hardvéru pre 1-bitové výpočty a povzbudzovanie vývojárov, aby prijali túto novú paradigmu. Okrem toho, skúmanie 1-bitovej kvantizácie pre úlohy počítačového videnia alebo zvuku predstavuje vzrušujúce smerovanie budúcnosti.
Záver
Spustenie BitNet.cpp od spoločnosti Microsoft je významným pokrokom. Umožnením efektívnej 1-bitovej inferencie na štandardných CPU vytvára BitNet.cpp dostupnosť a udržateľnosť AI. Tento rámec vytvára pôdu pre prenosnejšie a nákladovo efektívnejšie LLM a posúva to, čo je možné s AI na zariadení.