Optimizacija zaključivanja na uređaju za Apple Silicon

Прилагођени локални мотор који побољшава пропусност префила и декодирања.

АуториPerplexity Engineering

Хибридно рачунање на Apple silicon-у оркестрира задатак између водеће интелигенције у облаку и локалног модела на Mac-у. Модели у облаку руководе истраживањем и резоновањем, док локални модел ради са приватним датотекама и апликацијама на Mac-у.

Да би ова подела рада изгледала беспрекорно, локална инференција мора да прати темпо остатка задатка. То захтева мотор који може брзо да обрађује упите и одржава високу стопу генерисања токена.

Lily, naš lagani lokalni inferencijski mehanizam, napravljen je posebno za Apple silicijum i Qwen3.6-35B-A3B, sa zasebnim optimizacijama za popunjavanje i dekodiranje. Samostalna demo verzija je javno dostupna na GitHub.

Увод

Уобичајени начин покретања LLM модела на Mac-у је помоћу оквира MLX, Apple-овог оквира за машинско учење отвореног кода за Apple silicon. Његова пратећа библиотека, MLX-LM, додаје компоненте потребне за учитавање и генерисање текста са широким спектром језичких модела. Заједно, MLX и MLX-LM пружају већ спреман, општенаменски стек за инференцију локалних LLM модела.

Qwen3.6-35B-A3B је ретки хибридни модел: користи рутирање засновано на мешавини експерта (MoE) и комбинује рекурентна стања фиксне величине са пуном пажњом. Ови архитектонски избори смањују количину потребног рачунања, али такође стварају нерегуларна оптерећења. Токени се усмеравају ка различитим тежинама експерта, а рекурентна стања су по природи секвенцијална.

MLX-LM већ бира оптимизоване кернеле за фазе inferencije и уобичајене облике оптерећења, али његове поново употребљиве операције морају да подржавају многе архитектуре модела. Енџин посвећен Qwen-у може да се специјализује на нивоу модела и времена извршавања, координишући кернеле, кретање података и распоређивање око фиксне структуре модела.

Lily имплементира ову специјализацију од краја до краја у једном процесу. Рукружење у језику Rust учитава контролну тачку модела и управља стањем сесије и петљом генерисања, API за ћаскање компатибилан са OpenAI прихвата захтеве и стримује токене, а прилагођена Metal језгра извршавају операције специфичне за модел Qwen. Ни PyTorch ни MLX нису у путањи извршавања.

Где се општости и специјализација налазе у два стека инференције. MLX-LM описује модел као саставне MLX операције са низовима, које MLX заказује кроз језгра која се могу поново користити. Lily уместо тога смешта структуру модела, планове извршавања специфичне за фазу и избор језгара у јединствено Rust рукружење изграђено око модела Qwen и Apple silicon-а.

Меремо перформансе префила и декодирања одвојено. Пропусност префила хвата колико брзо мотор обрађује упит; пропусност декодирања хвата колико брзо генерише излазне токене.

Mjerimo Qwen3.6-35B-A3B na jednom MacBook Pro računaru sa M5 Max čipom, 40-jezgaranim GPU-om i 128 GB objedinjene memorije. Tokom deset dužina prompta za prefill i deset dužina konteksta za decode, od 256 do 128K tokena (K = 1,024), engine u prosjeku postiže 1,22× MLX-LM-ov throughput za prefill i 1,32× njegov throughput za decode. Pri promptu od 4K tokena i kontekstu za decode od 4K tokena, prilagođeni engine postiže 5.749,9 prefill tokena u sekundi i 186,6 decode tokena u sekundi, u poređenju sa 4.737,5 i 140,9 za MLX-LM. Tokom višekratne sesije, ove uštede vremena se akumuliraju sa svakim dodatnim pozivom modela.

