Ierīces iebūvētās secināšanas optimizācija Apple Silicon ierīcēm

Pielāgots lokālais dzinējs, kas uzlabo aizpildīšanas un dekodēšanas caurlaidspēju.

AutoriPerplexity Engineering

Hibrīda skaitļošana Apple silicon arhitektūrā orķestrē uzdevumu starp robežu intelektu mākonī un lokālu modeli Mac datorā. Mākoņa modeļi apstrādā pētījumus un spriešanu, savukārt lokāls modelis darbojas ar privātajiem failiem un lietotnēm Mac datorā.

Lai šis darba sadalījums šķistu nemanāms, lokālajai secināšanai ir jāiet kopsolī ar pārējo uzdevumu. Tam ir nepieciešams dzinējs, kas var ātri apstrādāt uzvednes un uzturēt augstu tokenu ģenerēšanas ātrumu.

Mūsu vieglais lokālās secināšanas dzinējs Lily ir izstrādāts speciāli Apple Silicon un Qwen3.6-35B-A3B ar atsevišķām optimizācijām sagatavošanai un dekodēšanai. Atsevišķs demo ir publiski pieejams vietnē GitHub.

Ievads

Izplatīts veids, kā darbināt LLM Mac datorā, ir MLX — Apple atvērtā koda mašīnmācīšanās ietvars Apple silicon. Tās papildinošā bibliotēka MLX-LM pievieno komponentus, kas nepieciešami, lai ielādētu un ģenerētu tekstu ar plašu valodu modeļu klāstu. Kopā MLX un MLX-LM nodrošina gatavu, vispārējas nozīmes steku lokālai LLM secināšanai.

Qwen3.6-35B-A3B ir reta, hibrīdais modelis: tas izmanto ekspertu maisījuma (MoE) maršrutēšanu un apvieno fiksēta izmēra rekurentos stāvokļus ar pilnu uzmanību (attention). Šīs arhitektūras izvēles samazina nepieciešamo skaitļošanas apjomu, taču tās rada arī neregulāras darba slodzes. Tokeni tiek virzīti uz dažādiem ekspertu svariem, un rekurentie stāvokļi pēc dabas ir secīgi.

MLX-LM jau atlasa optimizētus kodolus secināšanas fāzēm un parastajām darba slodzes formām, taču tā atkārtoti lietojamām operācijām ir jāatbalsta daudzas modeļu arhitektūras. Dzinējs, kas veltīts Qwen, var specializēties modeļa un izpildlaika līmenī, koordinējot kodolus, datu kustību un plānošanu ap modeļa fiksēto struktūru.

Lily īsteno šo specializāciju no gala līdz galam vienā procesā. Rust izpildlaiks ielādē modeļa kontrolpunktu un pārvalda sesijas stāvokli un ģenerēšanas ciklu, OpenAI saderīga tērzēšanas pabeigšanas API pieņem pieprasījumus un straumē tokenus, un pielāgoti Metal kodoli izpilda Qwen specifiskas operācijas. Ne PyTorch, ne MLX neatrodas izpildes ceļā.

Kur vispārīgums un specializācija atrodas abos secināšanas steks. MLX-LM apraksta modeli kā kompozīcijas MLX masīva operācijas, kuras MLX plāno, izmantojot atkārtoti lietojamus kodolus. Tā vietā Lily ievieto modeļa struktūru, fāzei specifiskus izpildes plānus un kodola izvēli vienā Rust runtime izpildlaikā, kas veidots ap Qwen un Apple silicon.

Mēs mērām aizpildīšanas un dekodēšanas veiktspēju atsevišķi. Aizpildīšanas caurlaidspēja atspoguļo, cik ātri dzinējs apstrādā uzvedni; dekodēšanas caurlaidspēja atspoguļo, cik ātri tas ģenerē izvades tokenus.

Mēs veicam Qwen3.6-35B-A3B veiktspējas salīdzinājumu uz viena MacBook Pro ar M5 Max, 40 kodolu GPU un 128 GB vienotās atmiņas. Desmit uzvednes garumos priekšielādei un desmit konteksta garumos dekodēšanai, no 256 līdz 128K tokeniem (K = 1,024), dzinējs vidēji sasniedz 1.22× MLX-LM priekšielādes caurlaidspēju un 1.32× tā dekodēšanas caurlaidspēju. Pie 4K tokenu uzvednes un 4K tokenu dekodēšanas konteksta pielāgotais dzinējs sasniedz 5,749.9 priekšielādes tokenus sekundē un 186.6 dekodēšanas tokenus sekundē, salīdzinot ar 4,737.5 un 140.9 MLX-LM. Vairāku soļu sesijā šie laika ietaupījumi uzkrājas ar katru papildu modeļa izsaukumu.

