AI:n perusteet

KV-välimuisti ei ole ongelma bittien kanssa, vaan geometrian kanssa.

mm
Lisää Unite.AI suosikkilähteisiisi Google-palvelussa

Saman 2-bittisen tarkin sekä yhden päätöksen valitsemisesta, minkä akselin mukaan kvantitoidaan, voi vaihdella benchmark-pistemäärän 2,88:sta 63,53:een. Avaimet ja arvot tarvitsevat vastakkaisia kohteluita — ja syy on huomioivassa yhtälössä, ei laitteistossa.

Ota Llama-2-13B. Ryhmitä sen avain-arvo-välimuisti kvantisaatioryhmän koko 32:ksi kahteen bittiin, jättäen kaiken muun paikalleen — sama malli, sama bittibudjetti, samat ryhmän koot, samat benchmarkit.

Riippuen yhdestä toteutusvaihtoehdosta, CoQA-tarkin tarkkuus johtaa joko 2,88:aan tai 63,53:een. Täysi tarkin tarkkuus on 66,37.

Päätös ei ole siinä, kuinka monta bittiä käytetään yhteensä. Kysymys on yksinkertaisesti, minkä akselin valitset ryhmiteltäväksi kunkin skaalakertoimen laskemiseen? Kun valitset kanavan ryhmittelyulottuvuudeksi (avaimet) ja tokenin ryhmittelyulottuvuudeksi (arvot), päädyt jonnekin neljän pisteen sisällä täyden tarkin suorituskyvystä. Jos käännät jommankumman näistä valinnoista, koet laadun heikkenemisen. Jos käännät molemmat näistä valinnoista, malli ei enää toimi.

Neljä tapaa käyttää samaa 2 bittiä samalle välimuistille. Tulokset Llama-2-13B:sta ryhmän koko 32:lla.

Kvantisointi on yleensä ajateltu vain yhtenä säätimellä: 8 bittiä, 4 bittiä, 2 bittiä, jossa on sileä tarkin tarkin heikkeneminen. KV-välimuistissa se ei ole samanlaista. Se on koordinaatistojen valitseminen, ja eri järjestelmät soveltuvat avaimiin ja arvoihin. Tämä artikkeli selittää, miksi. Lyhyesti: kvantisointivirhe riippuu arvojen vaihtelusta ryhmissä; avaimilla ja arvoilla on erilainen rakenne; ja ihmiset usein kompastelevat, koska oikeaa akselia ei voida johdeta arvon jakautumasta lainkaan. On tarkasteltava, miten virhe muuttuu huomion jälkeen. Tämä antaa yleisen periaatteen välimuistin purkamiseen ja hyvän syyn epäillä rekonstruktiovirhettä laadun osoittimena.

Miksi KV-välimuisti on se, missä tämä purkaantuu

Generointivaiheessa transformer tallentaa kaikki edellisissä prosesseissa käsiteltyjen tokenien avain- ja arvoprojektiot (KV) välimuistiin, jotta näitä tietoja ei tarvitse laskea uudelleen. Tämä välimuisti kasvaa suoraan kontekstin pituuden ja erän koosta riippuen. Lopulta tämä johtaa siihen, että välimuisti kasvaa suuremmaksi kuin malli itsessään.

Tämä kasvun lisääntyminen voidaan helposti tunnistaa tarkastelemalla mallin eri osien muistinkäyttöä. KVQuant-analyysissä LLaMA-7B:sta, painot ovat noin 98 prosenttia muistista sekvenssipituudella 512, ja aktivaatiot 2 prosenttia. 128K-kontekstissa suhde kääntyy noin 16 prosenttiin painoihin ja 84 prosenttiin KV-välimuistiin. Kun tarkastelemme KIVI -analyysia, jota KIVI -kirjoittajat siteeraavat, he löysivät samanlaisia tuloksia. Nimenomaan eräkoossa 512 ja 512-merkkisellä syötteellä KV-välimuisti saavuttaa 1,2 TB:n, useita kertoja mallin painojen koon.