Aritmetička sredina throughput-a preko deset jednako ponderisanih dužina od 256 do 128K tokena. Lily u prosjeku postiže 4.135 prefill tokena/s naspram 3.383 za MLX-LM (1,22×), i 167,1 decode tokena/s naspram 126,9 (1,32×). Prefill varira po dužini prompta; decode varira po dužini konteksta.

Затим објашњавамо како архитектура модела Qwen ствара могућности оптимизације специфичне за модел на Apple silicon-u. Потом пролазимо кроз настале промене префила и декодирања. Такође покривамо где додатна оптимизација престаје да се исплати пре него што завршимо поређењем од краја до краја са MLX-LM-ом.

Могућности оптимизације специфичне за Qwen на Apple silicon-у

Qwen ствара три различита облика оптерећења

Qwen3.6-35B-A3B садржи 35 милијарди параметара, али активира само око 3 милијарде за сваки токен. Рутер оцењује 256 експертских субмодела и бира осам, заједно са једним дељеним експертом који обрађује сваки токен. Овај ретки MoE дизајн смањује рачунање, али производи неуједначен посао: експерти примају различит број токена, а сваки токен захтева тежине из различите комбинације експерта.

Qwen такође комбинује 10 слојева пуне пажње са 30 слојева Gated DeltaNet. Ове две врсте слојева чувају претходне информације на различите начине.

Слојеви пажње користе пажњу са групасаним упитима (GQA). Qwen има 16 глава упита и две главе кључ-вредност (KV), при чему осам глава упита дели сваку KV главу. Дељење чини KV кеш мањим и омогућава да се кеширани подаци поново користе у различитим главама упита. Кеш и даље чува нове кључеве и вредности за сваки токен, тако да сваки корак декодирања чита више података како контекст расте.

Gated DeltaNet уместо тога сажима претходне информације у рекурентно стање фиксне величине. Научена капија контролише колико постојећег стања треба задржати, док ажурирање делта укључује информације из тренутног токена. Модел дефинише ова ажурирања рекурентно, тако да сваки токен зависи од стања произведеног од стране претходног токена. Међутим, током префила, мотор може проценити исто рачунање на два начина. Може директно скенирати кроз токене док носи стање напред, или реорганизовати ажурирања у блокове који излажу више матричних операција и паралелизма на нивоу токена. Који је приступ бржи зависи од димензија модела, оптерећења и хардвера.

Заједно, ове структуре стварају три рачунска обрасца: неуједначене експертске групе, пажњу над растућим кешом и рекурентност фиксне величине која се може процењивати директно или у блоковима.

Apple silicon пружа различите путање за различите врсте оптерећења

Префил обрађује многе редове активације токена упита одједном. Локално оптерећење које се овде разматра обично декодира један захтев у једном тренутку (серија 1) и обрађује један нови ред по кораку. Ова разлика мења начин на који се користе исте тежине модела. Префил може поново користити сваки блок тежина кроз стотине или хиљаде редова. Декодирање углавном не може, пошто сваки нови токен захтева други пролаз кроз тежине.

Apple silicon ставља CPU и GPU иза унификоване меморије, јединственог физичког меморијског базена доступног за оба. Ово омогућава да модел остане резидентан без одржавања посебне GPU копије, али не чини кретање података бесплатним. Читање тежина и међурезултата и даље троши меморијски пропусни опсег, док су регистри и други складишни простори на чипу бржи, али много мањи.

M5 GPU такође пружа различите путање рачунања. Линеарни слојеви префила користе опште множење матрица-матрица (GEMM), примењујући матрицу тежина на многе редове одједном. Компатибилни GEMM могу користити неуронски акцелератор у сваком GPU језгру кроз операције тензора Metal 4. Декодирање серије 1 уместо тога користи опште множење матрица-вектор (GEMV), примењујући исте тежине на један ред. Са мало поновног коришћења тежина, GEMV је ограничен углавном меморијским пропусним опсегом и боље одговара векторским аритметичко-логичким јединицама (ALU) GPU-a него неуронским акцелераторима дизајнираним за матричне операције са већом поновном употребом података.

