AI-modeller og plattformer
Microsofts Inferensramme bringer 1-bit store språkmodeller til lokale enheter
Den 17. oktober 2024 kunngjorde Microsoft BitNet.cpp (MSFT ), et inferensrammeverk designet for å kjøre 1-bit kvantiserte store språkmodeller (LLM). BitNet.cpp er et betydelig fremsteg i Gen AI, som muliggjør effektiv deployering av 1-bit LLM på standard CPU, uten å kreve dyre GPU. Denne utviklingen demokratiserer tilgangen til LLM, gjør dem tilgjengelige på en rekke enheter og åpner nye muligheter for på-enhet AI-applikasjoner.
Forstå 1-bit store språkmodeller
Store språkmodeller (LLM) har tradisjonelt krevd betydelige beregningsressurser på grunn av deres bruk av høy-presisjons flyttall (vanligvis FP16 eller BF16) for modellvekt. Dette har gjort det dyrt og energikrevende å deployere LLM.
I kjernen bruker 1-bit LLM ekstreme kvantiseringsteknikker for å representere modellvekt med kun tre mulige verdier: -1, 0 og 1, derav betegnelsen “1,58-bit” (da det krever litt mer enn en bit for å kode tre tilstander).
Ternær vekt-system
Konseptet
1-bit kvantisering i BitNet.cpp er et ternært vekt-system. BitNet opererer med kun tre mulige verdier for hver parameter:
- -1 (negativ)
- 0 (nøytral)
- 1 (positiv)
Dette resulterer i en lagringskrav på omtrent 1,58 bit per parameter, derav navnet BitNet b1.58. Denne drastiske reduksjonen i parameter-bit-bredde fører til en imponerende reduksjon i minnebruk og beregningskompleksitet, da de fleste flyttalls-multiplikasjoner erstattes med enkle addisjoner og subtraksjoner.
Matematisk grunnlag
1-bit kvantisering innebærer å transformere vekt og aktiveringer til deres ternære representasjon gjennom følgende trinn:
1. Vekt-binarisering
Binarisering av vektene innebærer å sentrere dem rundt gjennomsnittet (α), noe som resulterer i en ternær representasjon. Transformasjonen uttrykkes matematisk som:
Wf=Sign(W−α)
Hvor:
- W er den opprinnelige vektmatrisen.
- α er gjennomsnittet av vektene.
- Sign(x) returnerer +1 hvis x > 0 og -1 ellers.
2. Aktivering-kvantisering
Kvantisering av aktiveringer sikrer at inndata er begrenset til en bestemt bit-bredde:
x^e=Quant(x)=Clip(γx×Qb,−Qb+ϵ,Qb−ϵ)
Hvor:
- Qb = 2(b−1)2^{(b-1)} er den maksimale kvantiseringen for b-bit bredde.
- γ er den maksimale absoluttverdien av x (betegnet som ∣∣x∣∣∞).
- ε er et lite tall for å forhindre overflyt under beregninger.
3. BitLineær operasjon
BitLineær laget erstatter tradisjonelle matrisemultiplikasjoner med en forenklet operasjon:
y=Wf×x^e×(Qbβγ)
Hvor:
- β er en skaleringsfaktor som brukes til å minimere approksimasjonsfeil.
- γ skalerer aktiveringer.
- Q_b er kvantiseringsfaktoren.
Denne transformasjonen muliggjør effektive beregninger samtidig som modellprestasjonene behandles.
Ytelsesimplikasjoner
Minneeffektivitet
Ternært vekt-system reduserer betydelig minnekrav:
- Tradisjonelle LLM: 16 bit per vekt
- BitNet.cpp: 1,58 bit per vekt
Denne reduksjonen oversettes til en minnesparing på omtrent 90% sammenlignet med tradisjonelle 16-bit modeller, noe som gjør det mulig å få større modeller innenfor samme hårdvarerestriksjoner.

