AISubHub/Новости ИИ
Разработка

Подробный разбор · Около 7 мин чтения

PyTorch MPS: декодирование, корректность и память драйвера требуют отдельных измерений

Команда PyTorch в Hugging Face объясняет изменения MPS в кандидате на выпуск 2.15. Для группового декодирования, хранения FP8, дополнения тензоров и будущих работ над 2.16 приведены разные свидетельства.

Опубликовано здесь
Дата источника
Источник проверен

В технической статье от 20 октября участники разработки PyTorch из Hugging Face объясняют, как специализированные ядра Metal меняют работу бэкенда MPS на Apple silicon. В ней приведён способ установки кандидата на выпуск PyTorch 2.15 и отдельно рассматривается предварительный обзор 2.16. Польза статьи — в конкретных узких местах и измерениях, а не в едином коэффициенте ускорения, применимом к любой нагрузке на Mac.

Слушать новости

Прослушайте эту статью или включите новости подряд.

PyTorch MPS: декодирование, корректность и память драйвера требуют отдельных измерений

Подготовка чтения…

Голос устройства

Речь обрабатывает браузер или устройство. AISubHub не отправляет текст в аудио-API. Доступные голоса и работа при заблокированном экране зависят от устройства.

При продолжении короткая фраза может повториться.

Кратко

  • Указанное окружение требует Apple silicon, macOS 15 или новее и Python 3.11 или новее. Версия 2.15 представлена как кандидат на выпуск и отделена от nightly-сборок и находящихся на рассмотрении работ для 2.16.
  • Специализация группового матричного умножения для декодирования даёт примерно 1,3-кратную пропускную способность в показанных экспериментах на M3 Ultra с torch.compile. Отдельный график softmax измеряет микросекунды для одной операции, а не задержку полного ответа.
  • Для одного декодирования Wan2.2 VAE с 28 фрагментами сообщается о снижении пика общей памяти драйвера с 270,135 до 8,108 GiB, тогда как пик памяти, зарезервированной аллокатором, остаётся 8,070 GiB. Это разные показатели памяти.

1. Сначала определите версию и изменяемую часть выполнения

Авторы представляются командой PyTorch в Hugging Face, работающей с сопровождающими и участниками основного проекта PyTorch. Их объяснение сосредоточено на замене отдельных путей MPSGraph специализированными ядрами Metal. Это работа над бэкендом: модели могут получить пользу без выхода новых версий самих моделей, а ускорение ядра не доказывает улучшения ответов модели. Указанные требования — Mac на Apple silicon, macOS 15 или новее и Python 3.11 или новее.

Статья прямо предлагает попробовать кандидат на выпуск 2.15 в отдельном окружении. В последующих разделах рассматриваются изменения 2.16, которые могут находиться в nightly-сборках или ещё проходить рассмотрение. AISubHub не проверял независимо состояние последующих стабильных выпусков. Для воспроизводимого сравнения перед переходом между этими разделами следует зафиксировать точную сборку, устройство, dtype, настройки компилятора и нагрузку. Иначе будущую оптимизацию легко принять за функцию измеренной версии.

2. Специализация декодирования меняет узкую повторяющуюся операцию

На этапе предварительной обработки, или prefill, модель обрабатывает блок входных данных; при декодировании она многократно обрабатывает небольшой вход для следующего токена. Статья описывает подключение F.linear к существующим матрично-векторным ядрам и применимым слитным операциям добавления смещения. Для 96 форм слоёв BF16 сообщается об ускорении в 1,23 раза по геометрическому среднему. Наибольший выигрыш получают небольшие проекции, тогда как крупные слои, уже близкие к пределу пропускной способности памяти, остаются примерно на уровне 1 раза. Это набор измерений слоёв, а не средний результат всей модели.

При выполнении Mixture-of-Experts нативное групповое матричное умножение считывает смещения групп на GPU вместо их копирования на CPU и последовательного обхода групп. На показанном графике специализации декодирования используются M3 Ultra и torch.compile: для Qwen3.6-35B-A3B при контексте 512 скорость растёт с 38,7 до 51,7 токена в секунду, а при контексте 2048 — с 36,8 до 48,7. Отдельно статья сообщает о более крупных улучшениях при сравнении версий целиком с 2.14. У этих сравнений, у данного примерно 1,3-кратного сравнения ядер и у последующих измерений 2.16 разные исходные базы; их нельзя объединять или перемножать.

3. Хранение FP8 и время softmax отвечают на разные вопросы

