Оптимизиране на инференцията на устройството за Apple Silicon
Персонализиран локален двигател, който подобрява пропусквателната способност при предварително попълване и генериране.
Хибридните изчисления на Apple silicon оркестрират задача между авангарден интелигентен облак и локален модел на Mac. Облачните модели се справят с изследванията и разсъжденията, докато локалният модел работи с лични файлове и приложения на Mac.
За да се усети това разпределение на труда безпроблемно, локалната инференция трябва да е в крак с останалата част от задачата. Това изисква двигател, който може да обработва промпти бързо и да поддържа висока скорост на генериране на токъни.
Lily, нашият лек локален двигател за инференция, е създаден специално за Apple silicon и Qwen3.6-35B-A3B, с отделни оптимизации за предварително попълване и генериране. Двигателят скоро ще бъде с отворен код.
Въведение
Често срещан начин за стартиране на големи езикови модели (LLM) на Mac е чрез MLX — рамката с отворен код на Apple за машинно обучение на Apple silicon. Нейната съпътстваща библиотека, MLX-LM, добавя компонентите, необходими за зареждане и генериране на текст с широк спектър от езикови модели. Заедно MLX и MLX-LM предоставят готов стек с общо предназначение за локална инференция на LLM.
Qwen3.6-35B-A3B е рядък (sparse), хибриден модел: той използва маршрутизиране тип „микс от експерти“ (Mixture-of-Experts или MoE) и съчетава рекурентни състояния с фиксиран размер с пълно внимание. Тези архитектурни избори намаляват необходимия обем изчисления, но същевременно създават неравномерни работни натоварвания. Токъните се насочват към различни експертни тегла, а рекурентните състояния имат последователен характер.
MLX-LM вече избира оптимизирани ядра за фазите на инференция и често срещаните форми на работно натоварване, но неговите операции за многократна употреба трябва да поддържат много архитектури на модели. Двигател, посветен на Qwen, може да се специализира на ниво модел и изпълнително време, координирайки ядрата, движението на данни и планирането около фиксираната структура на модела.
Lily реализира тази специализация от край до край в един единствен процес. Rust изпълнително време зарежда контролната точка на модела и управлява състоянието на сесията и цикъла на генериране, съвместим с OpenAI API за чат разговори приема заявки и предава поточно токъни, а потребителски ядра Metal изпълняват операции, специфични за Qwen. Нито PyTorch, нито MLX са в пътя на изпълнение.

Измерваме производителността на предварителното попълване и генерирането поотделно. Пропусквателната способност при предварително попълване улавя колко бързо двигателят обработва промпта; пропусквателната способност при генериране улавя колко бързо той генерира изходни токъни.
Тествахме Qwen3.6-35B-A3B на един MacBook Pro с чип M5 Max, оборудван с 40-ядрен графичен процесор и 128 GB обединена памет. При десет дължини на промпта за предварително попълване (prefill) и десет дължини на контекста за генериране (decode), от 256 до 128K токъна (K = 1,024), двигателите постигат средно 1.23× по-висока пропусквателна способност при предварително попълване и 1.35× при генериране в сравнение с MLX-LM. При промпт от 4K токъна и контекст за генериране от 4K токъна, специализираният двигател достига 5 749.9 токъна в секунда при предварително попълване и 186.6 токъна в секунда при генериране, в сравнение с 4 737.5 и 140.9 за MLX-LM. В рамките на многооборотна сесия тези спестени времеви ресурси се натрупват с всяко следващо извикване на модела.

