Apple Silicon үшін құрылғыішілік инференцияны оңтайландыру

Префилл мен декодтау өнімділігін жақсартатын арнайы жергілікті қозғалтқыш.

АвторларPerplexity Engineering

Apple silicon платформасындағы гибридті есептеулер бұлттағы озық интеллект пен Mac жүйесіндегі жергілікті модель арасындағы тапсырманы үйлестіреді. Бұлттық модельдер зерттеу мен пайымдауды өңдейді, ал жергілікті модель Mac жүйесіндегі жеке файлдармен және қолданбалармен жұмыс істейді.

Бұл еңбек бөлінісінің үздіксіз сезілуі үшін жергілікті инференция тапсырманың қалған бөлігімен қадам басуы тиіс. Бұл сұрақтарды жылдам өңдей алатын және жоғары токен генерациялау жылдамдығын сақтай алатын қозғалтқышты қажет етеді.

Біздің жеңіл салмақты жергілікті инференция қозғалтқышымыз Lily, Apple silicon пен Qwen3.6-35B-A3B үшін арнайы жасалған, префилл және декодтау үшін бөлек оңтайландырулары бар. Қозғалтқыш жақын арада ашық кодты болады.

Кіріспе

Mac жүйесінде LLM іске қосудың кең таралған тәсілі — Apple silicon-ға арналған Apple-дің ашық бастапқы кодты машиналық оқыту фреймворгі MLX көмегімен жүзеге асады. Оның серіктес кітапханасы MLX-LM тілдік модельдердің кең ауқымымен мәтінді жүктеу және генерациялау үшін қажетті компоненттерді қосады. MLX пен MLX-LM бірлесіп жергілікті LLM инференциясы үшін дайын, әмбебап стек ұсынады.

Qwen3.6-35B-A3B — сирек, гибридті модель: ол сарапшылар қоспасының (MoE) бағыттау әдісін қолданады және толық назар аударумен бекітілген өлшемді қайталанатын күйлерді біріктіреді. Бұл архитектуралық шешімдер қажетті есептеу көлемін азайтады, бірақ сонымен бірге ретсіз жұмыс жүктемелерін тудырады. Токендер әртүрлі сарапшы салмақтарына бағытталады, ал қайталанатын күйлер табиғатынан тізбекті болып келеді.

MLX-LM инференция фазалары мен жалпы жұмыс жүктемесі пішіндері үшін оңтайландырылған ядроларды өзі-ақ таңдайды, бірақ оның қайта пайдаланылатын операциялары көптеген модель архитектураларын қолдауы тиіс. Qwen-ге арналған қозғалтқыш модель және орта деңгейінде мамандана алады, бұл ретте ядроларды, деректердің орын ауыстыруын және жоспарлауды модельдің бекітілген құрылымына сай үйлестіреді.

Lily бұл мамандануды бір процесте аяғына дейін іске асырады. Rust ортасы модельдің бақылау нүктесін жүктейді және сеанс күйі мен генерация циклін басқарады, OpenAI-мен үйлесімді chat-completions API сұрауларды қабылдайды және токендерді ағынмен жібереді, ал арнайы Metal ядролары Qwen-ге тән операцияларды орындайды. Орындау жолында PyTorch те, MLX те жоқ.

Екі вывод стектеріндегі әмбебаптық пен маманданудың орналасуы. MLX-LM моделді MLX қайта пайдаланылатын ядролар арқылы жоспарлайтын құрастырмалы MLX массив операциялары ретінде сипаттайды. Оның орнына Lily модель құрылымын, фазаға қатысты орындау жоспарларын және ядроны таңдауды Qwen және Apple silicon базасында құрылған бір ғана Rust орындау ортасына біріктіреді.
Жалпылық пен мамандану екі инференция стегінде қалай орналасқан. MLX-LM моделін MLX қайта пайдалануға болатын ядролар арқылы жоспарлайтын құрастырылатын MLX массив операциялары ретінде сипаттайды. Оның орнына Lily модель құрылымын, фазаға тән орындау жоспарларын және ядроны таңдауды Qwen және Apple silicon платформасына арналған бір ғана Rust ортасына орналастырады.

Біз префилл мен декодтау өнімділігін бөлек өлшейміз. Префилл өнімділігі қозғалтқыштың сұрақты қаншалықты жылдам өңдейтінін көрсетеді; декодтау өнімділігі оның шығыс токендерін қаншалықты жылдам генерациялайтынын көрсетеді.

Біз Qwen3.6-35B-A3B моделінің жұмысын 40 ядролы GPU және 128 ГБ біріктірілген жадысы бар M5 Max процессорымен жабдықталған бір ғана MacBook Pro құрылғысында сынадық. Префилл үшін он және декодтау үшін он сұрау ұзындығы бойынша (256-дан 128K токенге дейін, мұндағы K = 1024), бұл қозғалтқыш MLX-LM префилл өнімділігінен орташа 1.23 есе және декодтау өнімділігінен 1.35 есе асып түседі. 4K токендік сұрау мен 4K токендік декодтау контекстінде арнайы қозғалтқыш секундына 5749.9 префилл токенін және секундына 186.6 декодтау токенін өңдейді, ал MLX-LM үшін бұл көрсеткіштер сәйкесінше 4737.5 және 140.9 болды. Бірнеше сеанстан тұратын жұмыс барысында бұл уақыт үнемдеуі модельдің әрбір қосымша шақырылуы сайын арта түседі.

