ai.vostman.fi
Laskenta, muisti ja kontekstin hinta

RAM-muistin
hintakatastrofi
selitettynä.

Miksi tekoäly tarvitsee niin paljon muistia — ja voiko tarjonta koskaan pysyä perässä?

17. lokakuuta 20264 min lukuaika4 havainnollistavaa kuvaa
Laskenta pysähtyy; säilytetty konteksti yhdistää seuraavaan pyyntöönTokenivirta siirtyy GPU-laskentaan, säilytetään muistissa ja palautuu seuraavaan laskentaan.LASKEpyyntö suoritetaanSÄILYTÄkonteksti odottaasyöteKV-tilakäytä seuraavassa kutsussa
Pyyntö päättyy. Konteksti säilyy.
Unohtamisen hinta näkyy seuraavassa kutsussa.
Artikkelin sisältö
  1. Unohtamisen kallis puoli
  2. Välimuisti, joka katoaa ennen seuraavaa käyttöä
  3. Vähemmän muistitilaa, enemmän päättelyä

Koodausagentti muokkaa tiedostoa ja käynnistää testin. Sen seuraava viesti voi olla yhden rivin mittainen. Viestin taustalla oleva historia on paljon suurempi — ja sen käsittelyyn jo käytetty työ on yhä arvokasta.

Testin aikana GPU palvelee muita. Agentti kuitenkin palaa lähes saman historian kanssa: ohjeet, koodi, päätökset, työkalukutsut ja tulokset. Palvelun täytyy säilyttää historiaa edustava tila, siirtää se toiselle muistitasolle tai laskea se uudelleen.

Kun sama valinta toistuu suuren agenttijoukon kohdalla, muistipula alkaa näyttää erilaiselta. Muisti säilyttää jotakin itseään kalliimpaa: jo tehtyä laskentaa.

Unohtamisen kallis puoli

Transformerin KV-välimuisti sisältää aiempien tokenien avaimet ja arvot, joita attention-mekanismi tarvitsee. Niiden uudelleenkäyttö antaa mallin jatkaa aiemmin tehdystä työstä. Kehotteen välimuistitus ulottaa säästön myös saman alkuosan sisältävien API-kutsujen välille, kuten OpenAI:n dokumentaatio kuvaa.

Tila, joka säilyy tokenien välillä

KUVA 01
Yksinkertaistettu Transformer-kerros ja sen KV-välimuistiSyötteen esitykset projisoidaan kyselyiksi, avaimiksi ja arvoiksi. Vain avaimet ja arvot lisätään välimuistiin. Attention-mekanismi lukee kertyneet avaimet ja arvot ja välittää aktivaatiot eteenpäinkytkettyyn verkkoon. YKSI TRANSFORMER-KERROS · periaatekuva Piilotilauudet tokenit Q-, K-, V-projektiotopitut painot Q Attention-mekanismilue konteksti FFN / asiantuntijatmuunna jokainen token Seuraava kerrosaktivaatiot lisää K, V KV-välimuistivanha tila + uusi tila Säilyy tokenien välilläja sopivissa API-kutsuissa
Yksi attention-pää
Q: uusien tokenien kyselyt. K, V: näkyvän alkuosan avaimet ja arvot, uudet tokenit mukaan lukien. dh: kyselyn ja avaimen päädimensio. M: kausaalinen maski (0 sallituille paikoille, −∞ tuleville). ⊤: transpoosi. Softmax lasketaan avainpaikkojen yli.
Säilytä aiemman työn tulokset. K ja V kuljettavat historian eteenpäin. Jokainen uusi token tuottaa kyselyn, joka lukee säilytettyä tilaa.

Kontekstin kasvaessa eri asiat kasvavat eri tahtiin. KV-muistin määrä kasvaa lineaarisesti. Myös esitäytön projektiot ja feed-forward-operaatiot kasvavat lineaarisesti tokenimäärän mukana. Täydessä kausaalisessa attention-mekanismissa tokenit kuitenkin käsittelevät aiempia tokeneita: n tokenin kehote sisältää n(n + 1)/2 kysely–avainparia. Pituuden kaksinkertaistuessa tämän attention-laskennan määrä lähestyy nelinkertaista.

Tämä selittää myös, miksi uudet syötetokenit voivat maksaa vähemmän kuin tuotetut tokenit. Esitäytössä eli prefill-vaiheessa syöte tunnetaan jo, joten GPU voi käsitellä monia tokeneita yhdessä ja käyttää mallipainoja tehokkaasti uudelleen. Generoinnissa jokainen uusi token riippuu aiemmista: malli täytyy suorittaa uudelleen lukien painoja ja kasvavaa KV-välimuistia. Eri käyttäjien pyyntöjen eräkäsittely auttaa, mutta muistikapasiteetti ja vasteaika rajoittavat yhdistettävän työn määrää.