Ове путање извршавања нису јединствене за Lily. MLX ради преко исте унификоване меморије и бира оптимизована матрична и векторска језгра према облику оптерећења. Qwen имплементација у библиотеци MLX-LM већ група експертски посао, процењује Gated DeltaNet помоћу стопљеног рекурентног Metal језгра и користи пажњу свесну GQA механизма. Ове могућности су заједничка полазна тачка за ефикасну Qwen инференцију на Apple silicon-у.

Стратегија оптимизације

Ужи опсег модела Lily му омогућава да координира ове дељене путање извршавања око тачне архитектуре и димензија модела Qwen. Користи путање за GPU специфичне за фазу, мапира експертска, рекурентна и оптерећења пажње модела Qwen како би минимизовао кретање података и бира језгра и распореде на основу измјереног облика оптерећења. Стратегија има три дела:

  1. Ускладите GPU путању са фазом инференције. Користите извршавање оријентисано на матрице када префил може поново користити тежине кроз многе редове, и извршавање оријентисано на векторе када декодирање серије 1 обрађује један ред у датом тренутку.
  2. Мапирајте структуру модела Qwen на GPU уз минимизирање кретања података. Задржите тежине компримованим док се не употребе, организујте усмерени експертски посао без враћања на CPU, задржите Gated DeltaNet стање на чипу кроз његово рекурентно скенирање и поново користите KV податке које деле главе упита са групасаним упитима.
  3. Прилагодите језгра облику оптерећења. Унутар сваке фазе, изаберите величине плочица, распореде извршавања и путање пажње из доступног броја редова, дистрибуције редова међу експертима, димензија операције и тренутне дужине контекста.

Следећи одељци објашњавају ове изборе. За оптимизације евалуиране у упареним аблацијама на M5 Max чипу, процењујемо њихове ефекте упоређивањем иначе идентичних конфигурација модела које се разликују само у оптимизацији која се проучава. Будући да ови експерименти упоређују верзије нашег модела са самим собом, они објашњавају механизме уместо да декомпонују коначне резултате у односу на MLX-LM.

Префил: поново користите тежине и задржите рутирање на GPU-у

Префил излаже многе редове токена одједном, али Qwen усмерава те редове неуједначено међу експертима и ажурира рекурентно стање кроз низ. Његове оптимизације спадају у три групе: организовање ретког експертског посла око усмерених редова, задржавање Gated DeltaNet скенирања на чипу и дељење дугих упита на ограничене делове.

Извршавање и резиденција података за један ограничен део префила кроз Qwen слој. Пажња проширује KV кеш, док Gated DeltaNet носит своје радно рекурентно стање у регистрима. Метаподаци експертског рутирања остају на GPU-у, Q4 тежине остају спаковане док се не декуантизују унутар групасног GEMM-а, а привремене активације су ограничене на тренутни део.

Оптимизујте ретко експертско рачунање

Декуантизујте тежине током множења матрица

Контролна тачка Qwen3.6-35B-A3B користи групну афину 4-битну квантизацију. Свака тежина се чува као 4-битни целобројни код, док свака група од 64 тежине дели bfloat16 скалу и померај који се користе за реконструкцију њених вредности. Ово смањује модел са 35 милијарди параметара са отприлике 70 GB bfloat16 тежина на контролну тачку од 19.4 GB, чинећи практичним да модел остане резидентан на Mac-у.

Metal 4 tensor операција која се користи за множење матрица користи bfloat16 операнде уместо упаковане 4-битне репрезентације. Пре множења, GPU мора поново да конструише тежине у bfloat16 формату. Оптимизовани grouped GEMM у Lily-ју изводи ову конверзију по једну малу плочицу тежина и држи резултат у on-chip threadgroup меморији само онолико дуго колико је потребно да се помножи са усмереним редовима активације. Акумулација користи 32-битни floating point, а излаз се уписује у bfloat16. Комплетан проширени низ тежина никада се не ствара у unified memory.