Aritmētiskais vidējais caurlaidspējas rādītājs pa desmit vienādi svērtajiem garumiem no 256 līdz 128K tokeniem. Lily vidēji sasniedz 4,135 priekšielādes tokenus/s salīdzinājumā ar 3,383 MLX-LM (1.22×), un 167.1 dekodēšanas tokenus/s salīdzinājumā ar 126.9 (1.32×). Priekšielāde mainās atkarībā no uzvednes garuma; dekodēšana mainās atkarībā no konteksta garuma.

Tālāk mēs paskaidrojam, kā Qwen arhitektūra rada modelim specifiskas optimizācijas iespējas Apple silicon arhitektūrā. Pēc tam mēs izskatām iegūtās aizpildīšanas un dekodēšanas izmaiņas. Mēs apskatām arī to, kur papildu optimizācija pārstāj atmaksāties, pirms noslēdzam ar salīdzinājumu no gala līdz galam pret MLX-LM.

Qwen specifiskas optimizācijas iespējas Apple silicon arhitektūrā

Qwen rada trīs atšķirīgas darba slodzes formas

Qwen3.6-35B-A3B satur 35 miljardus parametru, bet aktivizē tikai aptuveni 3 miljardus katram tokenam. Maršrutētājs novērtē 256 ekspertu apakštīklus un atlasa astoņus, blakus vienam koplietotam ekspertam, kas apstrādā katru tokenu. Šis retais MoE dizains samazina skaitļošanu, bet rada nevienmērīgu darbu: eksperti saņem dažādu tokenu skaitu, un katram tokenam ir nepieciešami svari no citas ekspertu kombinācijas.

Qwen apvieno arī 10 pilnas uzmanības slāņus ar 30 Gated DeltaNet slāņiem. Šie divi slāņu tipi saglabā agrāku informāciju dažādos veidos.

Uzmanības slāņi izmanto grupēto vaicājumu uzmanību (GQA). Qwen ir 16 vaicājumu galvenie mezgli un divi atslēgu un vērtību (KV) mezgli, un astoņi vaicājumu mezgli koplieto katru KV mezglu. Koplietošana padara KV kešatmiņu mazāku un ļauj atkārtoti izmantot kešatmiņā saglabātos datus visos vaicājumu mezglos. Kešatmiņa joprojām saglabā jaunas atslēgas un vērtības katram tokenam, tāpēc katrs dekodēšanas solis nolasa vairāk datu, augot kontekstam.

Tā vietā Gated DeltaNet saspiež agrāku informāciju fiksēta izmēra rekurentā stāvoklī. Apgūti vārti kontrolē, cik daudz no esošā stāvokļa saglabāt, savukārt delta atjauninājums iekļauj informāciju no pašreizējā tokena. Modelis definē šos atjauninājumus rekurenti, tāpēc katrs tokens ir atkarīgs no iepriekšējā tokena ražotā stāvokļa. Tomēr aizpildīšanas laikā dzinējs var novērtēt to pašu aprēķinu divos veidos. Tas var tieši skenēt tokenus, vienlaikus nesot stāvokli uz priekšu, vai pārkārtot atjauninājumus blokos, kas atklāj vairāk matricas operāciju un tokena līmeņa paralelisma. Kura pieeja ir ātrāka, ir atkarīgs no modeļa dimensijām, darba slodzes un aparatūras.

Kopā šīs struktūras veido trīs skaitļošanas modeļus: nevienmērīgas ekspertu grupas, uzmanību (attention) augošai kešatmiņai un fiksēta izmēra rekursiju, ko var novērtēt tieši vai blokos.

Apple silicon nodrošina dažādus ceļus dažādām darba slodzēm

Aizpildīšana vienlaikus apstrādā daudzas uzvednes tokenu aktivācijas rindas. Šeit apskatītā lokālā darba slodze parasti dekodē vienu pieprasījumu vienlaikus (batch 1) un apstrādā vienu jaunu rindu solī. Šī atšķirība maina to, kā tiek izmantoti tie paši modeļa svari. Aizpildīšana var atkārtoti izmantot katru svaru bloku simtiem vai tūkstošiem rindu. Dekodēšana lielā mērā to nespēj, jo katram jaunam tokenam ir nepieciešama cita caurlaide caur svariem.

