Umělá inteligence
Inference Framework společnosti Microsoft přináší 1bitové velké jazykové modely do místních zařízení

V říjnu 17, 2024, Microsoft oznámil BitNet.cpp, odvozený rámec navržený pro spouštění 1bitových kvantovaných velkých jazykových modelů (LLM). BitNet.cpp je významným pokrokem v Gen AI, který umožňuje efektivní nasazení 1bitových LLM na standardních CPU, aniž by byly vyžadovány drahé GPU. Tento vývoj demokratizuje přístup k LLM, zpřístupňuje je na široké škále zařízení a dává nové možnosti v aplikacích umělé inteligence na zařízení.
Pochopení 1bitových velkých jazykových modelů
Velké jazykové modely (LLM) tradičně vyžadují značné výpočetní zdroje kvůli jejich použití vysoce přesných čísel s pohyblivou řádovou čárkou (typicky FP16 nebo BF16) pro hmotnosti modelů. Tato nutnost způsobila, že nasazení LLM je drahé a energeticky náročné.
1bitové LLM ve svém jádru používají extrémní kvantizační techniky k reprezentaci modelových vah pomocí pouze tří možných hodnot: -1, 0 a 1, odtud termín „1.58-bit“ (protože vyžaduje o něco více než jeden bit k zakódování tří státy).
Ternární váhový systém
Koncept
1-bitová kvantizace v BitNet.cpp je ternární váhový systém. BitNet pracuje pouze se třemi možnými hodnotami pro každý parametr:
- -1 (záporný)
- 0 (neutrální)
- 1 (pozitivní)
To má za následek požadavek na úložiště přibližně 1.58 bitů na parametr, odtud název BitNet b1.58. Toto drastické snížení bitové šířky parametru vede k působivému snížení využití paměti a výpočetní složitosti, protože většina násobení s plovoucí desetinnou čárkou je nahrazena jednoduchými sčítáními a odečítáními.
Matematický základ
1bitová kvantizace zahrnuje transformaci vah a aktivací na jejich ternární reprezentaci pomocí následujících kroků:
1. Binarizace váhy
Binarizace vah zahrnuje jejich centralizaci kolem průměru (α
), což vede k ternárnímu zastoupení. Transformace je matematicky vyjádřena jako:
Wf=Podepsat(W-α)
Kde:
- W je původní hmotnostní matice.
- α je průměr vah.
- Znamení (x) Vrací +1 if x > 0 si -1 v opačném případě.
2. Aktivace Kvantizace
Kvantování aktivací zajišťuje, že vstupy jsou omezeny na zadanou bitovou šířku:
Kde:
- Qb = 2(b−1)2^{(b-1)} je maximální kvantizační úroveň pro b-bitová šířka.
- γ je maximální absolutní hodnota x (označeno jako ∣∣x∣∣∞).
- ε je malé číslo, aby se zabránilo přetečení během výpočtů.
3. BitLineární operace
Vrstva BitLinear nahrazuje tradiční násobení matice zjednodušenou operací:
y=Wf×x^e×(Qbβγ)
Kde:
- β je škálovací faktor používaný k minimalizaci chyb při aproximaci.
- γ škáluje aktivace.
- Q_b je kvantizační faktor.
Tato transformace umožňuje efektivní výpočty při zachování výkonu modelu.
Výkonnostní důsledky
Efektivita paměti
Systém trojitého závaží výrazně snižuje nároky na paměť:
- Tradiční LLM: 16 bitů na váhu
- BitNet.cpp: 1.58 bitů na váhu
Toto snížení znamená úsporu paměti přibližně 90% ve srovnání s tradičními 16bitovými modely, což umožňuje větším modelům, aby se vešly do stejných hardwarových omezení.
1. Inference Speed: Rychlejší na obou CPU
Inferenční rychlost je reprezentován jako počet tokenů zpracovaných za sekundu. Zde je rozpis pozorování:
- Na Apple M2 Ultra: BitNet.cpp dosahuje až 5.07x zrychlení u větších modelů (30B) ve srovnání s Llama.cpp, s maximální rychlostí 593.43 tokenů za sekundu pro model 125M, což je a 1.37x zrychlení. U větších modelů, jako jsou 3.8B a 7B, BitNet.cpp udržuje rychlost přes 84.77 tokenů za sekundu, což ukazuje svou efektivitu napříč měřítky.
- Na Intel i7-13700H: BitNet.cpp dosahuje ještě výraznějšího zvýšení rychlosti. Při velikosti modelu 7B poskytuje BitNet.cpp neuvěřitelných 5.68x zrychlení ve srovnání s Llama.cpp. U menších modelů, jako je 125M, zpracovává 389.08 tokenů za sekundu, který je 2.37x rychlejší než Llama.cpp.
2. Energetická účinnost: Změna hry pro zařízení Edge
Součástí jsou i poskytnuté grafy srovnání cen energií, což ukazuje výrazné snížení spotřeby energie na zpracovaný token:
- Na Apple M2 Ultra: Úspory energie BitNet.cpp jsou značné. U modelu 700M spotřebuje O 55.4% méně energie na token ve srovnání s Llama.cpp, klesá z 0.314 0.140 na. Tento trend pokračuje u větších modelů, přičemž model 70B ukazuje a 70.0% snížení spotřeby energie.
- Na Intel i7-13700H: BitNet.cpp dodává 71.9% úspora energie u modelu 700M s poklesem spotřeby 1.367 na 0.384. Přestože údaje o energii pro model 70B v Llama.cpp nejsou k dispozici, BitNet.cpp zůstává efektivní se spotřebou energie na 17.33 pro model 70B.
3. Překročení referenční rychlosti lidského čtení
Jedním z nejzajímavějších poznatků z těchto grafů je odkaz na rychlost lidského čtení, označeno v 5-7 žetonů za sekundu. Tato červená čára ukazuje, že obě implementace, zejména BitNet.cpp, mohou pohodlně překonat lidské rychlosti čtení i u těch největších modelů:
- On Apple M2 UltraBitNet.cpp překonává rychlost lidského čtení u všech velikostí modelů, přičemž nejnižší je rychlost 8.67 tokenů za sekundu pro model 70B.
- On Intel i7-13700H, model 100B stále dosahuje 1.70 tokenů za sekundu, téměř se dotýká spodního rozsahu rychlosti lidského čtení, zatímco všechny menší modely tento standard překonávají.
Úvahy o školení
Přímý odhad (STE)
Protože 1bitová kvantizace zavádí nediferencovatelné funkce, trénink zahrnuje specializovanou techniku známou jako Přímý odhad (STE). V tomto přístupu gradienty protékají nezměněnými nediferencovatelnými body. Zde je zjednodušená implementace v Pythonu:
class StraightThroughEstimator(Function): @staticmethod def forward(ctx, input): return input.sign() @staticmethod def backward(ctx, grad_output): return grad_output
Smíšený trénink přesnosti
Pro udržení stability během tréninku, smíšená přesnost je zaměstnán:
- Váhy a aktivace: Kvantováno s 1bitovou přesností.
- Přechody a stavy optimalizátoru: Uloženo s vyšší přesností.
- Latentní závaží: Udržováno ve vysoké přesnosti pro usnadnění přesných aktualizací během tréninku.
Strategie velké míry učení
Jedinečnou výzvou u 1bitových modelů je to, že malé aktualizace nemusí mít vliv na binarizované váhy. Aby se to zmírnilo, zvyšuje se rychlost učení, což zajišťuje rychlejší konvergenci a lepší optimalizaci ve srovnání s tradičními přístupy.
Skupinová kvantizace a normalizace
BitNet.cpp představuje Skupinová kvantizace a normalizace zlepšit paralelismus modelu. Místo výpočtu parametrů pro celou hmotnostní matici BitNet rozděluje váhy a aktivace do více skupin (G
).
Toto seskupení umožňuje efektivní paralelní zpracování bez další meziskupinové komunikace, což umožňuje trénování a vyvozování modelů ve velkém měřítku.
Poznámky k implementaci a optimalizace
Optimalizace CPU
BitNet.cpp využívá několik nízkoúrovňových optimalizací k dosažení špičkového výkonu CPU:
- Vektorizované operace: Využívá instrukce SIMD k efektivnímu provádění bitových manipulací.
- Přístup do paměti šetrný k mezipaměti: Strukturuje data, aby se minimalizovalo vynechání mezipaměti.
- Paralelní zpracování: Efektivně rozděluje pracovní zátěž mezi více jader CPU.
Zde je příklad klíčové funkce implementující kvantizaci a odvození v BitNet:
Podporované modely
Aktuální verze BitNet.cpp podporuje následující 1bitové LLM dostupné na Hugging Face:
- bitnet_b1_58-large (0.7B parametrů)
- bitnet_b1_58-3B (3.3B parametrů)
- Llama3-8B-1.58-100B-žetonů (8.0B parametrů)
Tyto modely jsou veřejně dostupné, aby demonstrovaly schopnosti rámce odvodit. Ačkoli nejsou oficiálně vyškoleny nebo vydány společností Microsoft, ilustrují všestrannost rámce.
Instalační příručka
Chcete-li začít s BitNet.cpp, postupujte takto:
Předpoklady
- PYTHON > = 3.9
- CMake > = 3.22
- Zvonit > = 18
- Conda (vysoce doporučeno)
Pro Windows uživatelé, Visual Studio by mělo být nainstalováno s povolenými následujícími komponentami:
- Desktop Development s C++
- Nástroje C++-CMake pro Windows
- Git pro Windows
- C++-Clang Compiler pro Windows
- Podpora MS-Build pro sadu nástrojů LLVM (Clang)
Pro Debian / Ubuntu uživatelům je k dispozici automatický instalační skript:
Krok za krokem instalace
- Klonujte úložiště:
- Instalace závislostí:
- Sestavte a připravte projekt: Můžete si stáhnout model přímo z Hugging Face a převést jej do kvantovaného formátu:
Případně si ručně stáhněte a převeďte model:
Spuštění Inference s BitNet.cpp
Chcete-li spustit odvození pomocí rámce, použijte následující příkaz:
Vysvětlení:
-m
určuje cestu k souboru modelu.-p
definuje text výzvy.-n
nastavuje počet tokenů k předpovědi.-temp
upravuje náhodnost vzorkování (teplotu) během inference.
Příklad výstupu
Technické detaily BitNet.cpp
BitLinear Layer
BitNet.cpp implementuje upravenou architekturu Transformer, která nahrazuje standardní maticové násobení BitLinear
operace. Tento přístup centralizuje váhy na nulu před kvantizací a upravuje je tak, aby se snížily chyby aproximace. Funkce transformace klíče vypadá takto:
# Binarization function for 1-bit weights def binarize_weights(W): alpha = W.mean() W_binarized = np.sign(W - alpha) return W_binarized
Kombinace centralizovaných vah a škálování zajišťuje, že kvantizační chyba zůstává minimální, čímž se zachovává výkon.
Dopad na průmysl
BitNet.cpp by mohl mít dalekosáhlé důsledky pro nasazení LLM:
- Přístupnost: Umožňuje LLM provozovat na standardních zařízeních a demokratizovat přístup k výkonné umělé inteligenci.
- Efektivita nákladů: Snižuje potřebu drahých GPU a snižuje bariéru pro přijetí.
- Energetická účinnost: Šetří energii využitím standardního odvození založeného na CPU.
- Inovace: Otevírá nové možnosti pro AI na zařízení, jako je překlad jazyků v reálném čase, hlasoví asistenti a aplikace zaměřené na soukromí bez závislostí na cloudu.
Výzvy a budoucí směry
Zatímco 1bitové LLM jsou slibné, zbývá několik výzev. Patří mezi ně vývoj robustních 1bitových modelů pro různé úlohy, optimalizace hardwaru pro 1bitové výpočty a podpora vývojářů, aby přijali toto nové paradigma. Navíc zkoumání 1bitové kvantizace pro úlohy počítačového vidění nebo zvuku představuje vzrušující budoucí směr.
Proč investovat do čističky vzduchu?
Spuštění BitNet.cpp od společnosti Microsoft je významným pokrokem. Umožněním efektivní 1bitové inference na standardních CPU vytváří BitNet.cpp dostupnost a udržitelnost AI. Tento rámec připravuje půdu pro přenosnější a nákladově efektivnější LLM a prosazuje to, co je možné s umělou inteligencí na zařízení.