256-ден 128К токенге дейінгі бірдей салмақталған он ұзындық бойынша арифметикалық орташа өткізу қабілеті. Lily орташа есеппен префилл үшін 4 156 токен/сек (MLX-LM үшін 3 388 токен/сек, яғни 1,23×) және декодтау үшін 170,0 токен/сек (126,4-ке қарсы, яғни 1,35×) көрсетеді. Префилл сұрау ұзындығына байланысты өзгереді; декодтау мәтінмәні ұзындығына байланысты өзгереді.
256-дан 128K токенге дейінгі он бірдей салмақталған ұзындық бойынша арифметикалық орташа өнімділік. Lily префилл токендері бойынша MLX-LM-нің 3,388 көрсеткішіне қарсы орташа 4,156 токен/сек (1.23×), ал декодтау бойынша 126.4-ке қарсы 170.0 токен/сек (1.35×) жылдамдықты көрсетеді. Префилл сұрау ұзындығын өзгертеді; декодтау контекст ұзындығын өзгертеді.

Содан кейін біз Qwen архитектурасының Apple silicon платформасында модельге тән оңтайландыру мүмкіндіктерін қалай тудыратынын түсіндіреміз. Содан кейін нәтижесінде пайда болған префилл және декодтау өзгерістерімен танысамыз. Сондай-ақ MLX-LM-мен салыстырумен аяқтамас бұрын, қосымша оңтайландырудың тиімділігі қашан тоқтайтынын қарастырамыз.

Apple silicon платформасындағы Qwen-ге тән оңтайландыру мүмкіндіктері

Qwen үш бөлек жұмыс жүктемесінің пішінін тудырады

Qwen3.6-35B-A3B 35 миллиард параметрді қамтиды, бірақ әрбір токен үшін тек 3 миллиардқа жуығын белсендіреді. Роутер 256 сарапшы ішкі желісіне ұпай береді және сегізін таңдайды, сондай-ақ әрбір токенді өңдейтін бір ортақ сарапшымен қатар жүреді. Бұл сирек MoE дизайны есептеулерді азайтады, бірақ біркелкі емес жұмысты тудырады: сарапшылар әртүрлі токен сандарын алады, ал әрбір токен сарапшылардың басқа комбинациясынан салмақтарды талап етеді.

Сонымен қатар Qwen 10 толық назар аудару қабатын 30 Gated DeltaNet қабатымен біріктіреді. Бұл екі қабат түрі бұрынғы ақпаратты әртүрлі жолдармен сақтайды.

Назар аудару қабаттары топтастырылған сұрау назарын (GQA) пайдаланады. Qwen жүйесінде 16 сұрау басы және екі кілт-мәні (KV) басы бар, мұнда сегіз сұрау басы әр KV басын бөліседі. Бөлісу KV кэшін кішірек етеді және кэштелген деректерді сұрау бастары арасында қайта пайдалануға мүмкіндік береді. Кэш әлі де әрбір токен үшін жаңа кілттер мен мәндерді сақтайды, сондықтан контекст өскен сайын әрбір декодтау қадамы көбірек деректерді оқиды.

Оның орнына Gated DeltaNet бұрынғы ақпаратты бекітілген өлшемді қайталанатын күйге сығады. Үйретілген қақпа бар күйдің қанша бөлігін сақтау керектігін басқарады, ал дельта жаңарту ағымдағы токеннен ақпаратты біріктіреді. Модель бұл жаңартуларды қайталанатын түрде анықтайды, сондықтан әрбір токен алдыңғы токен шығарған күйге байланысты болады. Дегенмен, префилл кезінде қозғалтқыш бірдей есептеуді екі жолмен бағалай алады. Ол күйді алға жылжыта отырып, токендерді тікелей сканерлей алады немесе көбірек матрицалық операциялар мен токен деңгейіндегі параллелизмді ашатын блоктарға жаңартуларды қайта ұйымдастыра алады. Қай тәсілдің жылдамырақ екендігі модель өлшемдеріне, жұмыс жүктемесіне және аппараттық құралдарға байланысты.

Бұл құрылымдар бірлесіп үш есептеу үлгісін құрайды: біркелкі емес сарапшы топтары, өсіп келе жатқан кэштің көмегімен назар аудару және тікелей немесе блоктар түрінде бағалануы мүмкін бекітілген өлшемді қайталану.

Apple silicon әртүрлі жұмыс жүктемелері үшін әртүрлі жолдарды ұсынады

Префилл көптеген сұрау токенінің белсендендіру жолдарын бірден өңдейді. Мұнда қарастырылған жергілікті жұмыс жүктемесі әдетте бір уақытта бір сұрақты декодтайды (batch 1) және әр қадам сайын бір жаңа жолды өңдейді. Бұл айырмашылық бірдей модель салмақтарының қалай қолданылатынын өзгертеді. Префилл салмақтардың әрбір блогын жүздеген немесе мыңдаған жолдар бойынша қайта пайдалана алады. Декодтау көбінесе мұны істей алмайды, өйткені әрбір жаңа токен салмақтар арқылы тағы бір өтуді талап етеді.