Apple silicon novieto CPU un GPU aiz vienotās atmiņas, kas ir viena fiziskās atmiņas baseins, kurš pieejams abiem. Tas ļauj modelim palikt rezidējošam bez atsevišķas GPU kopijas uzturēšanas, taču tas nepadara datu kustību par brīvu. Svaru un starpposma vērtību nolasīšana joprojām patērē atmiņas joslas platumu, savukārt reģistri un cita mikroshēmas krātuve ir ātrāka, bet daudz mazāka.

M5 GPU nodrošina arī dažādus skaitļošanas ceļus. Aizpildīšanas lineārie slāņi izmanto vispārējo matricas un matricas reizināšanu (GEMM), lietojot svara matricu daudzām rindām vienlaikus. Saderīgi GEMM var izmantot Neural Accelerator katrā GPU kodolā, izmantojot Metal 4 tenzora operācijas. Batch-1 dekodēšana tā vietā izmanto vispārējo matricas un vektora reizināšanu (GEMV), lietojot tos pašus svarus vienai rindai. Ar nelielu svaru atkārtotu izmantošanu GEMV galvenokārt ierobežo atmiņas joslas platums, un tas ir vairāk piemērots GPU vektora aritmētiskās loģikas vienībām (ALU), nevis Neural Accelerators, kas paredzēti matricas operācijām ar lielāku datu atkārtotu izmantošanu.

Šie izpildes ceļi nav unikāli Lily. MLX darbojas ar to pašu vienoto atmiņu un atlasa optimizētas matricas un vektora kodolus atbilstoši darba slodzes formai. MLX-LM Qwen ieviešana jau grupē eksperta darbu, novērtē Gated DeltaNet ar sapludinātu rekurentu Metal kodolu un izmanto GQA apzinātu uzmanību. Šīs iespējas ir kopīgs sākumpunkts efektivizētai Qwen secināšanai Apple silicon.

Optimizācijas stratēģija

Lily šaurākais tvērums ļauj tai koordinēt šos kopīgotos izpildes ceļus ap Qwen precīzu arhitektūru un dimensijām. Tā izmanto fāzei specifiskus GPU ceļus, kartē Qwen eksperta, rekurentos un uzmanības darba slodzes, lai samazinātu datu kustību, un izvēlas kodolus un izkārtojumus no mērītās darba slodzes formas. Stratēģijai ir trīs daļas:

  1. Pieskaņot GPU ceļu secināšanas fāzei. Izmantot matricai orientētu izpildi, kad aizpildīšana var atkārtoti izmantot svarus starp daudzām rindām, un vektoram orientētu izpildi, kad batch-1 dekodēšana apstrādā vienu rindu vienlaikus.
  2. Kartēt Qwen struktūru uz GPU, vienlaikus minimizējot datu kustību. Saglabāt svarus saspiestus, līdz tie tiek izmantoti, organizēt novirzīto ekspertu darbu bez atgriešanās pie CPU, saglabāt Gated DeltaNet stāvokli mikroshēmā caur tā rekurento skenēšanu un atkārtoti izmantot KV datus, ko koplieto grupēto vaicājumu uzmanība.
  3. Pieskaņot kodolus darba slodzes formai. Katrā fāzē izvēlēties flīžu izmērus, izpildes izkārtojumus un uzmanības ceļus no pieejamā rindas skaita, rindu sadalījuma starp ekspertiem, operācijas dimensijām un pašreizējā konteksta garuma.

Šajās sadaļās ir paskaidrotas šīs izvēles. Optimizācijām, kas novērtētas saskaņotās ablācijās uz M5 Max, mēs novērtējam to ietekmi, salīdzinot citādi identiskas dzinēja konfigurācijas, kuras atšķiras tikai ar pētāmo optimizāciju. Tā kā šajos eksperimentos mūsu dzinēja versijas tiek salīdzinātas pašas ar sevi, tās izskaidro mehānismus, nevis sadala galvenos rezultātus pret MLX-LM.

Aizpildīšana: atkārtoti izmantot svarus un saglabāt maršrutēšanu uz GPU

Aizpildīšana atklāj daudzas tokenu rindas vienlaikus, taču Qwen novirza šīs rindas nevienmērīgi starp ekspertiem un atjaunina rekurento stāvokli caur secību. Tās optimizācijas iedalās trīs grupās: organizēt reto ekspertu darbu ap novirzītajām rindām, saglabāt Gated DeltaNet skenēšanu mikroshēmā un sadalīt garas uzvednes ierobežotos gabalos.

Izpilde un datu rezidence vienam ierobežotam aizpildīšanas gabalam caur Qwen slāni. Uzmanība pagarina KV kešatmiņu, savukārt Gated DeltaNet nēsā savu darba rekurento stāvokli reģistros. Ekspertu maršrutēšanas metadati paliek uz GPU, Q4 svari paliek iepakoti, līdz tie tiek dekvantizēti grupētajā GEMM, un pagaidu aktivācijas ir ierobežotas līdz pašreizējam gabalam.