Kapasiteetti on kuitenkin vain puolikas ongelma tässä. GPU:n on luettava koko KV-välimuisti laitteiston muistista jokaiselle tokenille, jonka se generoi. Tämä tarkoittaa, että kun GPU lukee KV-välimuistia, laskentaydin istuu tyhjillään. Näin ollen välimuistin kokonaiskoon vähentäminen lisää käytettävissä olevaa prosessointitilaa ja vähentää aikaa, joka kuluu datan siirtoon.

Mikä kvantisointivirhe on oikeasti tehty

Yhdenmukainen kokonaisluvuksen kvantisointi on matemaattisesti suoraviivaista. Ryhmän luvuille merkitään pienin luku nollapisteeksi ja sitten ryhmän vaihteluväli jaetaan edustettavien tasojen määrällä saadaksesi askelkoon. Kunkin alkion pyöristetään lähimpään askeltaso. Kahden välittömän seurauksen mukaan alkion virhe on rajoitettu puoleen askeltasoon. Toiseksi askeltaso on ryhmän vaihteluvälin ja 2^B – 1:n osamaara. 2 bittinä sinulla on vain 4 tasoa, joilla peittää mitä tahansa levitystä, joka on olemassa kyseisessä ryhmässä. Joten alkio, joka on sata kertaa suurempi kuin sen naapurit, ei vain suorita huonosti. Se paisuttaa askeltasoa kaikille muille alkioille, jotka jakavat saman ryhmän, ja kaikki muut alkion muuttuvat yhdessä karkeammaksi. Ryhmä on vahingon yksikkö. Akselin valitseminen tarkoittaa, mitkä alkion kärsivät yhdessä. Toisin sanoen, kysymys ei ole enää “kuinka monta bittiä voin uhrata?”, vaan “missä ovat ääriarvot ja voinko erottaa ne?”

Avaimet: Poikkeavat asuvat kiinteissä kanavissa

Suurten kielen mallien aktivaatiot ovat epätavallisen suuria verrattuna useimpiin aktivaatioihin. Sun ja kollegat katalogisivat nämä erittäin suuret aktivaatiot eri malliperheiden yli: Mixtral 8x7B: ssä suurin suuruus on lähellä 7000, kun taas mediaaniominaisuuden suuruus on noin 0,3 — noin neljä kertaluokkaa erolla. Nämä ovat erittäin harvinaisia; ne pysyvät kiinteissä ulottuvuuksissa, jotka harvoin muuttuvat syötteen mukaan, eivätkä ne ole tahattomia. Ne toimivat oletusarvoisina viittauksina ja ne kohdistavat huomion vain muutamaan tokeniin: huomion imeminen. Avainvälimuistissa tämä rakenne on erittäin selkeä: tiettyjen kanavien kautta kulkevat erittäin suuria suuruuksia johdonmukaisesti jokaisen tokenin yli sekvenssissa. Ryhmitä tokenien mukaan, ja jokaisen ryhmän sisällä on nämä poikkeavat kanavat, joten jokaisen ryhmän askeltaso on määritetty poikkeavien kanavien mukaan, ja kaikki tavalliset kanavat maksavat sen. Ryhmitä kanavien mukaan, ja poikkeavat kanavat muodostavat oman ryhmänsä. Niiden sisäinen vaihtelu on suuri, mutta se on itsessään sisäinen; tavalliset kanavat jätetään yksin. Tulokset ovat samaa mieltä. KIVI raportoi keskimäärin 13,67 avainrekonstruktiovirhettä tokenien mukaan ryhmiteltynä 4,55 kanavien mukaan ryhmiteltynä, ja — mikä on tärkeintä — 47,00 huomioarvosanaa 9,60. Kvantisoimalla avaimet tokenien mukaan tuottaa noin viisi kertaa enemmän arvosanavirhettä. Arvosanat ovat samaa mieltä avaimien merkityksellisten mittareiden kanssa; kanavien kvantisointi menestyy molemmilla rintamilla.

Arvot: Missä intuitio menee rikki

