AI-mallit ja alustat
Microsoftin Inferenssikehys Brings 1-Bit Large Language Models to Local Devices
17. lokakuuta 2024 Microsoft (MSFT ) julkaisi BitNet.cpp:n, inferenssikehyksen, joka on suunniteltu suorittamaan 1-bittisiä kvantisoituja Large Language Model -malleja (LLM). BitNet.cpp on merkittävä edistysaskel Gen AI:ssa, joka mahdollistaa 1-bittisten LLM-mallien tehokkaan käytön standard-CPU:illa ilman kalliiden GPU:iden tarvetta. Tämä kehitys demokratisoi LLM-mallien saatavuuden, ja ne ovat nyt saatavilla laajalla valikoimalla laitteita, ja ne tarjoavat uusia mahdollisuuksia laitteistopuoleisissa AI-sovelluksissa.
Ymmärtäminen 1-bittisistä Large Language Model -malleista
Large Language Model -mallit (LLM) ovat perinteisesti vaatineet merkittäviä laskentaresursseja korkean tarkkuuden liukulukujen (yleensä FP16 tai BF16) käytön vuoksi mallipainoissa. Tämä on tehnyt LLM-mallien käytön kalliiksi ja energiankulutukseltaan suureksi.
1-bittiset LLM-mallit käyttävät äärimmäisiä kvantisointitekniikoita edustamaan mallipainoja vain kolmella mahdollisella arvolla: -1, 0 ja 1, mistä johtuu termi “1,58-bitti” (koska se vaatii hieman yli yhden bittin kolmen tilan koodaamiseen).
Ternary-painojärjestelmä
Käsite
BitNet.cpp:n 1-bittinen kvantisointi on ternary-painojärjestelmä. BitNet toimii vain kolmen mahdollisen arvon kanssa kunkin parametrin osalla:
- -1 (negatiivinen)
- 0 (neutraali)
- 1 (positiivinen)
Tämä johtaa noin 1,58 bittin tallennusvaatimukseen parametrikohtaisesti, mistä johtuu nimitys BitNet b1.58. Tämä radikaali vähennys parametrin bittileveydessä johtaa merkittävään muistin ja laskennan monimutkaisuuden vähentymiseen, koska useimmat liukulukuoperaatiot korvataan yksinkertaisilla lisäyksillä ja vähennyksillä.
Matemaattinen perusta
1-bittinen kvantisointi käsittää painojen ja aktivaatioiden muuttamisen ternaariseen esitysmuotoon seuraavilla vaiheilla:
1. Painojen binarisoiminen
Painojen binarisoiminen käsittää niiden keskitämisen keskiarvoon (α), mikä johtaa ternaariseen esitysmuotoon. Muunnos voidaan matemaattisesti ilmaista seuraavasti:
Wf=Sign(W−α)
Missä:
- W on alkuperäinen painomatriisi.
- α on painojen keskiarvo.
- Sign(x) palauttaa +1, jos x > 0 ja -1 muutoin.
2. Aktivaatioiden kvantisointi
Aktivaatioiden kvantisointi varmistaa, että syötteet ovat rajoitettuina tietyn bittileveyden mukaisesti:
x^e=Quant(x)=Clip(γx×Qb,−Qb+ϵ,Qb−ϵ)
Missä:
- Qb = 2(b−1)2^{(b-1)} on maksimi kvantisointitaso b-bittileveydelle.
- γ on x:n suurin itseisarvo (merkitty ∣∣x∣∣∞).
- ε on pieni luku, joka estää ylivirtauksen laskelmissa.
3. BitLineaarinen operaatio
BitLineaarinen kerros korvaa perinteiset matriisikertoimet yksinkertaisella operaatiolla:
y=Wf×x^e×(Qbβγ)
Missä:
- β on skaalauksen kerroin, jota käytetään approksimaatiavirheiden minimointiin.
- γ skaalaa aktivaatiot.
- Q_b on kvantisointikerroin.
Tämä muunnos mahdollistaa tehokkaat laskelmat säilyttäen mallin suorituskyvyn.
Suorituskyvyn vaikutukset
Muistin tehokkuus
Ternary-painojärjestelmä vähentää merkittävästi muistin vaatimuksia:
- Perinteiset LLM-mallit: 16 bittiä/paino
- BitNet.cpp: 1,58 bittiä/paino
Tämä vähennys vastaa noin 90% muistin säästöä verrattuna perinteisiin 16-bittisiin malleihin, mikä mahdollistaa suurempien mallien sijoittamisen samoihin laitteistoon.

