KV Cache na PagedAttention: Kwa Nini Seva Yako ya LLM Inapunguza Kasi
Seva yako ya LLM inafanya kazi kwa kasi ndogo.
Umeinstall modeli ya 70B kwenye A100 GPUs nne. Kila kitu kinaonekana sawa saa 2 asubuhi. Kufikia muda wa chakula cha mchana, latency inazidika mara mbili. Unakagua kumbukumbu (memory) yako. Sehemu kubwa inachukuliwa na "tensor buffers." Hizi kwa kweli ni hali zilizohifadhiwa (cached states) kutoka kwenye mazungumzo ya zamani.
Hili ndilo tatizo la KV cache. Ni kikwazo kikubwa zaidi katika utoaji wa huduma za LLM (LLM serving) za uzalishaji.
KV cache ni nini?
Kila modeli ya transformer inazalisha token moja baada ya nyingine. Ili kutengeneza token mpya, modeli inahitaji tensor za Key na Value kutoka kwa token zote zilizopita. Kukokotoa hizi kila wakati ni kuzidi kasi. Badala yake, injini inazihifadhi. Uhifadhi huu ndio KV cache.
Tatizo la kumbukumbu (memory):
Kwa modeli ya Llama 3.1 70B, mfuatano (sequence) mmoja wa token 4096 unahitaji takriban GB 1.3 ya kumbukumbu.
Ikiwa una watumiaji 256 kwa wakati mmoja, unahitaji GB 336 ya kumbukumbu. Hii ni zaidi ya kile A100 GPUs nne zinachoweza kuhifadhi. KV cache inakua kwa kasi sana kiasi kwamba mara nyingi hutumia kumbukumbu nyingi kuliko uzito wa modeli (model weights) wenyewe.
Usimamizi wa jadi wa kumbukumbu unashindwa kwa sababu:
- Fragmentation ya ndani: Unatenga nafasi kwa ajili ya token 4096 lakini unatumia 300 tu. Unapoteza 93% ya nafasi hiyo.
- Hakuna ushirikiano: Watumiaji wawili wenye system prompt inayofanana kila mmoja anahifadhi nakala yake mwenyewe ya prompt hiyo.
- Kuondoa kila kitu au hakuna kitu (All-or-nothing eviction): Kumbukumbu inapofika mwisho, lazima usogeze mfuatano mzima kwenda kwenye CPU. Hii inazuia utendaji wa GPU.
Jinsi PagedAttention inavyotatua hili:
PagedAttention inafanya kazi kama mfumo wa uendeshaji (operating system). Inagawa KV cache katika vizuizi vidogo vya ukubwa uliowekwa vinavyoitwa pages.
Hii inatatua matatizo makuu matatu:
- Ugawaji wa mahitaji (On-demand allocation): Mfuatano unachukua pages tu unapokua. Hupotezi kumbukumbu kwenye uwezo usiotumiwa.
- Usaidizi wa prefix inayoshirikiwa: Watumiaji wengi wanaweza kushiriki pages zilezile za kimwili kwa ajili ya system prompt ya pamoja. Hii hutumia mantiki ya "copy-on-write" ili kuokoa kiasi kikubwa cha kumbukumbu.
- Kuondoa kwa kina (Fine-grained eviction): Kumbukumbu inapokuwa imejaa, mfumo unahama pages ndogo kwenda kwenye CPU badala ya mfuatano mkubwa.
Matokeo:
Kutumia PagedAttention (teknolojia iliyo ndani ya vLLM) kunaweza kuongeza throughput mara 2 hadi 4 ikilinganishwa na mbinu za jadi.
Lini utumie:
- Ushindani mkubwa (High concurrency).
- Mfuatano wa urefu tofauti.
- Prompts zinazoshiriki mwanzo uleule.
Lini usitumie:
- Inference ya ndani ya mtumiaji mmoja.
- Modeli ndogo sana.
- Kazi ambapo kila mfuatano una urefu uleule kabisa.
KV Cache na PagedAttention: Kazi Zake na Kwa Nini Ni Muhimu
Unapozungumza na modeli kubwa ya lugha (LLM) kama ChatGPT, unajua jinsi inavyozalisha maandishi neno kwa neno (token by token). Lakini umewahi kujiuliza ni kwa nini inachukua muda fulani, au kwa nini inahitaji kiasi kikubwa cha kumbukumbu (VRAM) ili kufanya kazi?
Jibu linapatikana katika dhana mbili muhimu: KV Cache na PagedAttention.
KV Cache ni nini?
Ili kuelewa KV Cache, kwanza lazima tuelewe jinsi LLMs zinavyofanya kazi. LLMs hutumia mchakato unaoitwa autoregressive generation. Hii ina maana kwamba ili kuzalisha tokeni inayofuata, modeli lazima iangalie tokeni zote zilizopita.
Katika kila hatua ya utabiri (inference), modeli inapaswa kukokotoa (compute) vitu viwili muhimu kwa kila tokeni:
- Key (K)
- Value (V)
Kama modeli haina njia ya kukumbuka matokeo ya hesabu hizi za awali, itakulazimika kukokotoa kila kitu upya kwa kila tokeni mpya inayozalishwa. Hii ingekuwa gharama kubwa sana ya kicompyuta na ingepunguza kasi sana.
Hapa ndipo KV Cache inapoingia. Badala ya kukokotoa tena, modeli huhifadhi vekta za Key na Value za tokeni zote zilizopita kwenye kumbukumbu. Wakati wa kuzalisha tokeni inayofuata, modeli inachukua tu data iliyohifadhiwa kutoka kwenye KV Cache, jambo linalofanya mchakato kuwa wa haraka sana.
Changamoto ya KV Cache: Mgawanyiko wa Kumbukumbu (Memory Fragmentation)
Ingawa KV Cache inasaidia kasi, ina changamoto kubwa: matumizi makubwa ya kumbukumbu.
Kumbukumbu ya KV Cache inakua kadiri sentensi inavyozidi kuwa ndefu. Katika mifumo mingi, kumbukumbu hii hutengenezwa katika vipande vikubwa vilivyounganishwa (contiguous blocks) ili kurahisisha usimamizi. Hii inasababisha matatizo mawili:
- Internal Fragmentation: Tunatenga nafasi kubwa zaidi ya kile kinachohitajika (kwa mfano, tunatenga nafasi ya tokeni 512 hata kama sentensi ina tokeni 10 tu). Hii inasababisha upotevu wa kumbukumbu ambayo haiwezi kutumiwa na watumiaji wengine.
- External Fragmentation: Kumbukumbu inakuwa imegawanyika katika vipande vidogo vidogo vilivyoachwa hapa na pale, hivyo kufanya iwe vigumu kupata nafasi kubwa ya mfululizo kwa ajili ya sentensi ndefu.
Hii inamaanisha kuwa hata kama una VRAM nyingi, huenda usiweze kuendesha modeli kubwa au watumiaji wengi kwa wakati mmoja kwa sababu kumbukumbu imepotea kwenye "matundu" (fragmentation).
PagedAttention: Suluhisho la vLLM
Hapa ndipo PagedAttention inapoleta mapinduzi. Imetengenezwa na timu ya vLLM, mbinu hii inachukua mkazo kutoka kwenye mifumo ya uendeshaji (Operating Systems) ya kompyuta, hasa dhana ya Virtual Memory na Paging.
Inafanyaje kazi?
Badala ya kuhitaji nafasi kubwa ya mfululizo (contiguous space) kwa ajili ya KV Cache, PagedAttention inavunja KV Cache katika vizuizi vidogo (blocks). Vizuizi hivi vinaweza kuhifadhiwa mahali popote kwenye kumbukumbu (VRAM) bila kuhitaji kuwa karibu mmoja na mwingine.
Inatumia jedwali la kurasa (block table) ili kufuatilia vizuizi hivi. Kwa mfano:
- Tokeni 1-4 zinaweza kuwa kwenye Block A.
- Tokeni 5-8 zinaweza kuwa kwenye Block Z.
Modeli inatumia jedwali hili "kuunganisha" vizuizi hivyo wakati wa kufanya hesabu, kana kwamba viko pamoja, lakini kiuhalisia vimetawanyika kwenye kumbukumbu.
Faida za PagedAttention
- Ufanisi wa Kumbukumbu: Inapunguza upotevu wa kumbukumbu (fragmentation) hadi karibu sifuri. Hii inamaanisha unaweza kutumia karibu kila MB ya VRAM yako.
- Kiwango Kikubwa cha Utendaji (Higher Throughput): Kwa sababu unatumia kumbukumbu vizuri zaidi, unaweza kuendesha maombi mengi zaidi (requests) kwa wakati mmoja. Hii inafanya mifumo kama vLLM kuwa na kasi kubwa sana kuliko mifumo ya kawaida.
- Usimamizi Bora wa Kumbukumbu: Inaruhusu mbinu kama Copy-on-Write, ambayo ni muhimu sana wakati wa mchakato wa Parallel Sampling (pale modeli inapojaribu kuzalisha njia tofauti za sentensi kutoka kwenye prompt moja).
Hitimisho
KV Cache ni muhimu kwa kasi ya LLMs, lakini inaleta changamoto ya matumizi ya kumbukumbu. PagedAttention inatatua changamoto hiyo kwa kutumia mbinu ya paging, ikiruhusu matumizi bora zaidi ya VRAM na kuongeza uwezo wa mifumo ya AI kuhudumia watumiaji wengi kwa wakati mmoja.
Ili kujifunza zaidi kuhusu AI, jiunge na jamii yetu: https://t.me/GyaanSetuAi