Apple silicon CPU мен GPU-ды екеуі де қол жеткізе алатын бірыңғай физикалық жады бассейні болып табылатын біріктірілген жадының артына орналастырады. Бұл модельге бөлек GPU көшірмесін сақтамай тұрақты түрде қалуға мүмкіндік береді, бірақ бұл деректердің орын ауыстыруын тегін етпейді. Салмақтар мен аралық мәндерді оқу әлі де жады өткізу қабілетін тұтынады, ал регистрлер мен басқа чиптегі сақтау орындары жылдамырақ, бірақ әлдеқайда кішірек.

M5 GPU сонымен қатар әртүрлі есептеу жолдарын қамтамасыз етеді. Префиллдің сызықтық қабаттары салмақ матрицасын бірден көптеген жолдарға қолдана отырып, жалпы матрицалық-матрицалық көбейтуді (GEMM) пайдаланады. Үйлесімді GEMM-дер Metal 4 тензор операциялары арқылы әрбір GPU ядросындағы Neural Accelerator мүмкіндігін пайдалана алады. Batch-1 декодтауының орнына бір жолға бірдей салмақтарды қолдана отырып, жалпы матрицалық-векторлық көбейтуді (GEMV) пайдаланады. Салмақты қайта пайдалану аз болғандықтан, GEMV негізінен жады өткізу қабілетімен шектеледі және деректерді көбірек қайта пайдаланатын матрицалық операцияларға арналған Neural Accelerators-қа қарағанда GPU-дың векторлық арифметикалық логикалық блоктарына (ALU) жақсырақ сәйкес келеді.

Бұл орындау жолдары тек Lily-ге ғана тән емес. MLX сол біріктірілген жады арқылы жұмыс істейді және жұмыс жүктемесінің пішініне сәйкес оңтайландырылған матрицалық және векторлық ядроларды таңдайды. MLX-LM-нің Qwen іске асырылымы сарапшы жұмысын топтастырып қойған, Gated DeltaNet-ті біріктірілген қайталанатын Metal ядросы арқылы бағалайды және GQA ескеретін назар аударуды пайдаланады. Бұл мүмкіндіктер Apple silicon-да тиімді Qwen инференциясы үшін ортақ бастапқы нүкте болып табылады.

Оңтайландыру стратегиясы

Lily-дің шектеулі ауқымы бұл ортақ орындау жолдарын Qwen архитектурасы мен өлшемдеріне дәл сәйкестендіріп үйлестіруге мүмкіндік береді. Ол фазаға тән GPU жолдарын пайдаланады, деректердің орын ауыстыруын азайту үшін Qwen-нің сарапшылық, қайталанатын және назар аудару жұмыс жүктемелерін картаға түсіреді, сондай-ақ өлшенген жұмыс жүктемесінің пішінінен ядролар мен орналасуларды таңдайды. Бұл стратегия үш бөліктен тұрады:

  1. GPU жолын инференция фазасына сәйкестендіріңіз. Префилл салмақтарды көптеген жолдар бойынша қайта пайдалана алған кезде матрицаға бағытталған орындауды пайдаланыңыз, ал batch-1 декодтауы бір уақытта бір жолды өңдеген кезде векторға бағытталған орындауды пайдаланыңыз.
  2. Деректердің орын ауыстыруын барынша азайта отырып, Qwen құрылымын GPU-ға картаға түсіріңіз. Салмақтарды пайдаланғанға дейін тығыздалған күйде сақтаңыз, сарапшы жұмысын CPU-ға қайтармай ұйымдастырыңыз, Gated DeltaNet күйін қайталанатын сканерлеу барысында чипте сақтаңыз және топтастырылған сұрау назары бөлісетін KV деректерін қайта пайдаланыңыз.
  3. Ядроларды жұмыс жүктемесінің пішініне бейімдеңіз. Әрбір фаза ішінде қолжетімді жол санынан, сарапшылар арасындағы жолдардың таралуынан, операция өлшемдерінен және ағымдағы контекст ұзындығынан плитка өлшемдерін, орындау орналасуларын және назар аудару жолдарын таңдаңыз.

Келесі бөлімдер бұл шешімдерді түсіндіреді. M5 Max жүйесіндегі сәйкестендірілген абляцияларда бағаланған оңтайландырулар үшін біз зерттеліп жатқан оңтайландырумен ғана ерекшеленетін, басқаша бірдей қозғалтқыш конфигурацияларын салыстыру арқылы олардың әсерін бағалаймыз. Бұл эксперименттер қозғалтқышымыздың нұсқаларын өзара салыстырғандықтан, олар MLX-LM-ге қарсы қорытынды нәтижелерді бөліп көрсетуден гөрі механизмдерді түсіндіреді.

Префилл: салмақтарды қайта пайдалану және роутингті GPU-да ұстау