След това обясняваме как архитектурата на Qwen създава възможности за оптимизация, специфични за модела, на Apple silicon. След това разглеждаме получените промени в предварителното попълване и генерирането. Също така обхващаме моментите, в които допълнителната оптимизация спира да носи полза, преди да завършим с цялостно сравнение с 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 поставя централния и графичния процесор зад обединена памет — единствен физически пул от памет, достъпен и за двата. Това позволява на модела да остане постоянен, без да се поддържа отделно копие на графичния процесор, но не прави движението на данни безплатно. Четенето на тегла и междинни стойности все пак консумира честотна лента на паметта, докато регистрите и другото хранилище на чипа са по-бързи, но много по-малки.
Графичният процесор M5 също така предоставя различни изчислителни пътища. Линейните слоеве на предварителното попълване използват общо матрично-матрично умножение (GEMM), прилагайки матрица на теглата към много редове наведнъж. Съвместимите GEMM операции могат да използват Невронния ускорител във всяко ядро на графичния процесор чрез тензорни операции Metal 4. Генерирането с пакет 1 вместо това използва общо матрично-векторно умножение (GEMV), прилагайки същите тегла към един ред. С малко повторно използване на теглата, GEMV се ограничава главно от честотната лента на паметта и е по-подходяща за векторните аритметично-логически устройства (ALU) на графичния процесор, отколкото за Невронни ускорители, проектирани за матрични операции с по-голяма многократна употреба на данните.
Тези пътища на изпълнение не са уникални за Lily. MLX работи със същата обединена памет и избира оптимизирани матрични и векторни ядра според формата на работното натоварване. Реализацията на Qwen в MLX-LM вече групира експертната работа, оценява Gated DeltaNet със сливащо рекурентно ядро Metal и използва внимание, съобразено с GQA. Тези възможности са споделената отправна точка за ефективна инференция с Qwen на Apple silicon.
Стратегия за оптимизация
По-тесният обхват на Lily ѝ позволява да координира тези споделени пътища на изпълнение около точната архитектура и размери на Qwen. Тя използва специфични за фазата пътища на графичния процесор, картографира експертните, рекурентните работни натоварвания и тези с внимание на Qwen с цел минимизиране на движението на данни, и избира ядра и оформления спрямо измерената форма на работното натоварване. Стратегията има три части:
- Съгласувайте пътя на графичния процесор с фазата на инференция. Използвайте матрично-ориентирано изпълнение, когато предварителното попълване може да използва теглата повторно в много редове, и векторно-ориентирано изпълнение, когато генерирането с пакет 1 обработва по един ред в даден момент.
- Картографирайте структурата на Qwen върху графичния процесор, като същевременно минимизирате движението на данни. Поддържайте теглата компресирани, докато бъдат използвани, организирайте работата на маршрутизираните експерти, без да се връщате към централния процесор, съхранявайте състоянието на Gated DeltaNet на чипа чрез неговото рекурентно обхождане и използвайте повторно KV данните, споделени от вниманието с групови заявки.
- Адаптирайте ядрата към формата на работното натоварване. В рамките на всяка фаза избирайте размери на плочките, оформления на изпълнението и пътища на вниманието от наличния брой редове, разпределението на редовете между експертите, размерите на операцията и текущата дължина на контекста.
Следващите раздели обясняват тези избори. За оптимизации, оценени в съчетани аблации на M5 Max, оценяваме ефектите им, като сравняваме иначе идентични конфигурации на двигателя, които се различават само по изследваната оптимизация. Тъй като тези експерименти сравняват версии на нашия двигател със самия него, те изясняват механизмите, вместо да декомпозират крайните резултати спрямо MLX-LM.
Предварително попълване: използване на теглата повторно и запазване на маршрутизирането на графичния процесор
Предварителното попълване разкрива много редове с токъни едновременно, но Qwen насочва тези редове неравномерно сред експертите и актуализира рекурентното състояние през последователността. Неговите оптимизации попадат в три групи: организиране на редките експертни задачи около маршрутизираните редове, запазване на обхождането на Gated DeltaNet на чипа и разделяне на дългите промпти на ограничени парчета.