Дополнение FP8 — это поддержка тензоров torch.float8_e4m3fn с одним байтом на значение вместо двух у FP16 или BF16. F.scaled_mm поддерживает масштабирование для тензора целиком и по строкам. Это может уменьшить объём хранения подходящих тензоров, но не сокращает вдвое память всего приложения: остаются другие тензоры, рабочие буферы и выделения памяти во время выполнения. Квантование и dtype выхода в примере также влияют на численное поведение. Нативное матричное умножение FP8 рассматривается в статье как основа для будущих шейдеров Metal, поэтому текущую поддержку хранения нельзя приравнивать к универсальному заявлению об аппаратном ускорении.

График softmax — ещё один самостоятельный эксперимент. Для одной строки logits FP32 со словарём из 128 256 элементов он показывает 57,4 микросекунды на MPSGraph и 7,1 на ядре Metal; в тексте эти значения округлены до 57 и 7. Примерно восьмикратное ускорение softmax может сократить один этап выбора токена, однако общее время генерации по-прежнему зависит от другой работы. Анализ AISubHub: измерять следует как дорогостоящую операцию, так и весь путь, сохраняя единицы измерения. Микросекунды на вызов не должны превращаться в необоснованное заявление о секундах на ответ.

4. Дополнение тензоров выявляет память вне тензорного аллокатора

Пример Wan2.2 относится именно к Wan-AI/Wan2.2-TI2V-5B-Diffusers: при декодировании VAE с 28 фрагментами выполняются 8 764 вызова дополнения константой. Перенос дополнения на Metal меняет сообщаемый пик общей памяти драйвера с 270,135 до 8,108 GiB. При этом пик памяти, зарезервированной аллокатором, в обеих конфигурациях равен 8,070 GiB, а пик текущего объёма выделенной тензорной памяти меняется лишь с 4,422 до 4,095 GiB. Один только показатель тензорного аллокатора упустил бы большую часть этой конкретной проблемы. Результат не означает, что теперь каждой видеомодели достаточно восьми GiB.

Корректность — отдельное преимущество. Для полного цикла кодирования и декодирования VAE Qwen-Image-2.1 авторы сообщают, что после исправления дополнения соответствие эталону на CPU улучшилось с 10,06 до 29,95 dB PSNR. Это относится к проверенному процессу реконструкции, а не к универсальной оценке качества генерации изображений. Среди других изменений перечислены линейная алгебра с комплексными числами, пути обратного распространения и broadcasting в attention. Поэтому полезная проверка обновления должна включать численные результаты и пик памяти драйвера наряду с пропускной способностью, при той же модели и тех же формах операций.

5. Отделяйте будущие работы от локальной проверки

Предварительный обзор 2.16 включает изменения отправки командных буферов, attention, целиком выполняемый на Metal, и дальнейший перенос путей MPSGraph. Авторы предупреждают, что часть работ ещё находится на рассмотрении. В будущих примерах attention также используются M5 Pro и определённые размерности голов, в отличие от графика декодирования на M3 Ultra. Ни эти числа, ни уменьшение размера одной библиотеки в комплекте нельзя выдавать за измеренную пользу установки кандидата 2.15 на любой Mac.

Публичные потоки MPS и поддержка регистрации использования тензора в потоке дают вызывающему коду Python больше контроля над планированием, но в примере всё равно выполняется синхронизация перед чтением результата. Статья также перечисляет сохраняющиеся ограничения операций и текущие работы по устранению разрывов графа компиляции. Практическая интерпретация AISubHub — проверять отдельное окружение на реальных dtype, формах, синхронизации и допусках выходных значений своего приложения. Мы прочитали статью полностью и все три графика; мы не устанавливали PyTorch, не выполняли приведённые фрагменты кода, не изучали связанные pull request и не воспроизводили результаты по времени, качеству или памяти.

Почему это важно

Анализ AISubHub: обновления бэкенда следует оценивать, раздельно фиксируя пропускную способность полного декодирования, время операций, корректность выходов и пики памяти драйвера. Это помогает определить, какое из сообщаемых изменений соответствует реальному узкому месту приложения, не превращая результат ядра в универсальное утверждение о моделях.

Ограничения и доступность

Все измерения приведены с указанием их принадлежности участникам разработки PyTorch из Hugging Face и заданным ими конфигурациям. Статья описывает кандидат на выпуск 2.15 и отдельно рассматривает работы для 2.16; доступность последующих стабильных версий независимо не проверялась. AISubHub не устанавливал и не запускал ПО, не воспроизводил тесты производительности и не изучал связанные реализации. Из этого не следует гарантия универсального ускорения, достаточности памяти или численного качества.

Источники и подтверждения

Hugging Face PyTorch team: MPS in PyTorch 2.15

Дата источника: · Источник проверен:

Материалы подготовлены с помощью ИИ и сверены с указанными первоисточниками. Заявления поставщиков атрибутированы; публикация не означает рекомендацию.