Innsiktshastighet, Energi-effektivitet (Apple [securities_stock_price_tag symbol="AAPL" exchange="NASDAQ"] M2)
1. Innsiktshastighet: Raskere på begge CPU
Innsiktshastighet representeres som antall token prosessert per sekund. Her er en oppsummering av observasjonene:
- På Apple M2 Ultra: BitNet.cpp oppnår opptil 5,07 ganger hastighetsforbedring for større modeller (30B) sammenlignet med Llama.cpp, med en topphastighet på 593,43 token per sekund for en 125M-modell, noe som er en 1,37 ganger hastighetsforbedring. For større modeller som 3,8B og 7B, beholder BitNet.cpp en hastighet over 84,77 token per sekund, noe som viser dens effektivitet over skalaene.
- På Intel (INTC ) i7-13700H: BitNet.cpp oppnår enda mer dramatiske hastighetsforbedringer. Ved 7B-modellstørrelse, leverer BitNet.cpp en 5,68 ganger hastighetsforbedring sammenlignet med Llama.cpp. For mindre modeller som 125M, prosesserer det 389,08 token per sekund, noe som er 2,37 ganger raskere enn Llama.cpp.
2. Energi-effektivitet: En game-changer for kant-enheter
Grafene inkluderer også energi-kost-sammenligninger, som viser en betydelig reduksjon i energiforbruk per prosessert token:
- På Apple M2 Ultra: BitNet.cpps energibesparelse er betydelig. For 700M-modellen, forbruker det 55,4% mindre energi per token sammenlignet med Llama.cpp, fra 0,314 til 0,140. Denne trenden fortsetter for større modeller, med 70B-modellen som viser en 70,0% reduksjon i energiforbruk.
- På Intel i7-13700H: BitNet.cpp leverer 71,9% energibesparelse for 700M-modellen, med forbruk som faller fra 1,367 til 0,384. Selv om energidata for 70B-modellen i Llama.cpp ikke er tilgjengelig, forblir BitNet.cpp effektiv, med energiforbruk på 17,33 for 70B-modellen.
3. Krysser menneskeleseshastighets-benchmarket
En av de mest interessante innsiktene fra disse grafene er referansen til menneskeleseshastighet, markert ved 5-7 token per sekund. Denne røde linjen viser at begge implementeringer, spesielt BitNet.cpp, kan komfortabelt overstige menneskeleseshastigheter selv for de største modellene:
- På Apple M2 Ultra, overstiger BitNet.cpp menneskeleseshastighet for alle modellstørrelser, med den laveste hastigheten på 8,67 token per sekund for en 70B-modell.
- På Intel i7-13700H, oppnår 100B-modellen en hastighet på 1,70 token per sekund, nære den nedre grensen for menneskeleseshastighet, mens alle mindre modeller overstiger denne benchmarken.
Treningsoverveielser
Rett gjennom-estimatoren (STE)
Ettersom 1-bit kvantisering introduserer ikke-differensierbare funksjoner, involverer trening en spesialisert teknikk kjent som Rett gjennom-estimatoren (STE). I denne tilnærmingen, flyter gradientene uendret gjennom ikke-differensierbare punkt. Her er en forenklet implementering i Python:
class RettGjennomEstimatoren(Function): @staticmethod def forward(ctx, input): return input.sign() @staticmethod def backward(ctx, grad_output): return grad_output
Blandet presisjonstrening
For å opprettholde stabilitet under trening, brukes blandet presisjon:
- Vekter og aktiveringer: Kvantisert til 1-bit presisjon.
- Gradier og optimizer-tilstander: Lagret i høyere presisjon.
- Latente vekter: Vedlikeholdes i høy presisjon for å muliggjøre nøyaktige oppdateringer under trening.
Stor læringshastighetsstrategi
En unik utfordring med 1-bit modeller er at små oppdateringer kanskje ikke påvirker binariserte vekter. For å motvirke dette, økes læringshastigheten for å sikre raskere konvergens og bedre optimalisering sammenlignet med tradisjonelle tilnærminger.
Gruppe-kvantisering og normalisering
BitNet.cpp innfører gruppe-kvantisering og normalisering for å forbedre modell-parallellisering. I stedet for å beregne parametre for hele vektmatrisen, deler BitNet vekter og aktiveringer inn i flere grupper (G).
Dette gruppering tillater effektiv parallellprosessering uten ekstra mellom-gruppe-kommunikasjon, muliggjører stor-skala modell-trening og inferens.
Implementeringsnotater og optimaliseringer
CPU-optimalisering
BitNet.cpp utnytter flere lav-nivå-optimaliseringer for å oppnå topp-CPU-ytelse:
- Vektoriserte operasjoner: Utnytter SIMD-instruksjoner for å utføre bit-manipulasjoner effektivt.
- Cache-vennlig minne-tilgang: Strukturerer data for å minimere cache-miss.
- Parallell prosessering: Fordeler arbeidsbelastning effektivt over flere CPU-kjerner.
Her er et eksempel på en nøkelfunksjon som implementerer kvantisering og inferens i BitNet:
Støttede modeller
Den nåværende utgaven av BitNet.cpp støtter følgende 1-bit LLMs tilgjengelige på Hugging Face:
- bitnet_b1_58-large (0,7 milliarder parametre)
- bitnet_b1_58-3B (3,3 milliarder parametre)
- Llama3-8B-1.58-100B-tokens (8,0 milliarder parametre)
Disse modellene er offentlig tilgjengelige for å demonstrere rammeverkets inferens-egenskaper. Selv om de ikke er offisielt trent eller utgitt av Microsoft, viser de rammeverkets fleksibilitet.
Installasjonsveiledning
For å komme i gang med BitNet.cpp, følg disse trinnene:
Forutsetninger
- Python >= 3.9
- CMake >= 3.22
- Clang >= 18
- Conda (høyt anbefalt)
For Windows-brukere bør Visual Studio være installert med følgende komponenter aktivert:
- Skrivebordsutvikling med C++
- C++-CMake-verktøy for Windows
- Git for Windows
- C++-Clang-kompilator for Windows
- MS-Build-støtte for LLVM-verktøysett (Clang)
For Debian/Ubuntu-brukere er det tilgjengelig et automatisert installasjonsskript:
Trinn-for-trinn installasjon
- Klon repository:
- Install avhengigheter:
- Bygg og forbered prosjekt:
Alternativt kan du laste ned og konvertere modellen manuelt:
Kjøre inferens med BitNet.cpp
For å kjøre inferens med rammeverket, bruk følgende kommando:
Forklaring:
-mspesifiserer modellfilbane.-pdefinerer prompt-teksten.-nsetter antall token å forutsi.-tempjusterer sampling-tilfeldighet (temperatur) under inferens.
Eksempel på utdata
Tekniske detaljer om BitNet.cpp
BitLineær lag
BitNet.cpp implementerer en modifisert Transformer-arkitektur, som erstatter standard matrisemultiplikasjoner med BitLineær-operasjoner. Denne tilnærmingen sentrerer vekter rundt null før kvantisering og skalerer dem for å redusere approksimasjonsfeil. Nøkkeltransformasjonsfunksjonen ser slik ut:
# Binarisering av 1-bit vekter def binarisér_vekter(W): alpha = W.mean() W_binarisert = np.sign(W - alpha) return W_binarisert
Kombinasjonen av sentrerte vekter og skaleringsfaktorer sikrer at kvantisfeilene forblir minimale, og prestasjonene beholdes.
Industriell påvirkning
BitNet.cpp kan ha langtrekkende implikasjoner for deployering av LLM:
- Tilgjengelighet: Muliggjør at LLM kjører på standard enheter, demokratiserer tilgangen til kraftig AI.
- Kost-effektivitet: Reduserer behovet for dyre GPU, senker barrieren for adopsjon.
- Energi-effektivitet: Sparer energi ved å utnytte standard CPU-basert inferens.
- Innovasjon: Åpner nye muligheter for på-enhet AI, som sanntids språk-oversettelse, tale-assistenter og privatlivs-fokusert applikasjoner uten avhengighet av skytjenester.
Utlendingsutfordringer og fremtidige retninger
Selv om 1-bit LLM har potensiale, finnes det flere utfordringer. Disse inkluderer utvikling av robuste 1-bit modeller for diverse oppgaver, optimalisering av maskinvare for 1-bit beregning og oppmuntring av utviklere til å adoptere denne nye paradigmen. I tillegg representerer utforskning av 1-bit kvantisering for datavisjon eller lyd-oppgaver en spennende fremtidig retning.
Konklusjon
Microsofts lansering av BitNet.cpp er et betydelig fremsteg. Ved å muliggjøre effektiv 1-bit inferens på standard CPU, skaper BitNet.cpp tilgjengelighet og bærekraft for AI. Dette rammeverket setter scenen for mer portable og kost-effektive LLM, og åpner opp for nye muligheter med på-enhet AI.