Optimizēt reto ekspertu skaitļošanu

Dekvantizēt svarus matricas reizināšanas laikā

Qwen3.6-35B-A3B kontrolpunkts izmanto grupu skaitlisko affine 4 bitu kvantizāciju. Katrs svars tiek glabāts kā 4 bitu vesela skaitļa kods, savukārt katra 64 svaru grupa koplieto bfloat16 mērogu un novirzi, ko izmanto, lai rekonstruētu tās vērtības. Tas samazina 35 miljardu parametru modeli no aptuveni 70 GB bfloat16 svaru līdz 19,4 GB kontrolpunktam, padarot praktisku modeļa saglabāšanu rezidējošu Mac datorā.

Metal 4 tenzora operācija, ko izmanto matricas reizināšanai, patērē bfloat16 operandus, nevis iepakoto 4 bitu attēlojumu. Pirms reizināšanas GPU ir jārekonstruē svari bfloat16 formātā. Optimizētais grupētais GEMM Lily veic šo konvertēšanu pa vienai mazai svara flīzei un saglabā rezultātu mikroshēmas pavedienu grupas atmiņā tik ilgi, cik nepieciešams, lai reizinātu to ar novirzītajām aktivācijas rindām. Uzkrāšanai izmanto 32 bitu peldošo komatu, un izvade tiek ierakstīta bfloat16 formātā. Pilns paplašināto svaru masīvs nekad netiek izveidots vienotajā atmiņā.

Ablācijā dekvantizācija darbojas kā atsevišķa operācija: tā paplašina 4 bitu svarus bfloat16 masīvā vienotajā atmiņā, pēc kura matricas kodols nolasa šo masīvu atpakaļ. Ar 512 tokenu uzvedni dekvantizācijas pārvietošana uz grupēto GEMM palielināja gala līdz gala aizpildīšanas caurlaidspēju par 77,4%, novēršot šo starpposma ierakstīšanu un nolasīšanu.

Saglabāt ekspertu maršrutēšanu uz GPU

Grupētajam GEMM ir nepieciešams, lai katram ekspertam piešķirtās aktivācijas rindas tiktu glabātas kopā. Pēc astoņu ekspertu izvēles katram tokenam histogramma saskaita, cik uzdevumu nonāca pie katra eksperta. Prefiksa skenēšana pārvērš šos skaitļus sākuma nobīdēs, izkliedes solis ievieto rindas to ekspertu grupās, un bloku karte uzskaita fiksēta izmēra matricas blokus, kurus grupētajam GEMM ir jāapstrādā.

Optimizētais ceļš saglabā visu šo secību vienā komandu buferī, kas ir sakārtota GPU operāciju pakešu kopa, katram uzvednes gabalam. Tā vietā ablācija pauzē, lai CPU varētu pārbaudīt maršrutēšanas starpproduktus un iesniegt nākamo operāciju. Histogrammas un prefiksa skenēšanas saglabāšana uz GPU pievieno divus kodolus, bet noņem CPU un GPU sinhronizāciju katrā MoE slānī.

Ar 512 tokenu uzvedni GPU rezidējošas maršrutēšanas iespējošana palielināja gala līdz gala aizpildīšanu par 89%. Tas arī parāda, kāpēc kodolu skaits vien var būt maldinošs: ātrākais maršruts palaiž vairāk kodolu, bet nekad negaida CPU slāņa iekšpusē.

Pieskaņot flīzes izmēru eksperta slodzei

Ar 2K tokenu uzvedni katra tokena novirzīšana uz astoņiem no 256 ekspertiem rada 16 384 tokenu un ekspertu piesaistes vai vidēji 64 aktivācijas rindas uz vienu ekspertu. Faktiskais sadalījums ir nevienmērīgs: daži eksperti saņem daudzas rindas, bet citi saņem maz.

Grupētais GEMM sadala katra eksperta izvadi flīzēs, kas ir mazi matricas reizināšanas izvades taisnstūra bloki. Katra flīze tiek piešķirta vienai GPU pavedienu grupai. Apple silicon GPU pavedienu grupa satur vienu vai vairākas simdgrupas, katra sastāv no 32 pavedieniem, kas izpilda instrukcijas sinhroni.

