Ускорение инференса LLM в macOS-виртуалках: как обход ограничений Metal дал прирост до 16 раз

Hacker News · оригинал

Материал подготовлен автоматизированной редакционной системой. Факты можно сверить по указанному первоисточнику.

Команда Cua представила экспериментальный метод ускорения работы локальных языковых моделей в виртуальных машинах на Apple Silicon, достигнув прироста производительности до 16 раз. Решение основано на изменении ответов виртуального GPU о своих возможностях, что позволяет софту использовать более быстрые вычислительные пути.

Материал демонстрирует практический способ преодоления ограничений паравиртуализации графических ускорителей в macOS, что критически важно для разработчиков, работающих с локальным ИИ на Mac.

Команда Cua, известная по проекту Lume — стеку виртуализации для macOS, опубликовала результаты исследования, посвященного ускорению инференса больших языковых моделей (LLM) в виртуальных машинах. Проблема заключалась в том, что стандартные macOS-гости, работающие через Apple Virtualization.framework, получали от виртуального GPU консервативный профиль возможностей Metal. Это заставляло приложения, такие как llama.cpp, выбирать медленные вычислительные пути (кernels), даже если физический графический процессор хоста был способен на более быстрые операции.

Для решения этой задачи разработчики создали небольшой слой совместимости (shim), который работает в рамках одного процесса гостевой системы. Этот механизм перехватывает запросы к API Metal и изменяет ответы о поддерживаемых семействах GPU и объеме памяти для потоковых групп. В частности, shim сообщает системе о поддержке Apple family 9 и увеличивает лимит threadgroup memory с 32 КБ до 64 КБ. Это позволяет llama.cpp активировать современные пути вычислений, включая SIMD-group matrix и bfloat16.

Тестирование проводилось на процессоре M1 Ultra с 48-ядерным GPU. На модели TinyLlama 1.1B обработка промптов стала быстрее в 11,08 раза, а генерация токенов — в 16,36 раза по сравнению со стандартной конфигурацией виртуальной машины. При этом скорость обработки промптов достигла 98% от показателей работы на «голом железе» (bare-metal). Аналогичные результаты были получены с моделью Gemma 4 12B: ускорение обработки составило 7,20 раза, а генерации — 14,54 раза. В случае более крупной модели Muse Glimmer 30B прирост составил 7,55 раза для обработки промптов и 8,87 раза для генерации.

Важно отметить, что это не классический GPU passthrough, как в системах на базе QEMU/KVM с использованием VFIO. Здесь используется паравиртуализация, где хост сохраняет полный контроль над оборудованием, а гость работает через виртуальное устройство. Разработчики подчеркивают, что их решение затрагивает только один процесс и не изменяет ядро или другие компоненты системы. Однако метод опирается на приватные и чувствительные к версиям детали реализации Metal в macOS, что делает его экспериментальным.

Команда также протестировала MLX-LM, но там прирост был минимальным, так как этот фреймворк изначально эффективно работал со стандартным профилем возможностей. Авторы предупреждают, что Apple может изменить поведение виртуального GPU в будущих релизах macOS, поэтому каждый новый комбо хоста и гостя требует отдельной проверки. Исходный код, скрипты сборки и сырые логи бенчмарков опубликованы под свободной лицензией, чтобы сообщество могло воспроизвести результаты и помочь в картировании совместимости для разных чипов Apple Silicon.

Этот подход открывает новые возможности для локального запуска ИИ-моделей в изолированных средах на Mac, сохраняя при этом безопасность и управляемость виртуализации. Разработчики приглашают сообщество тестировать shim на своих конфигурациях и делиться результатами, чтобы расширить базу знаний о совместимости различных версий macOS и моделей ИИ.