Kuendesha mifano mikubwa ya lugha (LLMs) kwenye simu siyo tena jaribio la utafiti. Ni uhalisia wa bidhaa zinazozinduliwa. Lakini mara tu unapoacha kutumia mfano mdogo (toy demo) na kuanza kutengeneza bidhaa halisi, ucheleweshaji (latency) unajirudia. Ulipunguza ukubwa wa mfano, ukatumia quantization kwenye uzito (weights), lakini bado hatua ya prefill inachelewa. Tokeni zinakwama. UI inaganda. Mara chache makosa yanatolewa kwa upande sahihi.

Kwenye vifaa vya Android, uwezo wa kutoa hesabu (compute) mara chache sana ndio kikwazo wakati wa prefill ya LLM. Badala yake, ni upana wa mawasiliano ya kumbukumbu (memory bandwidth). SoCs za kisasa za daraja la juu (flagship) huja na viini vya GPU na NPU vyenye nguvu ambavyo vinaweza kufanya hesabu haraka zaidi kuliko mfumo wa kumbukumbu unavyoweza kuwapa data. Unapofanya uchambuzi (profile) wa utekelezaji wa kawaida wa attention, vitengo vya utekelezaji (execution units) havijajaa. Vinasubiri. Vinasubiri DRAM.

Kwa Nini Mfano Wako wa Quantized Bado Unahisiwa kuwa wa Polepole

Quantization imekuwa hatua ya kwanza ya kawaida kwa utambuzi (inference) wa ndani ya kifaa. Kupunguza uzito (weights) kutoka FP16 hadi INT8 hupunguza ukubwa wa mfano kwa nusu na kupunguza nafasi ya kuhifadhi. Inasaidia. Lakini hairekebishi ucheleweshaji wa tabaka la attention. Sababu ni rahisi: quantization inapunguza kiasi cha data unachohifadhi, lakini haipunguzi idadi ya miamala ya kumbukumbu (memory transactions) inayofanywa na mfumo wa attention.

Tabaka la kawaida la multi-head attention, likitekelezwa kwa njia ya vitabu, hufanya safari tatu kamili za kurudi kwenye DRAM kwa kila tabaka. Matrix za Query, Key, na Value husomwa kutoka kwenye kumbukumbu kuu, alama (scores) hupatikana, na matokeo ya kati huandikwa tena. Hesabu ni rahisi. Uhamishaji wa data ni mgumu sana. Kwenye Android, ambapo bajeti ya nguvu na joto ni finyu, mfumo huu unachosha njia ya mawasiliano ya kumbukumbu (memory bus). Kiprocessa kwa kiasi fulani analipia ushuru mara tatu ili kuvuka daraja lile lile.

Ikiwa umekuwa ukitumia mifano ya INT8 na unashangaa kwa nini hatua ya prefill bado inaongezeka kwa kasi ya mraba (quadratically) kulingana na urefu wa prompt, huu ndio jibu. Uzito ni mdogo, lakini msongamano wa activation unabaki kuwa mkubwa sana.

Kikwazo ni Kumbukumbu, siyo Hesabu

Ili kuelewa suluhisho, angalia roofline. GPU na NPU za simu kwenye chip kama Snapdragon 8 Gen 3 na Dimensity 9300 zina uwezo wa kutoa hesabu (compute throughput) wa kinadharia ambao unazidi sana kile ambacho viunganishi vyao vya LPDDR5X vinaweza kuhimili. Katika kernel ya kawaida ya attention, kila kichwa (head) hupiga hesabu ya softmax juu ya bidhaa ya Q na K, kisha huzidisha kwa V. Kila matrix ya alama ya kati hutengenezwa kwenye kumbukumbu ya jumla (global memory). Hiyo inamaanisha kuwa kusoma DRAM kwa kiwango cha juu kunazidi kulingana na mraba wa urefu wa mfuatano (sequence length), au O(n²). Kwa prompt ya tokeni 1024, msongamano wa kumbukumbu tayari ni mkubwa kiasi cha kutawala muda wa utekelezaji.

Viini (cores) havitumiki kikamilifu kwa sababu haviwezi kuficha ucheleweshaji. Prosessas za kisasa hutegemea cache ili kuweka mifumo (pipelines) ikiwa imejaa. Wakati algoriti inashindwa kupata data kwenye cache mara kwa mara na inachukua kutoka DRAM, vitengo vya utekelezaji vinakaa bila kazi. Hakuna kiasi cha quantization kinachoweza kurekebisha kutofautiana huku kwa kimuundo kati ya uwezo wa hesabu na upatikanaji wa kumbukumbu.

Jinsi Tiling Inavyorejesha Upana wa Mawasiliano (Bandwidth)

Suluhisho ni mkakati wa tiling unaohifadhi alama za kati kwenye