Seurataan nyt agenttia, jonka historia pitenee jatkuvasti. Lisätään aluksi yksi token kutsua kohti, jotta lasku näkyy selvästi. Ilman uudelleenkäyttöä jokainen kutsu laskee koko alkuosansa uudelleen. T kutsun aikana attention-parien määrä on:

Laske alkuosa uudelleen joka kutsussa
Kuutiollinen kasvu · johtava termi T³ / 6
T = kutsuja yhteensä; t = nykyinen kutsu väliltä 1–T. Yksi uusi token kutsua kohti. P laskee kausaaliset kysely–avainparit yhdelle attention-päälle yhdessä kerroksessa.

Neliöllinen attention-laskenta kasautuu kuutiollisesti, kun kasvava historia lasketaan toistuvasti uudelleen.

KV-välimuistia käytettäessä aiemmat rivit on jo laskettu. Kutsussa t vain uuden tokenin täytyy käsitellä t sijaintia. Saman työnkulun aikana:

Käytä alkuosaa; laske vain uusi rivi
Neliöllinen kasvu · johtava termi T² / 2
Samat kutsut ja parien laskutapa. Kun T = 100: uudelleenlaskenta 171 700 paria ja uudelleenkäyttö 5 050 — tasan 34× enemmän. Alla oleva kaavio käyttää samoja yhtälöitä.

Sadan kutsun kohdalla uudelleenlaskenta käyttää 171 700 paria ja uudelleenkäyttö 5 050: 34-kertainen määrä attention-laskentaa. Myös vakiokokoisten tokenilohkojen lisääminen säilyttää kuutiollisen ja neliöllisen kasautuvan kasvun eron. Harva attention ja pakatut arkkitehtuurit voivat muuttaa käyrää; tämä on täyden attention-mekanismin vertailutapaus.

Välimuistista huolimatta yhden tuotetun tokenin attention-kustannus kasvaa lineaarisesti aiemman historian mukana. Välimuisti säästää kaiken vanhan työn toistamiselta. Lineaarisesti kasvava muistimäärä suojaa yhä suurempaa määrää laskentaa.

Unohtaminen muuttaa kasvukäyrän

KUVA 02
Laske jokainen alkuosa uudelleen · kuutiollinen kokonaiskasvuKäytä alkuosaa uudelleen · neliöllinen kokonaiskasvu

Pidennä työnkulkua liukusäätimellä. Akselit pysyvät samoina; vaaleat viivat näyttävät koko 200 askeleen vertailun. Uudelleenkäytön käyrä pysyy lähellä nollaa tällä yhteisellä lineaarisella asteikolla.

Kumulatiivinen kausaalinen attention-laskenta kasvavassa agenttityönkulussa100 askeleessa uudelleenlaskenta tarvitsee 171 700 paria ja uudelleenkäyttö 5 050 paria. 1,4M700K0 050100150200Agentin askeleet →Kumulatiiviset attention-parit
5 askelta200 askelta
171 700
Laske alkuosat uudelleen
5 050
Käytä aiempaa tilaa
34×
Attention-laskennan määrä ilman uudelleenkäyttöä

Pidennä työnkulku 100 askeleesta 200:aan: uudelleenlaskenta vaatii 7,88-kertaisen ja uudelleenkäyttö 3,98-kertaisen attention-laskennan.

Laske kukin pari kerran — tai uudelleen joka kutsussa. Yksi uusi token askeleessa. Molemmat käyrät käyttävät samoja yhtälöitä kuin teksti.

Välimuisti, joka katoaa ennen seuraavaa käyttöä

Yhden kontekstin säilyttäminen on suoraviivaista. Kokonaisen joukon pitäminen muistissa on vaikeampaa. Kun agentti A odottaa testiä, B lukee tiedostoa ja C saa selaimen tuloksen. Jokainen tarvitsee oman tilansa uudelleen.

Välimuisti voi tallentaa A:n tilan, poistaa sen B:n ja C:n tieltä ja havaita sitten A:n palanneen. Palvelu joutuu toistamaan juuri hylkäämänsä työn. EfficientAgentin rinnakkaisten koodausagenttien kokeet tutkivat tätä työjoukko-ongelmaa: isäntämuistin välimuistin täytyy kattaa tila, jota agentit käyttävät uudelleen työkalujen odotusaikojen yli.

Toimiva hierarkia käyttää GPU-muistia aktiiviseen attention-laskentaan, isäntämuistia äskettäin käytettyihin konteksteihin ja NVMe-levyjä harvemmin käytettyyn tilaan. NVIDIA Dynamo tukee tällaista porrastusta. Kopio voi olla alemmalla tasolla jo ennen ylemmän kopion poistamista, jolloin GPU-tilan vapauttaminen ei odota uutta kopiointia.

Siirtokustannuksen mittakaavaksi sopii 288 Gt, yhden GPU:n muistikapasiteetti NVIDIAn GB300-vertailualustassa. Sen täyttö kestää oletuksillamme täydestä, tasan jaetusta kaistasta noin 1,5 sekuntia RAM-muistista tai 20 sekuntia NVMe-levyltä. Kapasiteetti ja kaistanleveys voivat palvella yhtä agenttia tai monia.