Префилл бірден көптеген токен жолдарын ашады, бірақ Qwen бұл жолдарды сарапшылар арасында біркелкі емес бағыттайды және тізбек арқылы қайталанатын күйді жаңартады. Оның оңтайландырулары үш топқа бөлінеді: сирек сарапшы жұмысын бағытталған жолдардың төңірегінде ұйымдастыру, Gated DeltaNet сканерлеуін чипте сақтау және ұзақ сұрақтарды шектеулі кесектерге бөлу.

Qwen қабаты арқылы өтетін бір шектеулі префилл бөлігі үшін орындау және деректердің орналасуы. Attention KV кэшін кеңейтеді, ал Gated DeltaNet жұмыс істейтін қайталанатын күйін регистрлерде сақтайды. Сарапшыны бағыттау метадеректері GPU-да қалады, Q4 салмақтары топталған GEMM ішінде деквантталуға дейін буылған күйінде қалады, ал уақытша белсендендірулер ағымдағы бөлікпен шектеледі.
Qwen қабаты арқылы бір шектелген префилл кесегі үшін орындау және деректердің тұруы. Назар аудару KV кэшін кеңейтеді, ал Gated DeltaNet жұмыс істеп тұрған қайталанатын күйін регистрлерде сақтайды. Сарапшыны бағыттау метадеректері GPU-да қалады, Q4 салмақтары топтастырылған GEMM ішінде кванттаудан шығарылғанға дейін тығыздалған күйде қалады, ал уақытша белсендендірулер ағымдағы кесекпен шектеледі.

Сирек сарапшы есептеулерін оңтайландыру

Матрицалық көбейту кезінде салмақтарды кванттаудан шығару

Qwen3.6-35B-A3B бақылау нүктесі топтық аффиндік 4 биттік кванттауды пайдаланады. Әрбір салмақ 4 биттік бүтін сан коды ретінде сақталады, ал 64 салмақтың әрбір тобы оның мәндерін қалпына келтіру үшін пайдаланылатын bfloat16 шкаласы мен ығысуын бөліседі. Бұл 35 миллиард параметрлік модельді шамамен 70 ГБ bfloat16 салмақтарынан 19.4 ГБ бақылау нүктесіне дейін азайтып, модельді Mac жүйесінде тұрақты ұстауды іс жүзінде мүмкін етеді.

Матрицалық көбейту үшін пайдаланылатын Metal 4 тензор операциясы тығыздалған 4 биттік көріністің орнына bfloat16 операндтарын тұтынады. Көбейту алдында GPU салмақтарды bfloat16 форматында қайта қалпына келтіруі тиіс. Lily-дегі оңтайландырылған топтастырылған GEMM бұл түрлендіруді бір уақытта бір шағын салмақ плиткасы үшін орындайды және нәтижесін оны бағытталған белсендендіру жолдарымен көбейту үшін жеткілікті уақыт қана чиптегі threadgroup жадысында ұстайды. Акумуляция 32 биттік жылжымалы нүктені пайдаланады, ал шығыс bfloat16 форматында жазылады. Толық кеңейтілген салмақ массиві біріктірілген жадыда ешқашан жасалмайды.

Абляцияда кванттаудан шығару бөлек операция ретінде жұмыс істейді: ол 4 биттік салмақтарды біріктірілген жадыдағы bfloat16 массивіне кеңейтеді, содан кейін матрицалық ядро ​​сол массивті кері оқиды. 512 токендік сұрауда кванттаудан шығаруды топтастырылған GEMM ішіне жылжыту осы аралық жазу мен оқуды жою арқылы аяғына дейінгі префилл өнімділігін 77.4%-ға арттырды.

Сарапшыларды бағыттауды GPU-да ұстау

Топтастырылған GEMM әр сарапшыға тағайындалған белсендендіру жолдарының бірге сақталуын талап етеді. Әр токен үшін сегіз сарапшыны таңдағаннан кейін, гистограмма әр сарапшыға қанша тағайындау келгенін санап шығады. Префикс сканерлеуі бұл санақтарды бастапқы ығысуларға айналдырады, шашырату қадамы жолдарды өздерінің сарапшы топтарына орналастырады, ал блок картасы топтастырылған GEMM өңдеуі тиіс бекітілген өлшемді матрицалық блоктарды тізімдейді.

Оңтайландырылған жол әрбір сұрау кесегі үшін бүкіл осы тізбекті бір пәрмен буферінде, яғни реттелген GPU операциялары топтамасында сақтайды. Оның орнына абляция CPU бағыттау аралықтарын тексеріп, келесі операцияны жібере алуы үшін кідіртеді. Гистограмма мен префикс сканерлеуін GPU-да ұстау екі ядроны қосады, бірақ әрбір MoE қабаты ішіндегі CPU–GPU синхронизациясын жояды.

512 токендік сұрауда GPU-да орналасқан роутингті қосу аяғына дейінгі префиллді 89%-ға арттырды. Бұл сондай-ақ тек ядро ​​санының неге жаңылыстыруы мүмкін екенін көрсетеді: жылдамырек жол көбірек ядроларды іске қосады, бірақ қабат ішінде CPU-ды ешқашан күтпейді.

Плитка өлшемін сарапшы жүктемесіне сәйкестендіру