У аблацији, декуантизација ради као посебна операција: шири 4-битне тежине у bfloat16 низ у унификованој меморији, након чега матрично језгро поново чита тај низ. При упиту од 512 токена, премештање декуантизације у групасни GEMM повећало је пропусност префила од краја до краја за 77,4% елиминисањем овог међурезултата уписа и читања.

Задржите рутирање експерта на GPU-у

Групасни GEMM захтева да редови активације додељени сваком експерту буду ускладиштени заједно. Након избора осам експерта по токену, хистограм броји колико је додела отишло сваком експерту. Префикс скенирање претвара те бројеве у почетне офсете, корак расипања смешта редове у њихове експертске групе, а мапа блока листује матричне блокове фиксне величине које групасни GEMM мора да обради.

Оптимизована путања чува цео овај низ у једном баферу команде, уређеној серији GPU операција, за сваки део упита. Аблација уместо тога паузира како би CPU могао да инспектира међурезултате рутирања и пошаље следећу операцију. Задржавање хистограма и префикс скенирања на GPU-у додаје два језгра, али уклања CPU–GPU синхронизацију унутар сваког MoE слоја.

При упиту од 512 токена, омогућавање рутирања резидентног на GPU-у повећало је префил од краја до краја за 89%. Ово такође показује зашто сам број језгара може бити варљив: бржа рута покреће више језгара, али никада не чека CPU унутар слоја.

Ускладите величину плочице са експертским оптерећењем

При упиту од 2K токена, рутирање сваког токена на осам од 256 експерта производи 16.384 додела токен-експерт, или просек од 64 редова активације по експерту. Стварна дистрибуција је неуједначена: неки експерти примају много редова, док други примају мало.

Групасни GEMM дели излаз сваког експерта на плочице, које су мали правоугаони блокови излаза множења матрица. Свака плочица је додељена једној threadgroup групи на GPU-у. На GPU-овима Apple silicon-а, threadgroup група садржи једну или више simdgroup група, од којих свака се састоји од 32 треда који извршавају инструкције синхронизовано.

Веће плочице шире трошкове подешавања на више редова и износе више паралелног посла, али део велике плочице остаје неактиван када експерт прими само неколико редова. Величина плочице и број simdgroup група су стога повезани.

Аблација фиксира плочицу на 16 редова. Насупрот тој контроли, омогућавање плочице од 32 реда са четири simdgroup групе побољшало је префил од краја до краја за 13,2% на 2K токена.

Задржите рекурентно стање на чипу

Током префила, сваки Gated DeltaNet слој скенира упит редом док носи своје рекурентно стање напред. Са онемогућеним смештајем у регистрима, аблација користи блок-мудро скенирање. При упиту од 2K токена, та путања премешта 256 MiB (мебибајтова) стања по слоју и више пута зауставља тредве који сарађују на баријерама, тачкама синхронизације где сви тредови који учествују морају чекати једни на друге.

Рекурентно стање је матрица. Оптимизовано језгро додељује сваку колону једној simdgroup групи. Simdgroup група дели колону међу својим тредовима, учитава колону у њихове регистра једном и преноси стање кроз цело скенирање. Тредови размјењују међурезултате кроз operacije simdgroup групе уместо кроз меморију threadgroup групе, складиште на чипу дељено широм threadgroup групе. Завршено стање се уписује назад тек након скенирања.

Стање и његова капија користе 32-битни формат са покретном зарезом јер се мале грешке заокруживања кумулирају кроз секвенцијална ажурирања. Активације упита и кључева остају у bfloat16 формату.

При упиту од 2K токена, омогућавање скенирања смештеног у регистрима побољшало је префил од краја до краја за 5,6%. Експертски GEMM чинили су око 90% времена префила. Секвенцијално скенирање не излаже довољно матричног посла који се може поново користити да би имало користи од неуронских акцелератора.