Оптимизиране на редките експертни изчисления
Декуантизиране на теглата по време на матрично умножение
Контролната точка Qwen3.6-35B-A3B използва групова афинна 4-битова квантизация. Всяко тегло се съхранява като 4-битов цялочислен код, докато всяка група от 64 тегла споделя мащаб и отклонение във формат bfloat16, използвани за възстановяване на нейните стойности. Това намалява модела с 35 милиарда параметъра от приблизително 70 GB bfloat16 тегла до контролна точка от 19.4 GB, което прави практично поддържането на модела постоянно зареден на Mac.
Тензорната операция Metal 4, използвана за матрично умножение, консумира операнди bfloat16, а не опакованото 4-битово представяне. Преди умножението графичният процесор трябва да възстанови теглата във формат bfloat16. Оптимизираната групова GEMM в Lily извършва това преобразуване по една малка плочка с тегла наведнъж и запазва резултата в паметта за група от теми на чипа само колкото е необходимо, за да го умножи по редовете за активация. Акумулацията използва 32-битова плаваща запетая, а изходът се записва във формат bfloat16. Пълният разширен масив от тегла никога не се създава в обединената памет.
При аблацията декуантизацията работи като отделна операция: тя разширява 4-битовите тегла в масив bfloat16 в обединената памет, след което матричното ядро прочита този масив обратно. При промпт от 512 токъна преместването на декуантизацията в груповата GEMM увеличи пропусквателната способност на предварителното попълване от край до край със 77.4% чрез елиминиране на това междинно записване и четене.
Запазване на експертното маршрутизиране на графичния процесор
Груповата GEMM операция изисква редовете за активация, присвоени на всеки експерт, да се съхраняват заедно. След избирането на осем експерта на токън, хистограма преброява колко назначения са отишли при всеки експерт. Префиксен обход превръща тези преброявания в начални отмествания, стъпка на разпръскване (scatter) поставя редовете в техните експертни групи, а блоков масив изброява матричните блокове с фиксиран размер, които груповата GEMM трябва да обработи.
Оптимизираният път запазва цялата тази последователност в един команден буфер — подреден пакет от операции на графичния процесор — за всяко парче от промпта. Вместо това при аблацията се прави пауза, за да може централният процесор да инспектира междинните резултати от маршрутизирането и да подаде следващата операция. Поддържането на хистограмата и префиксния обход на графичния процесор добавя две ядра, но премахва синхронизацията между централния и графичния процесор във всеки MoE слой.
При промпт с дължина 512 токъна, активирането на маршрутизирането на графичния процесор увеличи цялостното предварително попълване с 89%. Това също така показва защо броят на ядрата сам по себе си може да бъде подвеждащ: по-бързият път стартира повече ядра, но никога не чака централния процесор вътре в слоя.
Съпоставяне на размера на плочката с експертното натоварване
При промпт от 2K токъна маршрутизирането на всеки токън към осем от 256 експерта води до 16 384 назначения на токън-експерт или средно по 64 реда за активация на експерт. Действителното разпределение е неравномерно: някои експерти получават много редове, докато други получават малко.
Груповата GEMM разделя изхода на всеки експерт на плочки (tiles), които са малки правоъгълни блокове от изхода на матричното умножение. Всяка плочка е присвоена на една група от теми (threadgroup) на графичния процесор. На графичните процесори с архитектура Apple silicon групата от теми съдържа една или повече simdgroup, всяка от които се състои от 32 теми, изпълняващи инструкции в синхрон (lockstep).
По-големите плочки (tiles) разпределят разходите за настройка върху повече редове и разкриват повече паралелна работа, но част от голяма плочка остава неактивна, когато даден експерт получи само няколко реда. Поради това размерът на плочката и броят на simdgroup са свързани.
Аблация задава плочката на 16 реда. Спрямо този контрол, активирането на плочката от 32 реда с четири simdgroups подобри цялостното предварително попълване с 13.2% при 2K токъна.
Запазване на рекурентното състояние на чипа
По време на предварителното попълване всеки слой Gated DeltaNet обхожда промпта по ред, като същевременно пренася своето рекурентно състояние напред. При деактивирано пребиваване в регистрите, аблацията използва блоков обход. При промпт от 2K токъна този път премества 256 MiB (мебибайта) състояние на слой и многократно спира сътрудничещите си теми на бариери — точки на синхронизация, в които всички участващи теми трябва да изчакват една друга.
Рекурентното състояние представлява матрица. Оптимизираното ядро присвоява всяка колона на една simdgroup. Simdgroup разделя колоната между своите теми, зарежда колоната в техните регистри веднъж и пренася състоянието през целото обхождане. Темите обменят междинни резултати чрез операции на simdgroup, вместо чрез памет за група от теми (threadgroup memory) — памет на чипа, споделена между група от теми. Завършеното състояние се записва обратно чак след обхождането.
Състоянието и неговият гейт използват 32-битов формат с плаваща запетая, тъй като малките грешки при закръгляване се натрупват при последователни актуализации. Активациите за заявка и ключ остават във формат bfloat16.
При промпт от 2K токъна, активирането на обхождането в регистрите подобри цялостното предварително попълване с 5.6%. Експертните GEMM операции представляваха около 90% от времето за предварително попълване. Последователното обхождане не излага достатъчно занимични матрични задачи, за да се възползва от Невронните ускорители (Neural Accelerators).
Ограничаване на временната памет чрез разделяне на промпта на парчета
Изпълнителното време обработва дълъг промпт като последователност от ограничени парчета, вместо да пази временни данни за всеки токън от промпта в паметта едновременно. Теглата на модела остават постоянни в обединената памет, докато рекурентното състояние и KV кешът пренасят контекст от едно парче към следващото. Никакъв предишен контекст не се изхвърля.
Без разделяне на парчета, временните масиви за активация нарастват с целия промпт и се конкурират с теглата на модела, рекурентното състояние и KV кеша за обединената памет. Разделянето поддържа активни временните стойности само на един сегмент в даден момент, след което освобождава или използва повторно това хранилище преди обработката на следващия сегмент. Това ограничава пиковата работна памет и позволява на двигателя да обработва по-дълги промпти, без да променя изхода на модела.
Предварителното попълване на парчета е популярно в много двигатели и е от решаващо значение за обслужване на дълги многооборотни траектории в тези среди с ограничена памет. Общото време за предварително попълване на слоевете с внимание остава квадратно спрямо дължината на промпта, с известен допълнителен овърхед от повтарящи се KV зареждания на предишни парчета.
Генериране: минимизиране на преместените байтове за токън
Генерирането с пакет 1 обработва по един нов ред на път. С малко повторно използване на теглата, неговата пропусквателна способност зависи главно от това колко байта премества двигателят за всеки токън. Промените в генерирането попадат в четири групи: оптимизиране на пътя на теглата с един ред, задържане на всяка стъпка на графичния процесор, намаляване на трафика на междинните данни и състоянието, и ефективно четене на кеша за внимание.