2K токендік сұрауда әрбір токенді 256 сарапшының сегізіне бағыттау 16,384 токен-сарапшы тағайындауын немесе әр сарапшыға орта есеппен 64 белсендендіру жолын тудырады. Нақты тараלыс біркелкі емес: кейбір сарапшылар көптеген жолдарды алса, басқалары аз алады.

Топтастырылған GEMM әр сарапшының шығысын матрицалық көбейту шығысының шағын тіктөртбұрышты блоктары болып табылатын плиткаларға бөледі. Әрбір плитка бір GPU threadgroup-ына тағайындалады. Apple silicon GPU-ларында threadgroup бір немесе бірнеше simdgroup-тан тұрады, олардың әрқайсысы инструкцияларды қатаң қадаммен орындайтын 32 тректен тұрады.

Үлкенірек плиткалар орнату құнын көбірек жолдарға бөледі және көбірек параллель жұмысты ашады, бірақ сарапшы тек бірнеше жолды алған кезде үлкен плитканың бір бөлігі бос қалады. Сондықтан плитка өлшемі мен simdgroup саны өзара байланысты.

Абляция плитканы 16 жолға бекітеді. Осы бақылауға қарсы, төрт simdgroup бар 32 жолды плитканы қосу 2K токендерде аяғына дейінгі префиллді 13.2%-ға жақсартты.

Қайталанатын күйді чипте сақтау

Префилл кезінде әрбір Gated DeltaNet қабаты өз қайталанатын күйін алға жылжыта отырып, сұрақты ретімен сканерлейді. Регистрде сақтау өшірілген кезде, абляция блок бойынша сканерлеуді пайдаланады. 2K токендік сұрауда бұл жол қабат сайын 256 MiB (мебибайт) күйді жылжытады және қатысушы барлық тректер бірін-бірі күтуі тиіс синхронизация нүктелері болып табылатын тосқауылдарда бірлесіп жұмыс істейтін тректерді бірнеше рет тоқтатады.

Қайталанатын күй матрица болып табылады. Оңтайландырылған ядро әр бағанды бір simdgroup-қа тағайындайды. Simdgroup бағанды өзінің тректері арасында бөледі, бағанды олардың тіркелімдеріне бір рет жүктейді және күйді бүкіл сканерлеу барысында тасымалдайды. Тректер аралық нәтижелерді threadgroup жадысы арқылы емес, threadgroup ішінде ортақ пайдаланылатын чиптегі жады арқылы, simdgroup операциялары көмегімен алмасады. Аяқталған күй сканерлеуден кейін ғана кері жазылады.

Күй және оның қақпасы 32 биттік жылжымалы нүкте пішімін пайдаланады, өйткені кішкентай дөңгелектеу қателері тізбекті жаңартулар кезінде жиналады. Сұрау және кілт белсендендірулері bfloat16 күйінде қалады.

2K токендік сұрауда регистрде сақталатын сканерлеуді қосу аяғына дейінгі префиллді 5.6%-ға жақсартты. Сарапшылық GEMM префилл уақытының шамамен 90%-ын құрады. Тізбекті сканерлеу Neural Accelerators мүмкіндіктерін пайдалану үшін жеткілікті қайта пайдаланылатын матрицалық жұмысты ашпайды.

Сұрақты кесектеу арқылы уақытша жадыны шектеу

Орта ұзын сұрақты жадыда әрбір сұрау токені үшін уақытша деректерді бірден сақтаудың орнына шектеулі кесектер тізбегі ретінде өңдейді. Модель салмақтары біріктірілген жадыда тұрақты түрде қалады, ал қайталанатын күй мен KV кэші контексті бір кесектен келесісіне тасымалдайды. Бұрынғы контекст ешқашан жойылмайды.

Кесектеусіз уақытша белсендендіру массивтері толық сұрақпен бірге өседі және біріктірілген жады үшін модель салмақтарымен, қайталанатын күймен және KV кэшімен бәсекелеседі. Кесектеу бір уақытта тек бір сегменттің уақытша мәндерін белсенді ұстайды, содан кейін келесі сегментті өңдеу алдында бұл жадыны босатады немесе қайта пайдаланады. Бұл шыңдық жұмыс жадысын шектейді және қозғалтқышқа модельдің шығысын өзгертпей ұзағырақ сұрақтарды өңдеуге мүмкіндік береді.

Кесеcтелген префилл көптеген қозғалтқыштарда танымал және осы жады шектеулі орталарда ұзақ көп айналымды траекторияларға қызмет көрсету үшін өте маңызды. Назар аудару қабаттары үшін префиллдің жалпы уақыты префилл ұзындығы бойынша квадратты түрде қалады, бұрынғы кесектердің қайталанатын KV жүктемелерінен кейбір қосымша үстеме шығындар бар.

Декодтау: бір токенге кететін байттар санын барынша азайту

Batch-1 декодтауы бір уақытта бір жаңа жолды өңдейді. Салмақты қайта пайдалану аз болғандықтан, оның өнімділігі негізінен қозғалтқыштың әрбір токен үшін қанша байт жылжытатынына байланысты. Декодтау өзгерістері төрт топқа бөлінеді: бір жолды салмақ жолын оңтайландыру, әр қадамды GPU-да ұстау, аралық және күй трафигін азайту, және назар аудару кэшінен тиімді оқу.

