
AI & Technology
Shim за Metal capabilities, ограничен до един процес, доближи llama.cpp до скоростта на директна инференция върху хардуера в macOS VM с Apple Silicon.

Две докладвани стойности за възможностите на GPU деляха llama.cpp от 16,36-кратно ускорение при генерирането на токени с TinyLlama. Изследователите промениха тези стойности в macOS виртуална машина върху M1 Ultra. Физическият GPU, ядрото на гост системата и моделът останаха същите.
Това стеснява причината до софтуерен bottleneck. При някои Metal натоварвания във виртуални машини с Apple Silicon консервативно обявените възможности могат да ограничат производителността повече от самия хардуер. GPU може да изпълни по-бързия код, но приложението получава сигнал да избере по-бавен път.
Francesco Bonacci и Johnny Franks проведоха тестовете чрез Lume, стека на Cua за macOS виртуализация. Тяхната публикация на изследването включва изходен код, build скриптове, capability probes и сурови benchmark логове. Възпроизводимостта е решаваща, защото Apple не представя поведението зад този подход като стабилен публичен договор за съвместимост.
Virtualization.framework на Apple предоставя виртуално графично устройство на гост системата с macOS. Тя подава Metal задачите през драйвер, съобразен с виртуализацията, а хостът ги изпълнява върху физическия Apple GPU. Това не е същото като директното присвояване на PCI устройство, което обикновено се нарича GPU passthrough при Linux.
Стандартната VM с Tahoe докладва GPU семейство от ерата на Apple 5, максимум 32 KB threadgroup памет и липса на поддръжка за SIMD-group матрици. llama.cpp прие тези ограничения и избра по-стари GPU kernels.
Представете си бърз път с грешен знак за ограничение на скоростта. Пътят е свободен, но софтуерът намалява, защото знакът му казва да го направи.
Изследователите създадоха Metal compatibility shim, който работи само в рамките на конкретен процес и прихваща избрани заявки за възможностите на GPU. Той променя стойностите за Apple семейството и threadgroup паметта, връщани към един процес в гост системата. Така тестваните версии на llama.cpp успяха да използват по-новите пътища за SIMD-group reduction, матрични операции и bfloat16.
Този ограничен обхват е важен. Останалите процеси в гост системата запазиха стандартните си настройки, а натоварването продължи да минава през съществуващия паравиртуализиран GPU път на Apple. Shim-ът промени какво едно приложение смята, че може виртуалният GPU, а не архитектурата на VM под него.
TinyLlama 1.1B постигна най-голямото относително ускорение върху M1 Ultra с 48-ядрен GPU. Обработката на prompt се повиши от 432 на 4 787 токена в секунда, или 11,08 пъти. Генерирането на токени се ускори 16,36 пъти. Модифицираната VM достигна 98% от производителността при prompt директно върху хардуера, а при генериране достигна 72,06%.
По-големите модели показаха същата обща тенденция:
Данните умишлено имат тесен обхват. Повечето тестове са проведени върху един M1 Ultra с macOS 26.6.1 на хоста и macOS 26.5.2 в гост системата. Резултатите за TinyLlama и Gemma използват медиани от десет измервания. Muse Glimmer използва три измервания и работи върху хост, споделен с друга VM, която периодично е била активна.
Тестът с Muse обхваща и текстовия режим на llama.cpp. Не са тествани Ollama, мултимодална инференция или speculative decoding. Резултатите показват какво работи в тази конкретна конфигурация, а не обещават универсално ускорение при macOS виртуализация.
Авторите предупреждават и за друга зависимост: shim-ът разчита на непублично поведение в Metal имплементацията на гост системата, което може да се променя между версиите. Apple може да го промени при следващо издание. Когато изследователите обявили по-широка поддръжка на Metal 3, MLX поискал residency функционалност, която виртуалното устройство не можело да предостави. Затова публикуваният shim променя само тестваните стойности.
Тук е основният компромис. По-широк профил от възможности може да отключи по-бързи kernels, но може и да насочи приложенията към неподдържани функции. Всяка комбинация от чип, версия на macOS и Metal API трябва да се валидира отделно.
За екипи, които пускат локални inference сървъри или автоматизирани workers в macOS VM, практичната следваща стъпка е да измерят кой GPU път избира приложението, преди да купят още хардуер. Shim за конкретен процес може да върне значителна част от загубената производителност без промяна в архитектурата на VM. Това обаче изисква възпроизводими тестове, checksums и план за връщане назад. Публикацията препоръчва активирането да се ограничава за всяко натоварване чрез environment variables или LaunchAgent.
Ако виртуалният GPU на Apple може безопасно да изпълнява тези по-нови kernels, какво пречи на Virtualization.framework да докладва възможностите, от които llama.cpp се нуждае, за да ги избира по подразбиране?
Източници
Тази статия е изготвена с помощта на изкуствен интелект и е прегледана и редактирана от екипа на LabForty.
С абонирането тук Вие се съгласявате с нашата Политика за поверителност и ще получавате нашите бюлетини. Можете да се отпишете по всяко време, като следвате връзката в долната част на всеки бюлетин.
Блог

LabForty разработва висококачествени уебсайтове с внимание към всеки детайл – от архитектурата до потребителското изживяване и бизнес логиката.