2024 m. spalio 17 d. „Microsoft“ paskelbė „BitNet.cpp“ – išvadų sistemą, skirtą 1 bito kvantuotų didelių kalbų modeliams (LLM) paleisti. BitNet.cpp yra reikšminga Gen AI pažanga, leidžianti efektyviai diegti 1 bito LLM standartiniuose procesoriuose, nereikalaujant brangių GPU. Ši plėtra demokratizuoja prieigą prie LLM, padaro juos prieinamus įvairiuose įrenginiuose ir suteikia naujų galimybių įrenginiuose esančiose AI programose.
1 bitų didelių kalbų modelių supratimas
Didelių kalbų modeliams (LLM) tradiciškai reikėjo didelių skaičiavimo išteklių, nes modelių svoriams naudojami didelio tikslumo slankiojo kablelio skaičiai (paprastai FP16 arba BF16). Dėl šios būtinybės LLM diegimas tapo brangus ir reikalaujantis daug energijos.
Iš esmės 1 bito LLM naudoja ekstremalias kvantavimo technologijas, kad pateiktų modelio svorius, naudojant tik tris galimas reikšmes: -1, 0 ir 1, todėl terminas „1,58 bito“ (nes norint užkoduoti tris reikia šiek tiek daugiau nei vieno bito). valstybės).
Trinarė svorio sistema
Koncepcija
1 bito kvantavimas BitNet.cpp yra trijų dalių svorio sistema. „BitNet“ veikia tik su trimis galimomis kiekvieno parametro reikšmėmis:
- -1 (neigiamas)
- 0 (neutralus)
- 1 (teigiamas)
Dėl to kiekvienam parametrui reikia maždaug 1,58 bito saugojimo, taigi ir pavadinimas BitNet b1.58. Dėl šio drastiško parametrų bitų pločio sumažėjimo įspūdingai sumažėja atminties naudojimas ir skaičiavimo sudėtingumas, nes dauguma slankiojo kablelio daugybos pakeičiamos paprastais sudėjimais ir atėmimais.
Matematinis pagrindas
1 bito kvantavimas apima svorių ir aktyvinimų transformavimą į jų trejopą atvaizdavimą atliekant šiuos veiksmus:
1. Svorio binarizacija
Svorių dvejetainis nustatymas apima jų sutelkimą aplink vidurkį (α
), gaunamas trejopas. Transformacija matematiškai išreiškiama taip:
Wf,=Pasirašyti(W−α)
Kur:
- W yra pradinė svorio matrica.
- α yra svorių vidurkis.
- Ženklas (x) grįžta +1 jeigu x > 0 ir -1 kitaip.
2. Aktyvinimo kvantavimas
Kvantifikuojant aktyvacijas užtikrinama, kad įvestis būtų apribota iki nurodyto bitų pločio:
Kur:
- Qb = 2(b-1)2^{(b-1)} yra didžiausias kvantavimo lygis b– bitų plotis.
- γ yra didžiausia absoliuti vertė x (žymimas kaip ∣∣x∣∣∞).
- ε yra mažas skaičius, kad būtų išvengta perpildymo skaičiavimų metu.
3. BitLinear operacija
BitLinear sluoksnis pakeičia tradicinį matricos dauginimą supaprastinta operacija:
y=Wf,×x^e,×(Kb,βγ,)
Kur:
- β yra mastelio koeficientas, naudojamas aproksimavimo paklaidoms sumažinti.
- γ padidina aktyvacijas.
- Q_b yra kvantavimo koeficientas.
Ši transformacija leidžia efektyviai atlikti skaičiavimus išsaugant modelio našumą.
Veikimo pasekmės
Atminties efektyvumas
Trinarė svorio sistema žymiai sumažina atminties poreikį:
- Tradiciniai LLM: 16 bitų vienam svoriui
- BitNet.cpp: 1,58 bitai vienam svoriui
Šis sumažinimas reiškia, kad atminties sutaupoma maždaug 90 % palyginti su tradiciniais 16 bitų modeliais, todėl didesni modeliai gali tilpti į tuos pačius aparatinės įrangos apribojimus.
1. Išvados greitis: greitesnis abiejuose procesoriuose
Išvados greitis yra pavaizduotas kaip per sekundę apdorotų žetonų skaičius. Štai stebėjimų suskirstymas:
- „Apple M2 Ultra“: BitNet.cpp pasiekia iki 5,07x greitis didesniems modeliams (30B), palyginti su Llama.cpp, o didžiausias greitis yra 593,43 žetonų per sekundę 125M modeliui, kuris yra a 1,37 karto pagreitis. Didesniems modeliams, tokiems kaip 3.8B ir 7B, BitNet.cpp palaiko didesnį nei 84,77 žetonų per sekundę greitį, parodydamas jo efektyvumą įvairiose skalėse.
- „Intel i7-13700H“: BitNet.cpp pasiekia dar dramatiškesnius greičio patobulinimus. 7B modelio dydžio BitNet.cpp pateikia neįtikėtinas 5,68 karto greitis palyginti su Llama.cpp. Mažesniems modeliams, pvz., 125M, jis apdorojamas 389,08 žetonų per sekundękuris yra 2,37 karto greičiau nei Llama.cpp.
2. Energijos vartojimo efektyvumas: kraštinių įrenginių žaidimo keitiklis
Pateiktuose grafikuose taip pat yra energijos sąnaudų palyginimaikuris rodo reikšmingą energijos suvartojimo sumažėjimą vienam apdorotam žetonui:
- „Apple M2 Ultra“: BitNet.cpp sutaupo daug energijos. 700M modeliui sunaudoja 55,4% mažiau energijos už žetoną, palyginti su Llama.cpp, mažėja nuo nuo 0,314 iki 0,140. Ši tendencija išlieka didesniems modeliams, o 70B modelis rodo a 70,0 % sumažintas energijos suvartojimas.
- „Intel i7-13700H“: BitNet.cpp pristato 71,9% energijos taupymas 700M modeliui, suvartojimui mažėjant nuo 1.367 į 0,384. Nors Llama.cpp 70B modelio energijos duomenys nepasiekiami, BitNet.cpp išlieka efektyvus, o energijos suvartojimas yra lygus 17.33 val 70B modeliui.
3. Žmogaus skaitymo greičio etalono įveikimas
Viena įdomiausių šių grafikų įžvalgų yra nuoroda į žmogaus skaitymo greitispažymėtas adresu 5-7 žetonai per sekundę. Ši raudona linija rodo, kad abu diegimai, ypač BitNet.cpp, gali patogiai viršyti žmogaus skaitymo greitį net ir didžiausiuose modeliuose:
- Įjungta Apple M2 UltraBitNet.cpp pranoksta žmogaus skaitymo greitį visų dydžių modeliuose, o mažiausias greitis yra 8,67 žetonų per sekundę 70B modeliui.
- Įjungta Intel i7-13700H100B modelis vis dar pasiekia 1,70 žetonų per sekundębeveik paliečiantis žemesnį žmogaus skaitymo greičio diapazoną, o visi mažesni modeliai pranoksta šį etaloną.
Mokymų svarstymai
Tiesioginis įvertinimo įrankis (STE)
Kadangi 1 bito kvantavimas įveda nediferencijuojamas funkcijas, mokymas apima specializuotą techniką, žinomą kaip Tiesioginis įvertinimo įrankis (STE). Taikant šį metodą, gradientai teka nepakitę per nediferencijuojamus taškus. Štai supaprastintas „Python“ diegimas:
class StraightThroughEstimator(Function): @staticmethod def forward(ctx, input): return input.sign() @staticmethod def backward(ctx, grad_output): return grad_output
Mišrus tikslumo mokymas
Norėdami išlaikyti stabilumą treniruotės metu, mišrus tikslumas dirba:
- Svoriai ir aktyvacijos: Kvantuota 1 bito tikslumu.
- Gradientai ir optimizavimo priemonės būsenos: Saugomas didesniu tikslumu.
- Latentiniai svoriai: palaikomas labai tiksliai, kad būtų lengviau atlikti tikslius atnaujinimus treniruočių metu.
Didelio mokymosi greičio strategija
Unikalus 1 bitų modelių iššūkis yra tas, kad nedideli atnaujinimai gali neturėti įtakos dvejetainiams svoriams. Kad tai būtų sumažinta, mokymosi greitis padidinamas, užtikrinant greitesnę konvergenciją ir geresnį optimizavimą, palyginti su tradiciniais metodais.
Grupės kvantavimas ir normalizavimas
BitNet.cpp pristato Grupės kvantavimas ir normalizavimas padidinti modelio lygiagretumą. Užuot skaičiuojęs visos svorio matricos parametrus, BitNet padalija svorius ir aktyvacijas į kelias grupes (G
).,
Šis grupavimas leidžia efektyviai atlikti lygiagretų apdorojimą be papildomo tarpgrupinio ryšio, o tai leidžia atlikti didelio masto modelių mokymą ir išvadas.
Diegimo pastabos ir optimizavimas
CPU optimizavimas
BitNet.cpp naudoja kelis žemo lygio optimizavimus, kad pasiektų didžiausią procesoriaus našumą:
- Vektorizuotos operacijos: Naudoja SIMD instrukcijas, kad efektyviai atliktų manipuliacijas bitais.
- Talpyklai palanki prieiga prie atminties: struktūrizuoja duomenis, kad sumažintų talpyklos praleidimus.
- Lygiagretus apdorojimas: efektyviai paskirsto darbo krūvį keliems procesoriaus branduoliams.
Štai pagrindinės funkcijos, įgyvendinančios kvantavimą ir išvadas „BitNet“, pavyzdys:
Palaikomi modeliai
Dabartinis BitNet.cpp leidimas palaiko šiuos 1 bito LLM, pasiekiamus Hugging Face:
- bitnet_b1_58-large (0,7 B parametrai)
- bitnet_b1_58-3B (3,3 B parametrai)
- Llama3-8B-1.58-100B-žetonai (8,0 B parametrai)
Šie modeliai yra viešai prieinami, kad parodytų sistemos išvadų galimybes. Nors oficialiai neapmokyti ar išleisti Microsoft, jie iliustruoja sistemos universalumą.
Diegimo vadovas
Norėdami pradėti naudoti BitNet.cpp, atlikite toliau nurodytus veiksmus.
Būtinos sąlygos
- Python >= 3,9
- CMake >= 3,22
- Skambinti >= 18
- Conda (labai rekomenduojama)
Už Windows vartotojų, „Visual Studio“ turėtų būti įdiegta įjungus šiuos komponentus:
- Darbalaukio kūrimas naudojant C++
- „C++-CMake“ įrankiai, skirti „Windows“.
- Git, skirtas Windows
- C++-Clang kompiliatorius, skirtas Windows
- MS-Build palaikymas LLVM įrankių rinkiniui (Clang)
Už Debian/Ubuntu vartotojų, galimas automatinio diegimo scenarijus:
Žingsnis po žingsnio diegimas
- Klonuoti saugyklą:
- Įdiekite priklausomybes:
- Sukurkite ir paruoškite projektą: Galite atsisiųsti modelį tiesiai iš Hugging Face ir konvertuoti jį į kvantuotą formatą:
Arba rankiniu būdu atsisiųskite ir konvertuokite modelį:
Išvados vykdymas naudojant BitNet.cpp
Norėdami paleisti išvadą naudodami sistemą, naudokite šią komandą:
Paaiškinimas:
-m
nurodo modelio failo kelią.-p
apibrėžia raginimo tekstą.-n
nustato nuspėjamų žetonų skaičių.-temp
koreguoja mėginių ėmimo atsitiktinumą (temperatūrą) išvados metu.
Išvesties pavyzdys
Techninė BitNet.cpp informacija
BitLinear sluoksnis
BitNet.cpp įgyvendina modifikuotą transformatoriaus architektūrą, pakeičiant standartines matricos daugybas BitLinear
operacijos. Šis metodas centralizuoja svorius iki nulio prieš kvantavimą ir padidina jų mastelį, kad sumažintų aproksimavimo klaidas. Rakto transformavimo funkcija atrodo taip:
# Binarization function for 1-bit weights def binarize_weights(W): alpha = W.mean() W_binarized = np.sign(W - alpha) return W_binarized
Centralizuotų svorių ir mastelio keitimo derinys užtikrina, kad kvantavimo paklaida išliks minimali, taip išsaugomas našumas.
Pramonės poveikis
BitNet.cpp gali turėti didelių pasekmių LLM diegimui:
- Prieinamumas: leidžia LLM dirbti standartiniuose įrenginiuose, demokratizuojant prieigą prie galingo AI.
- Ekonomiškumas: Sumažėja brangių GPU poreikis, sumažinamas kliūtis priėmimui.
- Energijos efektyvumas: taupo energiją naudojant standartines procesoriaus išvadas.
- Inovacijos: atveria naujas įrenginio AI galimybes, pvz., kalbos vertimą realiuoju laiku, balso asistentus ir į privatumą orientuotas programas be priklausomybės nuo debesies.
Iššūkiai ir ateities kryptys
Nors 1 bito LLM žada, išlieka keletas iššūkių. Tai apima patikimų 1 bito modelių kūrimą įvairioms užduotims atlikti, aparatinės įrangos optimizavimą 1 bito skaičiavimams ir kūrėjų skatinimą priimti šią naują paradigmą. Be to, 1 bito kvantavimo kompiuterinės vizijos ar garso užduočių tyrimas yra įdomi ateities kryptis.
Išvada
„Microsoft“ paleidusi BitNet.cpp yra reikšminga pažanga. Įgalindamas efektyvias 1 bito išvadas standartiniuose procesoriuose, BitNet.cpp sukuria AI prieinamumą ir tvarumą. Ši sistema sudaro sąlygas nešiojamesniems ir ekonomiškesniems LLM, išplečiant tai, kas įmanoma naudojant įrenginio AI.