Ограничите привремену меморију дељењем упита на делове

Рукружење обрађује дуг упит као низ ограничених делова уместо да чува привремене податке за сваки токен упита у меморији одједном. Тежине модела остају резидентне у унификованој меморији, док рекурентно стање и KV кеш носе контекст из једног дела у други. Претходни контекст се не одбацује.

Без дељења на делове, привремени низови активације расту са целим упитом и такмиче се са тежинама модела, рекурентним стањем и KV кешом за унификовану меморију. Дељење на делове чини активним само привремене вредности једног сегмента у датом тренутку, а затим ослобађа или поново користи то складиште пре обраде следећег сегмента. Ово ограничава вршну радну меморију и омогућава мотору да обрађује дуже упите без промене излаза модела.

Префил подељен на делове је популаран у многим моторима и кључан је за опслуживање дугих путања са више корака у овим меморијски ограниченим окружењима. Укупно време префила за слојеве пажње остаје квадратне зависности од дужине упита, уз извесни додатни рески из поновљених KV учитавања претходних делова.

Декодирање: минимизујте број пренетих бајтова по токену

Декодирање са серијом 1 обрађује један нови ред у датом тренутку. Са малом поновном употребом тежина, његова пропусност углавном зависи од тога колико бајтова мотор премешта за сваки токен. Промене декодирања спадају у четири групе: оптимизација путање тежина за један ред, задржавање сваког корака на GPU-у, смањење саобраћаја међурезултата и стања, и ефикасно читање кеша пажње.

Ток података за један корак декодирања са серијом 1 и два механизма која смањују време неактивности и саобраћај кеша. (A) GPU стримује Q4 тежине и стање модела кроз пажњу, Gated DeltaNet, рутирање и стопљена експертска језгра, а затим уписује изабрани токен директно у улазни слот следећег корака док шаље копију CPU-у. (B) Планирање свесно зависности омогућава преклапање независних језгара. (C) Паковање за GQA омогућава да четири главе упита деле свако учитавање KV реда, чиме се осам независних захтева смањује на два дељена учитавања.

Оптимизујте путању тежина за један ред

MLX већ прослеђује посао са једним редом специјализованим матрично-векторским језгрима. Пошто Lily не користи MLX, прилагођено рукружење мора пружити исту основну стратегију. Наш редни паралелни GEMV је дизајниран за један ред активације. Simdgroup група сарађује на излазу док паралелно чита различите делове матрице тежина.

Задржите сваки корак декодирања на GPU-у

Задржите примопредају токена на GPU-у

Сваки корак декодирања се завршава избором следећег токена; следећи корак почиње са тим токеном као улазом. Слање избора на CPU и затим назад на GPU додаје тачку синхронизације сваком токену. Наше рукружење уместо тога наизменично користи два бафера команде и два резидентна слот за токене на GPU-у. GPU бира токен са највишом оценом и уписује његов ID токена директно у улазни слот за следећи корак декодирања, док CPU припрема наредни посао.

Преклопи независни GPU посао

У једном забележеном кораку декодирања серије 1, генерисање токена покренуло је 795 GPU језгара. Њихове зависности су формирале 555 секвенцијалних фаза, остављајући неким језгрима слободу да се извршавају истовремено. Режим серијског извршавања Metal оквира је ипак покренуо свако језгро редом.

Оптимизована путања декодирања бележи стварне зависности података у конкурентном Metal пролазу. Независна лансирања језгара могу радити у исто време када GPU ресурси то дозвољавају. Баријера се убацује само када каснији посао захтева претходни резултат.

Смањите саобраћај међурезултата и стања