Arvo-välimuisti ei näytä kanava-poikkeama-mallia. Se näyttää olevan melko tasainen. Omallaan, vaihteluvälin perusteella, voimme odottaa, että kumpikaan näistä akseleista tuottaa samanlaista laatua puristamisessa.

Ne eivät kuitenkaan. Riippumatta siitä, miten avainhallinta on toteutettu (2,80 ja 2,88 tulokset), arvojen puristaminen kanavien mukaan romuttaa mallin.

Ja tässä on koukku: jos mitat tämän menetyksen käyttämällä alkuperäisen tensorin raakaa rekonstruktiovirhettä, jolle kunkin arvon on puristettu, kanavien mukaan arvojen kvantisointi näyttää hieman paremmalta, 3,73 4,57:aan. Jos vahvistat puristamistasi tavallisella tavalla, valitset konfiguraation, joka tuhoaa mallin.

Arvo-välimuistin kvantisointivirhe Llama-2-13B:llä, mitattuna kahdella tavalla. Tallennetun tensorin mittari ja kulutetun tulosteen mittari eroavat yli kymmenen kertaa.

Ratkaisu on, että arvo-välimuisti ei koskaan lueta suoraan. Se kulutetaan matriisituloksena: huomio-ulos on painotettu arvovektoreiden summa tokenien yli, softmax-huomioarvot painoina. Tämän vuoksi relevantti virhe on se, joka esitetään tässä prosessissa, ei tensorien itsessään. Mitattuna huomio-ulosarvon mukaan järjestys kääntyi täysin toisin. Suhteellinen virhe, jonka KIVI raportoi huomio-ulosarvon vuoksi tokenien mukaan arvojen vektorikvantisoinnista, oli 3,55 49,89:aan kanavien mukaan kvantisoinnissa — yli 14 kertaa suurempi virhe siitä, mitä näytti paremmalta perustuen siihen, miten hyvin se oli puristettu.

Selitys on huomion harvinaisuus, jonka he mittasivat 84,3 prosentiksi. Suurin osa tietoa, joka sisältyy tulokseen, voidaan attribuoida muutamaan tärkeään tokeniin. Tokenien mukaan kvantisointi rajoittaa kunkin tokenin virheen kyseiseen tokeniin, joten virheet epämerkityksellisille tokenille kerrotaan lähelle nollaa huomioarvoilla ja häviävät käytännössä. Kanavien mukaan kvantisointi leviää kunkin tokenin virheen jaettuna kanavan skaalalla, joten huonosti edustetut tokenit saastuttavat tärkeiden tokenien edustuksen. Huomion harvinaisuus, joka tekee huomion tehokkaaksi, on sama ominaisuus, joka tekee tokenien mukaan kvantisoinnin turvalliseksi.

Siirrettävä opetus on laajempi kuin vain KV-välimuisti: mittaa puristamisvirhettä siellä, missä tensori kulutetaan, ei siellä, missä se tallennetaan. Oletus, jonka rekonstruktiovirhe tekee, on, että jokainen tensorin komponentti on yhtä tärkeä lopputuloksen muodostamisessa. Huomio ei tee sitä. Mikä tahansa alijärjestelmä, joka painottaa, porttaa tai harventaa syötettään, rikkoo tämän oletuksen. Lukijat, jotka ovat tuttuja aiemmasta artikkelistani havaintojen sokeudesta hakujärjestelmissä, tunnistavat, että nämä tulokset ovat samanlaisia kuin aiemmin kuvatut epäonnistumiset: helposti laskettavissa olevat mittarit, jotka raportoivat siitä, mitä ei ollut tarkoitettu.

Piiritys upotukset monimutkaistavat avaimet