Isäntämuisti antaa palvelun vapauttaa GPU-muistia hylkäämättä hyödyllistä työtä. Monien lomittain toimivien agenttien joukossa seuraavaa kutsua odottava tila muodostaa itsessään merkittävän resurssin.

Vertaamalla OpenAI:n välimuistisyötteen hinnoittelua laitteiston vuokrakuluihin, joiden vertailukohtana on Verda, edullinen suomalainen hyperskaalaaja, saimme arvioksi noin 2 Mt KV-tilaa tokenia kohti, kun säilytysaika GPU-muistissa on 30 sekuntia ja RAM-muistissa kaksi minuuttia. Pidemmästä säilytysajasta huolimatta välimuistin säilyttäminen RAM-muistissa maksaa vain noin 30 % GPU-muistissa säilyttämisen hinnasta.

Yhden agentin odottaessa muut jatkavat

KUVA 03
Lomittaiset agentit ja välimuistin säilyminenAgentti A suorittaa kutsun ja odottaa työkalua, kun B ja C suorittavat omiaan. Sitten A palaa. Jos välimuisti säilyi, A käyttää sitä uudelleen. Jos se poistettiin kaikilta tasoilta, alkuosa lasketaan uudestaan. AIKA → Agentti AAgentti BAgentti C mallikutsutyökalu suorittaa · ei generointiaseuraava mallikutsu lue / generoiseuraava kutsu lue / generoi A:n kontekstisäilytä tila A:n paluuseen astiSäilytetty → uudelleenkäyttö. Poistettu kaikilta tasoilta → laske alkuosa uudelleen.
Kapasiteetin on katettava myös paluu. Muut agentit luovat tilaa A:n työkalua odotettaessa. Välimuisti, joka poistaa A:n tilan ennen seuraavaa kutsua, ei tuota odotettua laskentasäästöä.

Säilytä tila seuraavaa kutsua varten

KUVA 04
Säilytetty tila GPU-muistissa, isäntämuistissa ja NVMe-levylläAktiivinen attention-laskenta käyttää GPU-muistissa olevaa tilaa. Isäntämuisti säilyttää uudelleenkäytettävän tilan kutsujen välillä, ja NVMe toimii seuraavana tasona. GPU-muistiaktiivinen attention-laskenta Isäntäkoneen RAMsäilytys kutsujen välillä NVMepidempi säilytys Säilytä hyödyllinen työ GPU:n palvellessa muita pyyntöjä.
Säilytä työ kutsujen välillä. Seuraava pyyntö palauttaa aktiiviseen attention-laskentaan tarvitsemansa tilan.

Vähemmän muistitilaa, enemmän päättelyä

KV-tilan pakkaaminen tekee muistamisesta tehokkaampaa. DeepSeekin V4.1-Flash-mallin tekninen raportti kuvaa pakattua globaalia tilaa, kerrosten välistä uudelleenkäyttöä ja alemman tarkkuuden KV-tallennusta sekä menetelmiä, jotka pienentävät isäntämuistissa ja tallennuslaitteilla säilytettävää tilaa. Nämä edistysaskeleet vähentävät sekä hyödyllisen työn säilyttämiseen tarvittavaa tilaa että siirrettävän tilan määrää.

Päättelymallit muuttavat yhtälön toista puolta. Malli voi käsitellä kysymyksen kerran ja käyttää sen jälkeen paljon enemmän aikaa sen ratkaisemiseen ennen vastaamista. Tämä lisätyö tapahtuu prefill-vaiheen jälkeen. Sama syöte voi siis johtaa laskennallisesti paljon kalliimpaan vastaukseen.

Latentti päättelyketju tutkii välivaiheiden suorittamista sisäisten esitysten avulla sen sijaan, että jokainen vaihe ilmaistaisiin tekstinä. Lyhyttä vastausta voi edeltää huomattava määrä sisäistä laskentaa, jolloin näkyvien tokenien määrä kertoo tehdystä työstä entistä vähemmän.

Nämä kehityssuunnat muuttavat muistin ja laskennan välistä tasapainoa. KV-pakkaus vähentää hyödyllisen tilan säilyttämiseen tarvittavaa RAM-muistia, kun taas pidempi päättely kasvattaa tiettyyn kysymykseen vastaamisen laskentakustannusta. Latentti päättely voi muuttaa tätä suhdetta edelleen.

RAM-hintojen noustessa säilytettävän tilan pienentämisestä tulee arvokkaampaa. Kun mallit käyttävät enemmän aikaa päättelyyn, suurempi osa palvelun kustannuksista voi siirtyä laskentaan.

Tasapaino riippuu sekä arkkitehtuurista että muistin ja laskennan suhteellisista hinnoista.

Riippumaton tekninen tarkastelu · Lähteet on linkitetty tekstissä.
Email contact