Lielāki flīzes sadala iestatīšanas izmaksas starp vairākām rindām un atklāj vairāk paralelā darba, taču daļa no lielas flīzes paliek dīkstāvē, kad eksperts saņem tikai dažas rindas. Tāpēc flīzes izmērs un simdgrupas skaits ir savstarpēji saistīti.

Ablācija fiksē flīzi uz 16 rindām. Pret šo kontroli 32 rindu flīzes ar četrām simdgrupām iespējošana uzlaboja gala līdz gala aizpildīšanu par 13,2% pie 2K tokeniem.

Saglabāt rekurento stāvokli mikroshēmā

Aizpildīšanas laikā katrs Gated DeltaNet slānis skenē uzvedni secībā, vienlaikus nesot savu rekurento stāvokli uz priekšu. Ar atspējotu reģistra rezidenci ablācija izmanto blokveida skenēšanu. Ar 2K tokenu uzvedni šis ceļš pārvieto 256 MiB (mebibaitus) stāvokļa uz vienu slāni un atkārtoti aptur sadarbojošos pavedienus pie barjerām — sinhronizācijas punktiem, kur visiem iesaistītajiem pavedieniem ir jāgaida vienam uz otru.

Rekurentais stāvoklis ir matrica. Optimizētais kodols piešķir katrai kolonnai vienu simdgrupu. Simdgrupa sadala kolonnu starp tās pavedieniem, vienu reizi ielādē kolonnu to reģistros un pārvada stāvokli caur visu skenēšanu. Pavedieni apmainās ar starprezultātiem, izmantojot simdgrupas operācijas, nevis pavedienu grupas atmiņu, kas ir mikroshēmā koplietota krātuve visā pavedienu grupā. Pabeigtais stāvoklis tiek ierakstīts atpakaļ tikai pēc skenēšanas.

Stāvoklis un tā vārti izmanto 32 bitu peldošā komata formātu, jo secīgos atjauninājumos uzkrājas nelielas noapaļošanas kļūdas. Vaicājuma un atslēgas aktivācijas paliek bfloat16 formātā.

Ar 2K tokenu uzvedni reģistrā rezidējošās skenēšanas iespējošana uzlaboja gala līdz gala aizpildīšanu par 5,6%. Ekspertu GEMM veidoja aptuveni 90% no aizpildīšanas laika. Secīgā skenēšana neatklāj pietiekami daudz atkārtoti lietojamu matricas darbu, lai gūtu labumu no Neural Accelerators.

Ierobežot pagaidu atmiņu ar uzvednes sagabališanu

Izpildlaiks apstrādā garu uzvedni kā ierobežotu gabalu secību, nevis vienlaikus saglabā pagaidu datus katram uzvednes tokenam atmiņā. Modeļa svari paliek rezidējoši vienotajā atmiņā, savukārt rekurentais stāvoklis un KV kešatmiņa pārnēsā kontekstu no viena gabala uz nākamo. Neviens agrāks konteksts netiek atmests.

Bez gabalu sadalīšanas pagaidu aktivācijas masīvi aug ar pilnu uzvedni un konkurē ar modeļa svariem, rekurento stāvokli un KV kešatmiņu par vienoto atmiņu. Gabalu sadalīšana saglabā aktīvas tikai viena segmenta pagaidu vērtības vienlaikus, pēc tam atbrīvo vai atkārtoti izmanto šo krātuvi pirms nākamā segmenta apstrādes. Tas nosaka griestus maksimālajai darba atmiņai un ļauj dzinējam apstrādāt garākas uzvednes, nemainot modeļa izvadi.

Gabaliem sadalītā aizpildīšana ir populāra daudzos dzinējos un ir izšķiroša garu vairāku pagriezienu trajektoriju apkalpošanai šajās atmiņas ierobežotajās vidēs. Kopējais aizpildīšanas laiks uzmanības slāņiem paliek kvadrātisks no uzvednes garuma, ar zināmu papildu pieskaitāmo maksu no iepriekšējo gabalu atkārtotām KV ielādēm.

Dekodēšana: samazināt pārvietotās baitus uz vienu tokenu

Batch-1 dekodēšana apstrādā vienu jaunu rindu vienlaikus. Ar nelielu svaru atkārtotu izmantošanu tās caurlaidspēja galvenokārt ir atkarīga no tā, cik baitu dzinējs pārvieto katram tokenam. Dekodēšanas izmaiņas iedalās četrās grupās: optimizēt vienas rindas svara ceļu, saglabāt katru soli uz GPU, samazināt starpposma un stāvokļa trafiku un efektīvi nolasīt uzmanības kešatmiņu.