Оптимизиране на пътя на теглата с един ред
MLX вече диспечира работа с един ред към специализирани матрично-векторни ядра. Тъй като Lily не използва MLX, персонализираното изпълнително време трябва да осигури същата основна стратегия. Нашата редово-паралелна GEMV е проектирана за един ред на активация. Една simdgroup си сътрудничи по изхода, докато чете различни части от тегловата матрица паралелно.
Запазване на всяка стъпка на генериране на графичния процесор
Запазване на предаването на токъни на графичния процесор
Всяка стъпка на генериране завършва с избирането на следващия токън; следващата стъпка започва с този токън като вход. Изпращането на избора към централния процесор и след това обратно към графичния процесор добавя точка на синхронизация към всеки токън. Вместо това нашето изпълнително време редува два командни буфера и два слота за токъни в паметта на графичния процесор. Графичният процесор избира токйна с най-висок резултат и записва неговия идентификатор (ID) директно във входния слот за следващата стъпка на генериране, докато централният процесор подготвя последваща работа.
Припокриване на независима работа на графичния процесор
В една регистрирана стъпка на генериране с пакет 1, генерирането на токън стартира 795 ядра на графичния процесор. Техните зависимости формираха 555 последователни етапа, което оставя някои ядра свободни да се изпълняват едновременно. Въпреки това серийният режим на изпълнение на Metal стартира всяко ядро по ред.
Оптимизираният път на генериране записва действителните зависимости на данните в едновременно преминаване през Metal. Независими стартирания на ядра могат да се изпълняват едновременно, когато ресурсите на графичния процесор го позволяват. Бариера се вмъква само когато по-късна работа изисква предишен резултат.
Намаляване на трафика на междинните данни и състоянието
Отделните ядра често материализират междинен резултат: едно ядро записва временен резултат в паметта, а следващото прочита резултата обратно. Оптимизираният път на генериране слива четири вериги: двете входни проекции на експертите с тяхната гейтвана активация; изходната проекция на експерта с неговия резултат от маршрутизирането и резултата на споделения експерт; подготовката на заявки и ключове преди вниманието; и рекурентната актуализация с нейната нормализация. Всяко слето ядро запазва временните стойности в регистри, вместо да ги изпраща през паметта.
Сливането също така скъсява графа на зависимостите: когато междинният запис изчезне, изчезва и бариерата, която е защитавала неговия потребител.
Ефективно четене на кеша за внимание
Коалесциране на четенията от кеша за внимание
Вниманието чете ключове и стойности от KV кеша по време на всяка стъпка на генериране. При аблацията съседните теми на графичния процесор не винаги заявяват съседни байтове, което принуждава паметовите системи да обслужват повече отделни транзакции. Активирането на коалесцирани зареждания кара съседните теми да заявяват съседни байтове, така че хардуерът да може да комбинира техните четения.
При конфигурацията bfloat16 сливането (coalescing) увеличи честотната лента за ключовете от 33.8 на 47.9 GB/s, увеличи честотната лента за стойностите от 42.0 на 61.8 GB/s и подобри цялостното генериране с 2.1% при контекст от 3 840 токъна.
Опаковане на заявкови глави за повторно използване на KV редове
Вниманието с групови заявки (grouped-query attention) позволява на осем заявкови глави да споделят една KV глава. При аблацията всяка заявкова глава работи в отделна simdgroup, така че и осемте независимо заявяват един и същ кеширан KV ред. Оптимизираното ядро събира четири заявкови глави в една група от теми (threadgroup), която зарежда всеки KV ред веднъж и го използва повторно в четири изчисления на вниманието. Втора група от теми управлява останалите четири глави.
Тази техника, наричана често GQA опаковане, извършва същата аритметика и произвежда идентични изходни байтове, като същевременно намалява осем независими KV заявки до две споделени зареждания. Спрямо неопакованата аблация тя подобри пропусквателната способност при генериране с 23.8% при контекст от 32K токъна.
Превключване на оформленията на вниманието при дълги контексти
Всяка стъпка на генериране в слой с пълно внимание обхожда съществуващия KV кеш. Оформление с фиксирани блокове разделя този кеш на равни части, които графичният процесор може да обработва паралелно. Допълнителното планиране не е оправдано, когато кешът е малък, но оформлението с фиксирани блокове балансира работата по-равномерно с нарастването на контекста.
За този модел изпълнителното време поддържа общия път на вниманието под 32K токъна и използва пътя с фиксирани блокове при 32K или повече. Превключването се прилага, когато всяка глава има 256 стойности и осем заявкови глави споделят KV глава; другите форми остават на общия път. Аблацията деактивира това превключване и винаги използва общия път. Активирането на маршрута с фиксирани блокове подобри цялостното генериране със 7.7% при 32K, 27.4% при 64K и 40.2% при 128K.
Граници на по-нататъшната оптимизация
Някои промени подобриха изолирана операция, но не подобриха инференцията от край до край.
Спекулативното генериране, което използва по-малък модел за предлагане на токъни за верификация от пълния модел, направи генерирането с пакет 1 с 18% по-бавно. Верификацията обработваше групи от два до пет реда, неефективна форма за този хардуер, а редовете често избираха различни експерти, което увеличаваше количеството прочетени данни за експертни тегла. Намаляването на изходния речник на съставителя подобри неговата пропусквателна способност с 4.7–5.1%, но не направи пълния спекулативен цикъл по-бърз. Този резултат е специфичен за работното натоварване: нашето пакетирано разполагане на Qwen на Blackwell използва спекулативно генериране при различни условия.
Други експерименти включваха намаляване на стартиранията на графичния процесор, припокриване на цели фази, използване на по-големи плочки за предварително попълване, прилагане на по-широко сливане, ускоряване на маршрутизатора и комбиниране на изходната проекция с избора на токън. Нито едно от тях не подобри пълния цикъл на инференция.
Измерванията на хардуерните граници също показаха малък остатъчен запас в основните операции по предварително попълване и генериране. MoE GEMM операциите достигнаха 97.9% и 90.3% от най-бързите устойчиви скорости на четене на тегла за техните модели на достъп. Премахването на аритметиката от разредената GEMV промени пропусквателната способност само с 0.2%, което потвърждава, че четенето на тегла, а не изчисленията, е ограничаващият ресурс. Умножението на матрици при предварителното попълване по подобен начин достигна 93% от теоретичната матрична граница в изолация и 80–86% вътре в тестваните модели.
Цялостна производителност
Цялостното сравнение зарежда идентични 4-битови байтове за контролни точки и в двата двигателя и изпълнява по една заявка на път на един 40-ядрен M5 Max със 128 GB. В рамките на всеки кръг двата двигателя се изпълняват в редуващ се ред, за да се намали отклонението от фоновото натоварване и промените в температурата на чипа. Сравняваме с най-бързия път за директно генериране на MLX-LM, а не с неговия сървър, така че измерването се фокусира върху изпълнението на модела, а не върху овърхеда на обслужването.
Прегледът обхваща десет дължини на промпта за предварително попълване и десет дължини на контекста за генериране, от 256 до 128K токъна. Пропусквателната способност при предварително попълване първо се покачва, тъй като двигателят разпределя фиксираните разходи за настройка върху повече токъни. Предварителното попълване достига връх около промпт от 4K токъна, след което спада, защото десетте слоя с пълно внимание извършват повече работа с нарастването на промпта. Генерирането остава почти плоско при къси контексти и намалява, след като четенето на нарастващия KV кеш стане значително. Специализираният двигател е по-бърз при всяка регистрирана дължина.
Тъй като специализираното изпълнение може да промени реда на операциите с плаваща запетая, ние също така проверихме числената съгласуваност спрямо MLX-LM. При сравнение с принудително обучение от учител (teacher-forced), и двата двигателя предсказаха следващия токън от същия референтен префикс на всяка от 192 позиции, което предотвратява засягането на по-късните входове от предишни разлики. Перплексивността на Lily беше само с 0.04% по-висока и тя избра същия токън с най-висок ранг на 96.35% от тестваните позиции.