On joitakin ongelmia Rotary Position Embeddings (RoPE) -tekniikan käytössä. RoPE pyörittää kanavapareja tokenien suhteellisen aseman mukaan. Tämä sekoittaminen hajoittaa osittain kiinteän kanavan rakenteen, joka teki kanavien mukaan avainkvantisoinnin toimivaksi alun perin — poikkeava kanava pyörii naapureidensa sekaan, ja naapurit perivät vaihtelun. KVQuantin vastaus on järjestys: kvantisoimalla avaimet ennen RoPE:n soveltamista ja soveltamalla RoPE:ä dekvantisoitumisen jälkeen. Kanavien mukaan avainkvantisoinnin, epäyhtenäisten tietotyyppien ja eristämällä pienen osan poikkeamia, he saavuttavat alle 0,1 perplexiteetin heikkenemisen 3 bittinä, ja mahdollistavat LLaMA-7B-palvelun jopa 1 miljoonan tokenin kontekstilla yhdellä A100-80GB:llä.

On myös tärkeää ymmärtää RoPE:n vaikutuksen tasoa. RotateKV -tutkimuksen kirjoittajat raportoivat 145 prosentin kasvun kvantisointivirheissä, kun RoPE lisättiin, ja totesivat, että poikkeavat kanavat eroavat eri huomio-otsikoiden välillä — siksi yhden jaetun rotaatiomatriisin soveltaminen kaikkialla on riittämätöntä, ja pään mukaiset rotaatiot tekevät paremmin.

Järjestelmän verotus ja miksi se ei ole yksityiskohta

Tokenien mukaan kvantisointi sopii dekoodaukseen hyvin. Kunkin tokenin saapuessa kvantisoitse se, lisää se sekvenssiin (tokenin ulottuvuuden mukaan), muuta mitään muuta.

Kanavien mukaan kvantisointi ei kuitenkaan sovi. Koska kanavan tilastot kattavat tokenia, joita ei ole vielä generoitu, et voi laskea skaalakertoimen, kun tokeni saapuu. KIVI:n ratkaisu on pitää viimeisimmät tokenit — jopa 128 — täydessä tarkkuudessa jäännösbuferissa, ja kvantisoida ryhmissä, kun tarpeeksi on kertynyt.

Käytännössä jäännösbuferista tulee kannattava, eikä vain sattumaa. GSM8K:lla Llama-2-7B:llä täysi tarkkuus on 13,50. Täysin kvantisoitu 2 bittiin oikeilla akseleilla se saa 5,76. Samat akselit ja samat bittit, plus jäännösbufer viimeisimmistä tokenista täydessä tarkkuudessa, saavat 12,74. Liukuvien ikkunoiden viimeisimmistä tokenista täydessä tarkkuudessa palauttaa suuren osan siitä, mitä menetettiin aggressiivisen kvantisoinnin kautta vaikeissa monivaiheisissa ongelmissa — mikä olisi järkevää, jos otetaan huomioon, mitkä tokenit olivat ketjun aritmeettisten operaatioiden huomion kohteena.

On merkittävä etu siinä, että kaikki nämä tehdään oikein — KIVI raportoi 2,6 kertaa vähemmän huippumuuria Llama-2-7B:lle, mikä mahdollistaa jopa neljän kertaiset eräkoot, sekä 2,35–3,47 kertaa paremman läpäisyn todellisessa palvelutehtävässä.

Mitä tehdä tämän kanssa

  1. Älä koskaan käytä yhtä kvantisoijaa molemmille. Käytä eri kvantisoijaa avaimille (kanavien mukaan) ja arvoille (tokenien mukaan). Putki, joka soveltaa yhtä kvantisoijaa “KV-välimuistiin”, on luultavasti jo uhraanut suurimman osan mahdollisesta laadusta, kun käytetään pientä määrää bittejä kunkin arvon edustamiseen.
  2. Kvantisoimalla avaimet ennen RoPE:ä. Tämä on oikeellisuuden kysymys, ei mieltymyksen.
  3. Säilytä täyden tarkin ikkuna viimeisimmistä generoituista tokenista. Vaikka tämän ikkunan säilyttäminen vie erittäin vähän muistia verrattuna siihen, kuinka suuri välimuisti voi olla, se on juuri tämä alue, joka tuottaa suuren osan tarkkuutta vaikeissa tehtävissä.
  4. Älä vahvista rekonstruktiovirhettä. Vahvista aina huomio-ulosarvon tai lopputehostuskyvyn perusteella. Tallennusmittari ei ole vain meluisa — arvojen kohdalla se osoittaa väärään suuntaan.
  5. Älä vahvista lyhyen kontekstin monivalintatehtävillä. KIVI-kirjoittajat välttivät tarkoituksella suljettuja tehtäviä, kuten MMLU, tässä arvioinnissa, koska yksittäinen dekoodausvaihe, joka lukee tulosteen logitehdit, harjoittaa välimuistia vain vähän. Mikä tahansa arviointi, joka ei rakenna välimuistia ajan myötä ja suorita sitten generointia siitä, ei koskaan pysty havaitsemaan systeemin suunnittelussa olevia virheitä.