Бір batch-1 декодтау қадамына арналған деректер ағыны және бос тұру уақыты мен кэш трафигін азайтатын екі механизм. (A) GPU Q4 салмақтары мен модель күйінattention, Gated DeltaNet, бағыттау және біріктірілген сарапшы ядролары арқылы жібереді, содан кейін таңдалған токенді CPU-ға көшірмесін жібере отырып, келесі қадамның кіріс ұяшығына тікелей жазады. (B) Тәуелділікті ескеретін жоспарлау тәуелсіз ядролардың қабаттасуына мүмкіндік береді. (C) GQA бумалау төрт сұрау басына әрбір KV-жол жүктемесін бөлісуге мүмкіндік беріп, сегіз тәуелсіз сұрауды екі ортақ жүктемеге дейін азайтады.
Бір batch-1 декодтау қадамына арналған деректер ағыны және бос тұру уақыты мен кэш трафигін азайтатын екі механизм. (A) GPU Q4 салмақтары мен модель күйін назар аудару, Gated DeltaNet, бағыттау және біріктірілген сарапшы ядролары арқылы ағызады, содан кейін таңдалған токенді CPU-ға көшірмесін жібере отырып, тікелей келесі қадамның кіріс ұяшығына жазады. (B) Тәуелділікті ескеретін жоспарлау тәуелсіз ядролардың қабаттасуына мүмкіндік береді. (C) GQA топтауы төрт сұрау басына әрбір KV-жол жүктемесін бөлісуге мүмкіндік беріп, сегіз тәуелсіз сұрауды екі ортақ жүктемеге дейін азайтады.

Бір жолды салмақ жолын оңтайландыру

MLX бір жолды жұмысты арнайы матрицалық-векторлық ядроларға қазірдің өзінде жібереді. Lily MLX қолданбайтындықтан, арнайы орта сол негізгі стратегияны қамтамасыз етуі тиіс. Біздің жол-параллель GEMV бір белсендендіру жоlıна арналған. Simdgroup салмақ матрицасының әртүрлі бөліктерін параллель оқи отырып, шығыс бойынша бірлесіп жұмыс істейді.

Әрбір декодтау қадамын GPU-да ұстау

Токенді тапсыруды GPU-да ұстау

Әрбір декодтау қадамы келесі токенді таңдаумен аяқталады; келесі қадам сол токенді кіріс ретінде бастайды. Таңдауды CPU-ға, содан кейін қайтадан GPU-ға жіберу әрбір токенге синхронизация нүктесін қосады. Оның орнына біздің ортамыз екі пәрмен буфері мен екі GPU-да орналасқан токен ұяшықтары арасында кезектеседі. GPU ең жоғары ұпай жинаған токенді таңдайды және оның токен идентификаторын келесі декодтау қадамының кіріс ұяшығына тікелей жазады, ал CPU кейінгі жұмысты дайындайды.

Тәуелсіз GPU жұмысын қабаттастыру

Бір жазылған batch-1 декодтау қадамында токенді генерациялау 795 GPU ядросын іске қосты. Олардың тәуелділіктері 555 тізбекті кезеңді құрады, бұл кейбір ядроларға бір мезгілде жұмыс істеуге мүмкіндік берді. Дегенмен Metal-дің сериялық орындау режимі әрбір ядроны ретімен іске қосты.

Оңтайландырылған декодтау жолы нақты деректер тәуелділіктерін қатар жүретін Metal өтуінде жазады. GPU ресурстары рұқсат еткен кезде тәуелсіз ядро ​​қосулары бір уақытта жұмыс істей алады. Тосқауыл тек кейінгі жұмыс бұрынғы нәтижені талап еткен кезде ғана енгізіледі.

Аралық және күй трафигін азайту

Бөлек ядролар жиі аралық нәтижені материализациялайды: бір ядро ​​уақытша нәтижені жадыға жазады, ал келесісі нәтижені кері оқиды. Оңтайландырылған декодтау жолы төрт тізбекті біріктіреді: қақпаланған белсендендіруі бар екі сарапшы кіріс проекциясы; роутинг ұпайы мен ортақ сарапшы нәтижесі бар сарапшы шығыс проекциясы; назар аудару алдындағы сұрау мен кілтті дайындау; және нормализациясы бар қайталанатын жаңарту. Әрбір біріктірілген ядро уақытша мәндерді жады арқылы жіберудің орнына регистрлерде сақтайды.

Сондай-ақ біріктіру тәуелділік графигін қысқартады: аралық жазу жоғалған кезде, оның тұтынушысын қорғаған тосқауыл да жоғалады.

Назар аудару кэшінен тиімді оқу

Назар аудару кэшінен оқу операцияларын біріктіру

Назар аудару әрбір декодтау қадамы кезінде KV кэшінен кілттер мен мәндерді оқиды. Абляцияда көршілес GPU тректері әрқашан көршілес байттарды сұрамайды, бұл жады жүйесіне көбірек бөлек транзакцияларға қызмет көрсетуге мәжбүр етеді. Біріктірілген жүктемелерді қосу аппараттық құрал олардың оқуларын біріктіре алуы үшін көршілес тректердің көршілес байттарды сұрауына мүмкіндік береді.