Datu plūsma vienam batch-1 dekodēšanas solim un diviem mehānismiem, kas samazina dīkstāvi un kešatmiņas trafiku. (A) GPU straumē Q4 svarus un modeļa stāvokli caur uzmanību, Gated DeltaNet, maršrutēšanu un sapludinātajiem ekspertu kodoliem, pēc tam ieraksta izvēlēto tokenu tieši nākamā soļa ievades slotā, vienlaikus nosūtot kopiju uz CPU. (B) Atkarību apzināta plānošana ļauj neatkarīgiem kodoliem pārklāties. (C) GQA iepakošana ļauj četriem vaicājumu galvenajiem mezgliem koplietot katru KV rindas ielādi, samazinot astoņus neatkarīgus pieprasījumus līdz divām koplietotām ielādēm.

Optimizēt vienas rindas svara ceļu

MLX jau nosūta vienas rindas darbu uz specializētiem matricas un vektora kodoliem. Tā kā Lily neizmanto MLX, pielāgotajam izpildlaikam ir jānodrošina tā pati pamata stratēģija. Mūsu rindas paralēlais GEMV ir paredzēts vienai aktivācijas rindai. Simdgrupa sadarbojas pie izvades, vienlaikus paralēli nolasot dažādas svara matricas daļas.

Saglabāt katru dekodēšanas soli uz GPU

Saglabāt tokena nodošanu uz GPU

Katrs dekodēšanas solis beidzas, izvēloties nākamo tokenu; nākamais solis sākas ar šo tokenu kā ievadi. Atlases nosūtīšana uz CPU un pēc tam atpakaļ uz GPU pievieno sinhronizācijas punktu katram tokenam. Tā vietā mūsu izpildlaiks mainās starp diviem komandu buferiem un diviem GPU rezidējošiem tokenu slotiem. GPU izvēlas visaugstāko punktu skaitu ieguvušo tokenu un ieraksta tā tokena ID tieši ievades slotā nākamajam dekodēšanas solim, kamēr CPU sagatavo nākamo darbu.

Pārklāt neatkarīgu GPU darbu

Vienā reģistrētā batch-1 dekodēšanas solī tokena ģenerēšana palaida 795 GPU kodolus. To atkarības veidoja 555 secīgus posmus, ļaujot dažiem kodoliem darboties vienlaikus. Tomēr Metal sērijveida izpildes režīms palaida katru kodolu secībā.

Optimizētais dekodēšanas ceļš reģistrē faktiskās datu atkarības vienlaicīgā Metal cauraidē. Neatkarīgas kodola palaišanas var darboties vienlaikus, kad GPU resursi to atļauj. Barjera tiek ievietota tikai tad, ja vēlākam darbam ir nepieciešams agrāks rezultāts.

Samazināt starpposma un stāvokļa trafiku

Atsevišķi kodoli bieži materializē starpproduktu: viens kodols ieraksta pagaidu rezultātu atmiņā, un nākamais nolasa rezultātu atpakaļ. Optimizētais dekodēšanas ceļš sapludina četras ķēdes: divas ekspertu ievades projekcijas ar to vārtu aktivāciju; ekspertu izvades projekciju ar tās maršrutēšanas rezultātu un koplietotā eksperta rezultātu; vaicājuma un atslēgas sagatavošanu pirms uzmanības; un rekurento atjauninājumu ar tā normalizāciju. Katrs sapludinātais kodols saglabā pagaidu vērtības reģistros, nevis sūta tās caur atmiņu.

Saplūšana arī saīsina atkarību grafiku: kad starpposma ieraksts pazūd, pazūd arī barjera, kas aizsargāja tā patērētāju.

Efektīvi nolasīt uzmanības kešatmiņu

Sapludināt uzmanības kešatmiņas nolasījumus

Uzmanība nolasa atslēgas un vērtības no KV kešatmiņas katra dekodēšanas soļa laikā. Ablācijā kaimiņu GPU pavedieni ne vienmēr pieprasa kaimiņu baitus, piespiežot atmiņas sistēmai apkalpot vairāk atsevišķu transakciju. Sapludināto ielāžu iespējošana liek blakus esošajiem pavedieniem pieprasīt blakus esošos baitus, lai aparatūra varētu apvienot to nolasījumus.

Bfloat16 konfigurācijā saplūšana palielināja atslēgas joslas platumu no 33,8 līdz 47,9 GB/s, palielināja vērtības joslas platumu no 42,0 līdz 61,8 GB/s un uzlaboja gala līdz gala dekodēšanu par 2,1% pie 3840 tokenu konteksta.

Iepakot vaicājumu galvenos mezglus, lai atkārtoti izmantotu KV rindas