Одвојена језгра често материјализују међурезултат: једно језгро уписује привремени резултат у меморију, а следеће га поново чита. Оптимизована путања декодирања спаја четири ланца: две улазне експертске пројекције са њиховом гатираном активацијом; излазну експертску пројекцију са њеним резултатом рутирања и дељеним експертским резултатом; припрему упита и кључева пре пажње; и рекурентно ажурирање са његовом нормализацијом. Свако стопљено језгро чува привремене вредности у регистрима уместо да их шаље кроз меморију.

Фузија такође скраћује граф зависности: када међурезултат нестанак уписа, нестаје и баријера која је штитила његовог потрошача.

Ефикасно читајте кеш пажње

Спојите читања кеша пажње

Пажња чита кључеве и вредности из KV кеша током сваког корака декодирања. У аблацији, суседни GPU тредови не захтевају увек суседне бајтове, приморавајући меморијски систем да опслужи више одвојених трансакција. Омогућавање спакованих учитавања чини да суседни тредови захтевају суседне бајтове како би хардвер могао да комбинује њихова читања.

На конфигурацији bfloat16, спајање је повећало пропусни опсег кључева са 33,8 на 47,9 GB/s, повећало пропусни опсег вредности са 42,0 на 61,8 GB/s и побољшало декодирање од краја до краја за 2,1% при контексту од 3.840 токена.

Пакујте главе упита да поново користите KV редове

Пажња са групасаним упитима омогућава да осам глава упита дели једну KV главу. У аблацији, свака глава упита се извршава у посебној simdgroup групи, тако да свих осам независно захтева исти кеширани KV ред. Оптимизовано језгро пакује четири главе упита у једну threadgroup групу, која учитава сваки KV ред једном и поново га користи у четири прорачуна пажње. Друга threadgroup група обрађује преостале четири главе.

Ова техника, која се обично назива паковање за GQA, изводи исту аритметику и производи идентичне излазне бајтове док смањује осам независних KV захтева на два дељена учитавања. Насупрот распакованој аблацији, побољшала је пропусност декодирања од краја до краја за 23,8% при контексту од 32K токена.

Промените распореде пажње код дугих контекста

Сваки корак декодирања у слоју пуне пажње скенира постојећи KV кеш. Распоред са фиксним блоковима дели тај кеш на једнаке делове које GPU може да обрађује паралелно. Његово додатно планирање није исплатививо када је кеш мал, али распоред са фиксним блоковима равномерније балансира посао како контекст расте.

За овај модел, runtime држи општу путању пажње испод 32K tokena и користи fixed-block путању на 32K или више. Пребацивање се примењује када свака глава има 256 вредности и осам query глава дели KV head; други облици остају на општој путањи. Ablation онемогућава ово пребацивање и увек користи општу путању. Омогућавање fixed-block путање побољшало је end-to-end decode за 7,7% на 32K, 27,4% на 64K и 40,2% на 128K.

Границе даље оптимизације

Неке промене су побољшале изоловану операцију, али нису побољшале инференцију од краја до краја.

Спекулативно декодирање, које користи мањи модел за предлагање токена које ће пуни модел верификовати, учинило је декодирање серије 1 споријим за 18%. Верификација је обрађивала групе од два до пет редова, неефикасан облик за овај хардвер, а редови су често бирали различите експерте, повећавајући количину података експертских тежина које се читају. Смањење излазног вокабулара драфтера побољшало је пропусност драфтера за 4,7–5,1%, али није учинило комплетну спекулативну петљу бржом. Овај резултат је специфичан за оптерећење: наша серијски обрађена Qwen имплементација на Blackwell-у користи спекулативно декодирање под другачијим условима.

Други експерименти су укључивали смањење лансирања GPU-а, преклапање целих фаза, коришћење већих плочица префила, примену шире фузије, убрзавање рутера и комбиновање излазне пројекције са избором токена. Ниједан није побољшао комплетну петљу инференције.