bfloat16 конфигурациясында біріктіру кілт өткізу қабілетін 33.8-ден 47.9 ГБ/с-қа дейін арттырды, мән өткізу қабілетін 42.0-ден 61.8 ГБ/с-қа дейін өсірді және 3,840 токендік контексте аяғына дейінгі декодтауды 2.1%-ға жақсартты.

KV жолдарын қайта пайдалану үшін сұрау бастарын топтау

Топтастырылған сұрау назары сегіз сұрау басына бір KV басын бөлісуге мүмкіндік береді. Абляция кезінде әрбір сұрау басы бөлек simdgroup-та жұмыс істейді, сондықтан барлық сегіз бау бірдей кэштелген KV жолын дербес сұрайды. Оңтайландырылған ядро төрт сұрау басын бір threadgroup-қа топтастырады, ол әрбір KV жолын бір рет жүктеп, оны төрт назар есептеуінде қайта пайдаланады. Екінші threadgroup қалған төрт басты өңдейді.

Әдетте GQA топтауы деп аталатын бұл әдіс сегіз тәуелсіз KV сұрауын екі ортақ жүктемеге дейін азайта отырып, бірдей арифметиканы орындайды және бірдей шығыс байттарын шығарады. Топтастырылмаған абляциямен салыстырғанда, ол 32K токендік контексте аяғына дейінгі декодтау өнімділігін 23.8%-ға жақсартты.

Ұзақ контексттерде назар аудару орналасуларын ауыстыру

Толық назар аудару қабатындағы әрбір декодтау қадамы бар KV кэшін сканерлейді. Бекітілген блок орналасуы бұл кэшті GPU параллель түрде өңдей алатын тең бөлшектерге бөледі. Кэш кішкентай болған кезде қосымша жоспарлаудың қажеті шамалы, бірақ контекст ұлғайған сайын бекітілген блок орналасуы жұмысты біркелкі бөледі.

Бұл модель үшін орта жалпы назар аудару жолын 32K токеннен төмен ұстайды және 32K немесе одан ұзақ болған кезде бекітілген блок жолын пайдаланады. Ауысу әр баста 256 мән болғанда және сегіз сұрау басы KV басын бөліскен кезде қолданылады; басқа пішіндер жалпы жолда қалады. Абляция бұл ауысуды өшіреді және әрқашан жалпы жолды пайдаланады. Бекітілген блок бағытын қосу аяғына дейінгі декодтауды 32K кезінде 7.7%-ға, 64K кезінде 27.4%-ға және 128K кезінде 40.2%-ға жақсартты.

Әрі қарай оңтайландыру шектеулері

Кейбір өзгерістер оқшауланған операцияны жақсартқанымен, аяғына дейінгі инференцияны жақсартқан жоқ.

Толық модельдің тексеруі үшін токендерді ұсыну үшін кішірек модельді пайдаланатын болжамды декодтау batch-1 декодтауын 18%-ға баяулатты. Тексеру екі мен бес аралығындағы жолдар топтарын өңдеді, бұл осы аппараттық құрал үшін тиімсіз пішін болып табылады, және жолдар жиі әртүрлі сарапшыларды таңдап, оқылатын сарапшы салмағы деректерінің көлемін арттырды. Жобалаушының шығыс сөздік қорын азайту жобалаушы өнімділігін 4.7–5.1%-ға жақсартты, бірақ толық болжамды циклды жылдамырақ еткен жоқ. Бұл нәтиже жұмыс жүктемесіне тән: біздің Blackwell жүйесіндегі топтастырылған Qwen орналастырылымымыз болжамды декодтауды әртүрлі жағдайларда пайдаланады.

Басқа эксперименттер GPU іске қосылуын азайтуды, бүкіл фазаларды қабаттастыруды, үлкенірек префилл плиткаларын пайдалануды, кеңірек біріктіруді қолдануды, роутерді жеделдетуді және шығыс проекциясын токен таңдаумен біріктіруді қамтыды. Ешқайсысы толық инференция циклін жақсартқан жоқ.

Аппараттық шектеулерді өлшеу нәтижелері негізгі префилл және декодтау операцияларында қалған резервтің аз екенін көрсетті. MoE GEMM және GEMV олардың қатынау үлгілері үшін ең жылдам тұрақты салмақ оқу жылдамдығының 97.9% және 90.3%-ына жетті. Сирек GEMV-тен арифметиканы алып тастау өнімділікті тек 0.2%-ға өзгертті, бұл есептеулер емес, салмақты оқу шектеулі ресурс екенін растады. Префиллдің матрицалық көбейтуі де оқшауланған түрде теориялық матрица шегінің 93%-ына және сынақтан өткен модельдер ішінде 80–86%-ына жетті.

Аяғына дейінгі өнімділік