Grupēto vaicājumu uzmanība (grouped-query attention) ļauj astoņiem vaicājumu galvenajiem mezgliem koplietot vienu KV mezglu. Ablācijā katrs vaicājuma mezgls darbojas atsevišķā simdgrupa, tāpēc visi astoņi neatkarīgi pieprasa to pašu kešatmiņā saglabāto KV rindu. Optimizētais kodols iepako četrus vaicājumu galvenos mezglus vienā pavedienu grupā, kas ielādē katru KV rindu vienu reizi un atkārtoti izmanto to četrās uzmanības aprēķinos. Otra pavedienu grupa apstrādā atlikušos četrus galvenos mezglus.

Šī tehnika, ko parasti sauc par GQA iepakošanu, veic to pašu aritmētiku un rada identiskus izvades baitus, vienlaikus samazinot astoņus neatkarīgus KV pieprasījumus līdz divām koplietotām ielādēm. Pret neiepakoto ablāciju tas uzlaboja gala līdz gala dekodēšanas caurlaidspēju par 23,8% pie 32K tokenu konteksta.

Pārslēgt uzmanības izkārtojumus garos kontekstos

Katrs dekodēšanas solis pilnas uzmanības slānī skenē esošo KV kešatmiņu. Fiksēta bloka izkārtojums sadala šo kešatmiņu vienādās daļās, kuras GPU var apstrādāt paralēli. Tā papildu plānošana nav lietderīga, ja kešatmiņa ir maza, bet fiksēta bloka izkārtojums vienmērīgāk līdzsvaro darbu, augot kontekstam.

Šim modelim izpildlaiks saglabā vispārējās uzmanības ceļu zem 32K tokeniem un izmanto fiksēta bloka ceļu pie 32K vai garākiem. Pārslēgšanās tiek lietota, ja katram mezglam ir 256 vērtības un astoņi vaicājumu mezgli koplieto KV mezglu; citas formas paliek vispārējajā ceļā. Ablācija atspējo šo slēdzi un vienmēr izmanto vispārējo ceļu. Fiksēta bloka maršruta iespējošana uzlaboja gala līdz gala dekodēšanu par 7,7% pie 32K, 27,4% pie 64K un 40,2% pie 128K.

Turpmākās optimizācijas robežas

Dažas izmaiņas uzlaboja izolētu operāciju, bet neuzlaboja secināšanu no gala līdz galam.

Spekulatīvā dekodēšana, kas izmanto mazāku modeli, lai ierosinātu tokenus pilnam modelim pārbaudei, padarīja batch-1 dekodēšanu par 18% lēnāku. Pārbaude apstrādāja no divām līdz piecām rindām lielas grupas, kas ir neefektīva forma šai aparatūrai, un rindas bieži izvēlējās dažādus ekspertus, palielinot nolasīto ekspertu svara datu apjomu. Projektētāja izvades vārdnīcas samazināšana uzlaboja projektētāja caurlaidspēju par 4,7–5,1%, bet nepadarīja pilnu spekulatīvo ciklu ātrāku. Šis rezultāts ir specifisks darba slodzei: mūsu paketētā Qwen izvietošana uz Blackwell izmanto spekulatīvo dekodēšanu citos apstākļos.

Citi eksperimenti ietvēra GPU palaišanas samazināšanu, veselu fāžu pārklāšanu, lielāku aizpildīšanas flīžu izmantošanu, plašākas saplūšanas piemērošanu, maršrutētāja paātrināšanu un izvades projekcijas apvienošanu ar tokena atlasi. Neviens no tiem neuzlaboja pilno secināšanas ciklu.

Aparatūras ierobežojumu mērījumi arī uzrādīja maz atlikušās rezerves galvenajās aizpildīšanas un dekodēšanas operācijās. MoE GEMM sasniedza 97,9% un 90,3% no ātrākajiem noturīgajiem svara nolasīšanas ātrumiem to piekļuves modeļiem. Aritmētikas noņemšana no retā GEMV mainīja caurlaidspēju tikai par 0,2%, apstiprinot, ka ierobežojošais resurss bija svara nolasīšana, nevis skaitļošana. Līdzīgi aizpildīšanas matricas reizināšana sasniedza 93% no teorētiskās matricas robežas izolācijā un 80–86% testētajos modeļos.

Veiktspēja no gala līdz galam

