Spojte se s námi

Umělá inteligence

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

mm
Pochopení 1bitových LLM a Microsoft BitNet.cpp Framework

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

Energetická účinnost

Rychlost odvození, energetická účinnost (Apple M2)

 

Inference Speed: Rychlejší na obou CPU

Inferenční rychlost, energetická účinnost (i7-13700H)

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:

 
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á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

  1. PYTHON > = 3.9
  2. CMake > = 3.22
  3. Zvonit > = 18
  4. 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:

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

Krok za krokem instalace

  1. Klonujte úložiště:
    git clone --recursive https://github.com/microsoft/BitNet.git

    cd BitNet
  2. Instalace závislostí:
    # Create a new Conda environment (recommended)
    conda create -n bitnet-cpp python=3.9
    conda activate bitnet-cpp


    pip install -r requirements.txt
  3. 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:
    python setup_env.py --hf-repo HF1BitLLM/Llama3-8B-1.58-100B-tokens -q i2_s

    Případně si ručně stáhněte a převeďte model:

    huggingface-cli download HF1BitLLM/Llama3-8B-1.58-100B-tokens --local-dir models/Llama3-8B-1.58-100B-tokens

    python setup_env.py -md models/Llama3-8B-1.58-100B-tokens -q i2_s

Spuštění Inference s BitNet.cpp

Chcete-li spustit odvození pomocí rámce, použijte následující příkaz:

python run_inference.py -m models/Llama3-8B-1.58-100B-tokens/ggml-model-i2_s.gguf -p "Sandra journeyed to the kitchen. Where is Sandra?" -n 6 -temp 0.7

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

Sandra journeyed to the kitchen. Where is Sandra?

Answer: Sandra is in the kitchen.

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

Posledních pět let jsem strávil ponořením se do fascinujícího světa strojového učení a hlubokého učení. Moje vášeň a odborné znalosti mě vedly k tomu, abych se podílel na více než 50 různých projektech softwarového inženýrství se zvláštním zaměřením na AI/ML. Moje neustálá zvědavost mě také přivedla ke zpracování přirozeného jazyka, což je obor, který bych rád dále prozkoumal.