Inferenssin nopeus, Energiatehokkuus (Apple [securities_stock_price_tag symbol="AAPL" exchange="NASDAQ"] M2)
1. Inferenssin nopeus: Nopeampi molemmilla CPU:illa
Inferenssin nopeus on määritetty tokenien määränä sekunnissa. Tässä on yhteenveto havainnoista:
- Apple M2 Ultran kanssa: BitNet.cpp saavuttaa jopa 5,07-kertaisen nopeutuksen suuremmille malleille (30B) verrattuna Llama.cpp:hen, huipputeholla 593,43 tokenia sekunnissa 125M-mallille, mikä on 1,37-kertainen nopeutus. Suuremmille malleille, kuten 3,8B ja 7B, BitNet.cpp ylläpitää yli 84,77 tokenin nopeuden sekunnissa, osoittaen tehokkuutensa eri skaaloissa.
- Intel (INTC ) i7-13700H:llä: BitNet.cpp saavuttaa vielä dramaattisempia nopeutuksia. 7B-mallikoolle BitNet.cpp tarjoaa 5,68-kertaisen nopeutuksen verrattuna Llama.cpp:hen. Pienemmille malleille, kuten 125M, se prosessoi 389,08 tokenia sekunnissa, mikä on 2,37-kertainen nopeutus verrattuna Llama.cpp:hen.
2. Energiatehokkuus: Pelimuuttaja älylaitteille
Tarjotut kaaviot sisältävät myös energiankulutuksen vertailun, joka osoittaa merkittävän vähennyksen energiankulutuksessa tokenia kohden:
- Apple M2 Ultran kanssa: BitNet.cpp:n energiansäästöt ovat merkittäviä. 700M-mallille se kuluttaa 55,4% vähemmän energiaa tokenia kohden verrattuna Llama.cpp:hen, laskien 0,314:sta 0,140:aan. Tämä suunta jatkuu suuremmilla malleilla, 70B-mallin osoittaen 70,0% vähennyksen energiankulutuksessa.
- Intel i7-13700H:llä: BitNet.cpp tarjoaa 71,9% energiansäästöt 700M-mallille, kulutuksen laskiessa 1,367:sta 0,384:aan. Vaikka energiatietoja Llama.cpp:stä 70B-mallille ei ole saatavilla, BitNet.cpp pysyy tehokkaana, energiankulutuksella 17,33 70B-mallille.
3. Ylittäminen ihmisen lukemisenopeuden vertailukohtana
Yksi mielenkiintoisimmista havainnoista kaavioista on viittaus ihmisen lukemisnopeuteen, joka on merkitty 5-7 tokenia sekunnissa. Tämä punainen viiva osoittaa, että molemmat toteutukset, erityisesti BitNet.cpp, voivat helposti ylittää lukemisnopeuden jopa suurimmilla malleilla:
- Apple M2 Ultran kanssa: BitNet.cpp ylittää lukemisnopeuden kaikilla mallikoon kaikilla malleilla, alin nopeus on 8,67 tokenia sekunnissa 70B-mallille.
- Intel i7-13700H:llä: 100B-malli saavuttaa 1,70 tokenia sekunnissa, melkein saavuttaen lukemisnopeuden alarajan, kun taas kaikki pienemmät mallit ylittävät tämän vertailukohdan.
Koulutusasioita
Suora Estimaattori (STE)
Koska 1-bittinen kvantisointi sisältää epäerottuvia funktioita, koulutus vaatii erityistä tekniikkaa, jota kutsutaan Suora Estimaattoriksi (STE). Tässä lähestymistavassa gradientit virtaavat muuttumattomina epäerottuvien kohdissa. Tässä on yksinkertainen toteutus Pythonissa:
class StraightThroughEstimator(Function): @staticmethod def forward(ctx, input): return input.sign() @staticmethod def backward(ctx, grad_output): return grad_output
Segregoitunut tarkkuus koulutuksessa
Koulutuksen vakauden ylläpitämiseksi segregoitu tarkkuus on käytössä:
- Painot ja aktivaatiot: Kvantisoitu 1-bittiseen tarkkuuteen.
- Gradientit ja optimoijan tilat: Säilytetään korkeammassa tarkkuudessa.
- Latenttiset painot: Ylläpidetään korkeassa tarkkuudessa koulutuksen aikana.
Suuri oppimisnopeusstrategia
Yksi 1-bittisten mallien haasteista on, että pienet päivitykset eivät välttämättä vaikuta binarisoituun painoon. Tämän neutraloimiseksi oppimisnopeus kasvaa, varmistaen nopeamman konvergenssin ja paremman optimoinnin verrattuna perinteisiin lähestymistapoihin.
Ryhmäkvantisointi ja normaali
BitNet.cpp esittelee Ryhmäkvantisoinnin ja normaalin parantamaan mallin rinnakkaisuutta. Sen sijaan, että lasketaan koko painomatriisin parametreja, BitNet jakaa painot ja aktivaatiot useisiin ryhmiin (G).
Tämä ryhmittely mahdollistaa tehokkaan rinnakkaisen prosessoinnin ilman lisättyä ryhmien välistä viestintää, mahdollistaen suurten mallien koulutuksen ja inferenssin.
Toteutusmuistiinpanot ja optimoinnit
CPU-optimointi
BitNet.cpp hyödyntää useita matalatasoisen optimointia saavuttaakseen huipputason CPU-suorituskyvyn:
- Veektoroitujen operaatioiden käyttäminen bittimanipulaatioiden tehokkaaseen suorittamiseen.
- Cache-ystävällinen muistin käyttö: Data on rakennettu minimoidakseen cache-hävikkiä.
- Rinnakkainen prosessointi: Työnjakoa useiden CPU-ytimien välillä.
Tässä on esimerkki avainfunktiosta, joka toteuttaa kvantisoinnin ja inferenssin BitNet:ssä:
Tuetut mallit
BitNet.cpp:n nykyinen julkaisu tukee seuraavia 1-bittisiä LLM-malleja Hugging Facessa:
- bitnet_b1_58-large (0,7 miljardia parametriä)
- bitnet_b1_58-3B (3,3 miljardia parametriä)
- Llama3-8B-1.58-100B-tokens (8,0 miljardia parametriä)
Nämä mallit ovat julkisesti saatavilla demonstroimaan kehyksen inferenssimahdollisuuksia. Vaikka ne eivät ole virallisesti koulutettuja tai julkaisemia Microsoftilta, ne osoittavat kehyksen joustavuuden.
Asennusohje
Asentaaksesi BitNet.cpp:n, seuraa seuraavia vaiheita:
Edellytykset
- Python ≥ 3.9
- CMake ≥ 3.22
- Clang ≥ 18
- Conda (suositellaan voimakkaasti)
Windows-käyttäjille Visual Studio tulisi asentaa seuraavilla komponenteilla:
- Pöytätyöaseman kehitys C++:lla
- C++-CMake-työkalut Windowsille
- Git for Windows
- C++-Clang-kääntäjä Windowsille
- MS-Build-tuki LLVM-työkalupakettiin (Clang)
Debian/Ubuntu-käyttäjille on automaattinen asennuskomento:
Vaiheittainen asennus
- Kloonaa varasto:
- Asenna riippuvuudet:
- Rakenna ja valmista projekti: Voit ladata mallin suoraan Hugging Facesta ja muuttaa sen kvantisoituun muotoon:
Vaihtoehtoisesti voit ladata ja muuttaa mallin manuaalisesti:
Suorita inferenssiä BitNet.cpp:llä
Suorittaaksesi inferenssiä kehyksellä, käytä seuraavaa komentoa:
Selitys:
-mmäärittää mallitiedoston polun.-pmäärittää syötetekstin.-nasettaa ennustettavien tokenien määrän.-tempsäätää näytteen ottamisen satunnaisuutta (lämpötilaa) inferenssin aikana.
Esimerkki tuloksesta
BitNet.cpp:n tekniset tiedot
BitLineaarinen kerros
BitNet.cpp toteuttaa muokatun Transformer-arkkitehtuurin, jossa perinteiset matriisikertoimet korvataan BitLineaarisen operaatiolla. Tässä lähestymistavassa painot keskitetään nollaan ennen kvantisointia ja skaalataan vähentämään approksimaatiavirheitä. Avainmuunnosfunktiota voidaan kuvata seuraavasti:
# Binarisointifunktio 1-bittisille painoille def binarize_weights(W): alpha = W.mean() W_binarized = np.sign(W - alpha) return W_binarized
Painojen keskitetyssä ja skaalatussa yhdistelmässä kvantisointivirhe pysyy minimissään, säilyttäen suorituskyvyn.
Teollisuuden vaikutus
BitNet.cpp voi vaikuttaa laajasti LLM-mallien käyttöönottoon:
- Saatavuus: Mahdollistaa LLM-mallien suorittamisen standardilaitteilla, demokratisoiden pääsyn voimakkaaseen AI:hin.
- Kustannustehokkuus: Vähentää kalliiden GPU:iden tarvetta, laskeva kynnyskynnys omaksumiseen.
- Energiatehokkuus: Säästää energiaa hyödyntämällä standardin CPU-pohjaista inferenssiä.
- Innovaatio: Avaa uusia mahdollisuuksia laitteistopuoleisille AI-sovelluksille, kuten reaaliaikaiselle kielentunnistimelle, älykkäille avustajille ja tietosuojan kannalta keskeisille sovelluksille ilman pilariippuvuutta.
Haasteet ja tulevaisuuden suunta
Vaikka 1-bittiset LLM-mallit lupaavat paljon, useita haasteita on vielä voitettava. Niihin kuuluvat kestävien 1-bittisten mallien kehittäminen moninaisiin tehtäviin, laskentalaitteiden optimointi 1-bittiseen laskentaan ja kehittäjien kannustaminen omaksumaan tämän uuden lähestymistavan. Lisäksi 1-bittisen kvantisoinnin tutkiminen tietokonegrafiikassa tai äänitehtävissä edustaa mielenkiintoista tulevaisuuden suuntaa.
Johtopäätös
Microsoftin BitNet.cpp:n julkaisu on merkittävä edistysaskel. Sallimalla tehokkaan 1-bittisen inferenssin standardi-CPU:illa, BitNet.cpp luo AI:n saatavuuden ja kestävyyden. Tämä kehys asettaa pohjan tehokkaammille ja kustannustehokkaammille LLM-malleille, työntäen eteenpäin sitä, mitä on mahdollista laitteistopuoleisella AI:lla.