Мерења хардверских граница такође су показала мало преосталог простора у главним операцијама префила и декодирања. MoE GEMM и GEMV операције достигле су 97,9% и 90,3% најбржих одрживих стопа читања тежина за њихове обрасце приступа. Уклањање аритметике из ретке GEMV операције променило је пропусност за само 0,2%, потврђујући да су читања тежина, а не рачунање, били ограничавајући ресурс. Множење матрица у префилу је такође достигло 93% теоретске границе матрице у изолацији и 80–86% унутар тестираних модела.

Перформансе од краја до краја

Поређење од краја до краја учитава идентичне 4-битне бајтове контролне тачке у оба мотора и покреће један захтев у датом тренутку на једном M5 Max чипу са 40 језгара и 128 GB. Унутар сваке рунде, два мотора раде наизменичним редоследом како би се смањила пристрасност од позадинског оптерећења и промена температуре чипа. Упоређујемо са најбржом путањом директне генерације за MLX-LM, а не са његовим сервером, тако да је мерење фокусирано на извршавање модела, а не на оптерећење опслуживања.

Преглед покрива десет дужина упита за префил и десет дужина контекста за декодирање, од 256 до 128K токена. Пропусност префила прво расте како мотор шири фиксне трошкове подешавања на више токена. Префил достиже врхунац око упита од 4K токена, а затим пада јер десет слојева пуне пажње извршавају више посла како упит расте. Декодирање остаје готово равно код кратких контекста и опада када читање растућег KV кеша постане значајно. Прилагођени мотор је бржи при свакој забележеној дужини.

Пошто специјализовано извршавање може променити редослед операција са покретном зарезом, такође смо проверили нумеричку конзистентност у односу на MLX-LM. У поређењу наметнутом од стране наставника, оба модела су предвидела следећи токен из истог референтног префикса на свакој од 192 позиције, спречавајући да претходне разлике утичу на касније улазе. Збуњеност (perplexity) модела Lily била је само 0,4% виша и изабрала је исти рангирани токен на 96,35% тестираних позиција.

Throughput za prefill po dužini prompta i throughput za decode po dužini konteksta za Qwen3.6-35B-A3B Q4, batch 1, na jednom M5 Max sistemu sa 40 jezgara i 128 GB. Tokom deset dužina od 256 do 128K tokena, Lily je brža na svakoj zabilježenoj tački: 1,13–1,50× MLX-LM-ov throughput za prefill i 1,26–1,34× njegov throughput za decode. Poređenje koristi MLX-LM-ovu najbržu putanju za direktnu generaciju. Obje horizontalne ose koriste logaritamske skale; nijedna vertikalna osa ne počinje od nule.

Направљено за локалну платформу

Apple silicon није мањи GPU за дата центар. То је потпуна локална платформа за инференцију са сопственим хардверским и софтверским карактеристикама. Унификована меморија даје једном чвору веома високу границу у погледу тога колико модела и стања може да ускладишти. M5 неуронски акцелератори апсорбују густ матрични посао у префилу. Векторске ALU јединице рукују остатком везаним за пропусни опсег са ниским степеном поновног коришћења у декодирању.

Qwen додаје додатне могућности за специјализацију: задржавање експертског рутирања и рекурентног стања на GPU-у, елиминисање непотребних међурезултата, преклапање независног посла, поновна употреба дељених KV података и прилагођавање језгара облику оптерећења.

Са оптимизацијом специфичном за модел и платформу, један Mac може ефикасно покретати велики ретки модел. Будући рад ће проширити покривеност на различите модела, чипове и оптерећења опслуживања, и претворити механизме ватиране овде на једној конфигурацији у општију политику рукружења.

Шири принцип је да се енџин усклади и са архитектуром модела и са специфичним путањама рачунања и меморије хардвера. Како се frontier open-weight модели и хардвер развијају, локална inferencija високих перформанси све више ће зависити од енџина прилагођених обома, а не од оних који апстрахују њихове разлике.

Цитирање

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}
}