Създаден за локалната платформа
Apple silicon не е по-малък графичен процесор за центрове за данни. Той е цялостна платформа за локална инференция със собствени хардуерни и софтуерни характеристики. Обединената памет предоставя на един единствен възел много висока граница за това колко модел и състояние може да побере. Невронните ускорители M5 поглъщат плътната матрична работа при предварителното попълване. Векторните ALU се справят с остатъка с ограничена честотна лента и ниска многократна употреба при генериране.
Qwen добавя допълнителни възможности за специализация: запазване на експертното маршрутизиране и рекурентното състояние на графичния процесор, елиминиране на излишните междинни данни, припокриване на независима работа, повторно използване на споделени KV данни и адаптиране на ядрата към формата на работното натоварване.
С оптимизация, специфична за модела и платформата, един Mac може да изпълнява ефективно голям разреден модел. Бъдещата работа ще разшири покритието между модели, чипове и работни натоварвания за обслужване, и ще превърне валидираните тук механизми в една конфигурация в по-обща политика на изпълнителното време.
По-широкият принцип е да се съгласува двигателят както с архитектурата на модела, така и със специфичните изчислителни и паметови пътища на хардуера. С еволюцията на авангардните отворени модели и хардуера, високоефективната локална инференция все повече ще зависи от двигатели, приспособени към двете, а не от такива, които абстрахират техните разлики.