Mihin työ on menossa

Vaikka on vielä jotain jäljellä geometrisen ongelman luonteesta, monet tutkijat jatkavat tutkimista siitä, miten poikkeavat kanavat ovat jakautuneet eri transformer-päiden välillä, ja miten laitteistojen rajoitukset vaikuttavat siihen, mitkä ryhmittelyt ovat halvimpia: InnerQ taittaa kanavakohtaisen avainnormalisoinnin avain- ja kyselypainoihin esitöissä. Näin ollen ei kulu lisäaikaa suoritusaikana. Lisäksi InnerQ tallentaa korkean tarkin ikkunan sekä viimeisimmistä generoituista tokenista että huomio-imevistä tokenista. Tehden näin InnerQ poistaa mahdollisuuden siitä, että poikkeamat imevien kanavissa saastuttavat naapureiden edustuksen.

Toiset ehdottavat, että sen sijaan, että tallennettaisiin koko välimuisti, meidän pitäisi tallentaa vain tarpeeksi tietoa voidaksemme uudelleenmateriaalisoida avain- ja / tai arvon tarpeen mukaan pienemmästä välimuistiedustuksesta.

Lopulta on tärkeää muistaa, että tarkkuus ei ole ainoa parametri, jota kvantisointi vaikuttaa. Äskettäin julkaistu tutkimus osoitti suuntautumisen heikkenemisen, joka johtui KV-välimuistin kvantisoimisesta. Lisäksi tämä tutkimus dokumentoi suuntautumisen heikkenemisen jopa tuotantoympäristöissä, joissa käytetään FP8-välimuisteja yhdessä koulutusvapaan palautusmenetelmän kanssa, joka palautti jopa 97 prosenttia siitä, mitä menetettiin suuntautumisessa. Näin ollen, vaikka konfiguraatio saattaa pitää kiinni benchmark-tuloksistaan, se ei välttämättä tarkoita, että se säilyttää kaikki muut olennaiset parametrit, joista pidät.

Yleinen periaate

Kvantisoinnin idea on kehystetty “tarkin budjetiksi”: kuinka monta bittiä voin uhrata? KV-välimuisti osoittaa, että hyödyllisempi kysymys on rakenteellinen. Tarkkuus on allokoitu ryhmissä; ryhmä on vahingon yksikkö, ja akseli, jonka mukaan ryhmittelet, määrää, mitkä alkion jakavat kohtalonsa. Oikea akseli on se, jolla tensori kulutetaan, eli se, miten käytät tensoria, eikä se, miten se näyttää tallennettuna muistiin. Avaimet käytetään pistetuloksena kyselyä vastaan. Yksittäinen vioittunut kanava myrkyttää kaikki tulokset. Arvot kulutetaan harsomaisena keskiarvona tokenien yli, softmax-huomioarvot painoina. Näin ollen yksittäinen vioittunut token on yksinkertaisesti painotettu ulos.

Kahden saman ulottuvuuden ja kahden peräkkäisen kerroksen generoimien tensorien välillä käytetään eri menetelmiä. On syytä kysyä kullakin aktivaatiolta, jonka aiot puristaa: mikä operaatio supistaa tämän pois, ja kunnioittavatko ryhmittelyni sitä?

Himanshu Goel on AI/ML-tutkija, joka on erikoistunut hakutuloksia täydentävään generointiin korkean panoksen aloilla, kuten biolääketieteellisissä, rahoituksellisissa ja sääntelydokumenttien työnkulkujen parissa.