Аяғына дейінгі салыстыру екі қозғалтқышта да бірдей 4 биттік бақылау нүктесінің байттарын жүктейді және 40 ядролы, 128 ГБ M5 Max құрылғысында бір уақытта бір сұрақты іске қосады. Әр раунд ішінде фондық жүктеме мен чип температурасының өзгеруінен туындайтын ауытқуды азайту үшін екі қозғалтқыш кезектес ретпен жұмыс істейді. Біз серверді емес, MLX-LM-нің ең жылдам тікелей генерация жолын салыстырамыз, сондықтан өлшеу қызмет көрсету үстеме шығындарына емес, модельді орындауға бағытталған.

Шолу префилл үшін он сұрау ұзындығын және декодтау үшін он контекст ұзындығын, 256-дан 128K токенге дейін қамтиды. Қозғалтқыш тұрақты орнату шығындарын көбірек токендерге бөлген сайын, префилл өнімділігі алдымен артады. Префилл 4K токендік сұрау маңында шыңына жетеді, содан кейін сұрау өскен сайын он толық назар аудару қабаты көбірек жұмыс атқаратындықтан төмендейді. Декодтау қысқа контексттерде дерлік тегіс болып қалады және өсіп келе жатқан KV кэшін оқу маңызды бола бастаған кезде азаяды. Арнайы қозғалтқыш әрбір жазылған ұзындықта жылдамырақ.

Мамандандырылған орындау жылжымалы нүкте операцияларының ретін өзгерте алатындықтан, біз сондай-ақ MLX-LM-ге қарсы сандық сәйкестікті тексертік. Мұғалім мәжбүрлеген салыстыру кезінде екі қозғалтқыш 192 позицияның әрқайсысында келесі токенді бірдей анықтамалық префикстен болжады, бұл бұрынғы айырмашылықтардың кейінгі кірістерге әсер етуіне жол бермеді. Lily перплексиясы тек 0.04%-ға жоғары болды және ол сыннан өткен позициялардың 96.35%-ында бірдей ең жоғары бағаланған токенді таңдады.

Бір 40 ядролы, 128 ГБ M5 Max құрылғысындағы Qwen3.6-35B-A3B Q4, batch 1 үшін сұрау ұзындығы бойынша префилл өткізу қабілеті және мәтінмән ұзындығы бойынша декодтау өткізу қабілеті. 256-ден 128К токенге дейінгі он ұзындық бойынша Lily барлық тіркелген нүктелерде жылдамырақ: MLX-LM префилл өткізу қабілетінің 1,12–1,42× және декодтау өткізу қабілетінің 1,31–1,37× бөлігін құрайды. Салыстыру барысында MLX-LM-ның ең жылдам тікелей генерация жолы қолданылды. Екі көлденең ось те логарифмдік шкаланы пайдаланады; тік осьтердің еշқайсысы нөлден бастап басталмайды.
40 ядролы, 128 ГБ M5 Max құрылғысындағы Qwen3.6-35B-A3B Q4, batch 1 үшін сұрау ұзындығы бойынша префилл өнімділігі және контекст ұзындығы бойынша декодтау өнімділігі. 256-дан 128K токенге дейінгі он ұзындық бойынша Lily әрбір жазылған нүктеде жылдамырақ: MLX-LM префилл өнімділігінен 1.12–1.42 есе және декодтау өнімділігінен 1.31–1.37 есе асып түседі. Салыстыру барысында MLX-LM-нің ең жылдам тікелей генерация жолы қолданылды. Екі көлденең ось логарифмдік масштабты пайдаланады; тік осьтердің ешқайсысы нөлден бастамайды.

Жергілікті платформа үшін жасалған

Apple silicon — кішірек деректер орталығының GPU-ы емес. Бұл өзінің аппараттық және бағдарламалық сипаттамалары бар толық жергілікті инференция платформасы. Біріктірілген жады бір түйінге модель мен күйді қаншалықты үлкен көлемде ұстай алатынына өте жоғары шек қояды. M5 Neural Accelerators префиллдегі тығыз матрицалық жұмысты өз мойнына алады. Векторлық ALU-лар декодтаудағы өткізу қабілетіне тәуелді, төмен қайта пайдаланылатын қалдықты өңдейді.

Qwen мамандану үшін қосымша мүмкіндіктер қосады: сарапшыны бағыттау мен қайталанатын күйді GPU-да сақтау, қажетсіз аралықтарды жою, тәуелсіз жұмысты қабаттастыру, ортақ KV деректерін қайта пайдалану және ядроларды жұмыс жүктемесінің пішініне бейімдеу.

Модель және платформаға тән оңтайландыру арқылы бір Mac үлкен сирек модельді тиімді іске қосылай алады. Болашақ жұмыс модельдер, чиптер және қызмет көрсету жүктемелері бойынша қамтуды кеңейтеді, сондай-ақ бір конфигурацияда мұнда расталған механизмдерді жалпы жұмыс уақыты саясатына айналдырады.

Кеңірек қағидат қозғалтқышты модельдің архитектурасына да, аппараттық құралдардың нақты есептеу және жады жолдарына да сәйкестендіру болып табылады. Озық ашық салмақты модельдер мен аппараттық құралдар дамыған сайын, жоғары өнімді жергілікті инференция олардың айырмашылықтарын дерексіздендіретін емес, екеуіне де бейімделген қозғалтқыштарға көбірек тәуелді болады.