Salīdzinājums no gala līdz galam ielādē identiskus 4 bitu kontrolpunkta baitus abos dzinējos un darbina vienu pieprasījumu vienlaikus uz viena 40 kodolu, 128 GB M5 Max. Katrā kārtā abi dzinēji darbojas mainīgā secībā, lai samazinātu novirzi no fona slodzes un mikroshēmas temperatūras izmaiņām. Mēs salīdzinām ar MLX-LM ātrāko tiešās ģenerēšanas ceļu, nevis tā serveri, tāpēc mērījums koncentrējas uz modeļa izpildi, nevis apkalpošanas pieskaitāmajām izmaksām.

Apskate aptver desmit uzvednes garumus aizpildīšanai un desmit konteksta garumus dekodēšanai, no 256 līdz 128K tokeniem. Aizpildīšanas caurlaidspēja sākumā palielinās, dzinējam sadalot fiksētās iestatīšanas izmaksas starp vairākiem tokeniem. Aizpildīšana sasniedz maksimumu ap 4K tokenu uzvedni, pēc tam samazinās, jo desmit pilnas uzmanības slāņi veic vairāk darba, uzvednei augot. Dekodēšana paliek gandrīz plakana īsos kontekstos un samazinās, tiklīdz augošās KV kešatmiņas nolasīšana kļūst nozīmīga. Pielāgotais dzinējs ir ātrāks katrā reģistrētajā garumā.

Tā kā specializēta izpilde var mainīt peldošā komata operāciju secību, mēs pārbaudījām arī skaitlisko konsekvenci pret MLX-LM. Skolotāja uzspiestā salīdzinājumā abi dzinēji paredzēja nākamo tokenu no tās pašas references prefiksa katrā no 192 pozīcijām, neļaujot agrākām atšķirībām ietekmēt vēlākas ievades. Lily perpleksitāte bija tikai par 0,04% augstāka, un tas izvēlējās to pašu augstākā reitinga tokenu 96,35% testēto pozīciju.

Priekšielādes caurlaidspēja atbilstoši uzvednes garumam un dekodēšanas caurlaidspēja atbilstoši konteksta garumam Qwen3.6-35B-A3B Q4, batch 1, uz viena 40 kodolu, 128 GB M5 Max. Desmit garumos no 256 līdz 128K tokeniem Lily ir ātrāka katrā reģistrētajā punktā: 1.13–1.50× MLX-LM priekšielādes caurlaidspēja un 1.26–1.34× tā dekodēšanas caurlaidspēja. Salīdzinājumā tiek izmantots MLX-LM ātrākais tiešās ģenerēšanas ceļš. Abas horizontālās asis izmanto logaritmiskas skalas; neviena vertikālā ass nesākas no nulles.

Izveidots lokālajai platformai

Apple silicon nav mazāks datu centra GPU. Tā ir pilnīga lokālās secināšanas platforma ar savām aparatūras un programmatūras īpašībām. Vienotā atmiņa piešķir vienam mezglam ļoti augstu griestu robežu tam, cik daudz modeļa un stāvokļa tā var saglabāt. M5 Neural Accelerators absorbē blīvo matricas darbu aizpildīšanā. Vektora ALU apstrādā joslas platuma ierobežoto, zemas atkārtotas izmantošanas atlikumu dekodēšanā.

Qwen pievieno papildu iespējas specializācijai: saglabāt ekspertu maršrutēšanu un rekurento stāvokli uz GPU, novērst nevajadzīgus starpproduktus, pārklāt neatkarīgu darbu, atkārtoti izmantot koplietotos KV datus un pieskaņot kodolus darba slodzes formai.

Ar modelim un platformai specifisku optimizāciju viens Mac var efektīvi darbināt lielu retu modeli. Nākotnes darbs paplašinās pārklājumu starp modeļiem, mikroshēmām un apkalpošanas darba slodzēm, un pārvērtīs šeit apstiprinātos mehānismus vienā konfigurācijā vispārākā izpildlaika politikā.

Plašāks princips ir pieskaņot dzinējam gan modeļa arhitektūrai, gan aparatūras specifiskajiem skaitļošanas un atmiņas ceļiem. Attīstoties robežu atvērtā svara modeļiem un aparatūrai, augstas veiktspējas lokālā secināšana arvien vairāk būs atkarīga no dzinējiem, kas pielāgoti abiem, nevis tādiem, kas abstrahē to atšķirības.

Citāts

BibTeX
@online{perplexity2026OptimizingOnDeviceInferenceForAppleSilicon,
  author = {{Perplexity} and Yibo Wu and Lequn Chen and Kevin Hu and Phi Hoang and Claire Beamer and Jeremy Yang and Denis Yarats},
  title = {{Optimizing on-device inference for Apple Silicon}},
  date = {2026-09-01},
  url = {https://www.perplexity.ai/hub/blog/optimizing-on-device-inference-for-apple-silicon}
}