Home Umela inteligencia Microsoft Inference Framework prináša 1-bitové veľké jazykové modely do lokálnych zariadení

Microsoft Inference Framework prináša 1-bitové veľké jazykové modely do lokálnych zariadení

by
mm

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ť(Wa)

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í.

Rýchlosť odvodenia, energetická účinnosť (Apple M2)

Rýchlosť odvodenia: Rýchlejšia na oboch CPU

Inferenčná rýchlosť, energetická účinnosť (i7-13700H)

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:

 
def bitlinear_forward(input, weight, scale):
    # Quantize the input using absmax quantization
    input_q = quantize(input)
    
    # Perform binary matrix multiplication
    output = binary_matmul(input_q, weight)
    
    # Scale the output to match the original precision
    return output * scale
def quantize(x):
    # Perform absmax quantization
    scale = torch.max(torch.abs(x))
    return torch.clamp(x / scale, -1, 1) * scale

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

  1. Python >= 3,9
  2. CMake >= 3,22
  3. Clang >= 18
  4. 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

  1. Klonujte úložisko:
  2. Inštalácia závislostí:
  3. 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í.

Source Link

Related Posts

Leave a Comment