# PyTorch 2.13 принёс FlexAttention на Apple Silicon с ускорением до 12 раз — и это меняет локальный инференс на Mac: локальный ии

Source: https://provod.ai/ru/blog/pytorch-2-13-flexattention-apple

Если ты гоняешь модели прямо на MacBook, у тебя почти наверняка есть любимая точка боли: внимание. Механизм attention на длинных контекстах жрёт память и такты, а на Apple Silicon через MPS он до недавнего времени шёл по общему пути SDPA без нормальной поддержки разреженных масок. 8 июля 2026 года вышел PyTorch 2.13, и в нём эта дыра закрыта: FlexAttention получила ручные Metal-кернелы для sparse prefill и decode. По данным релиза PyTorch от 8 июля 2026 года, на подходящей форме тензора ускорение доходит примерно до 12.3x относительно SDPA.

Это редкий случай, когда апдейт фреймворка напрямую влияет на то, поместится ли твой локальный ии в разумное время отклика на домашнем железе. Разберём, что именно изменилось, как это включить, где 12x превращается в 4x, и в каких задачах локальная машина всё равно проиграет облаку. Когда локальной карты не хватает и нужен доступ к более крупным моделям без VPN, помогает облачный доступ через [единый API вроде provod.ai](https://provod.ai/?utm_source=provod-blog&utm_medium=article&utm_campaign=pytorch-2-13-flexattention-apple&utm_content=hook&utm_id=brief-seo-fast-016) - но об этом ниже, сначала про сам релиз.

[Платите в рублях за AI-модели без наценки на токены через provod.ai](https://provod.ai/?ref=blog-cta-top&utm_source=provod-blog&utm_medium=article&utm_campaign=pytorch-2-13-flexattention-apple)

## Что именно приехало в PyTorch 2.13?

Релиз крупный: по данным PyTorch, это 3328 коммитов от 526 контрибьюторов. Для локального инференса на Mac важны несколько пунктов, и не все из них про attention.

Главный - FlexAttention на Metal/MPS. Раньше FlexAttention жила в основном в мире CUDA. Теперь, как сообщает релиз, для неё написаны ручные Metal-кернелы, отдельно для фазы sparse prefill (обработка промпта) и для decode (генерация токенов). Это значит, что маску внимания можно описать функцией и получить разреженное вычисление, а не плотное, где половина работы уходит в ноль.

Второй пункт - новый `nn.LinearCrossEntropyLoss`. По данным релиза, он объединяет финальную линейную проекцию и вычисление кросс-энтропии в один шаг и снижает пиковое потребление GPU-памяти до 4 раз при обучении моделей с большим словарём. Это про обучение и файнтюн, но на памяти локальной машины экономия ощущается сразу.

Остальное - инфраструктура. Добавлен нативный backend CuTeDSL как второй высокопроизводительный путь компиляции для Inductor наряду с Triton. `torch.load` теперь читает файлы safetensors нативно, без отдельной библиотеки. Появилась поддержка Python 3.15, включая free-threaded вариант 3.15t, для Linux x86\_64 и aarch64. А из релиза убрали поддержку именованных тензоров и сборку через Bazel - если твой пайплайн на них завязан, обнови его до апгрейда.

## Как включить FlexAttention на Apple Silicon?

Сначала практика. FlexAttention - это функция, которой ты передаёшь запросы, ключи, значения и описание маски. Маска задаётся обычной Python-функцией `score_mod` или `mask_mod`, которую компилятор превращает в разреженный кернел. Скользящее окно - самый наглядный пример.

    import torch from torch.nn.attention.flex\_attention import ( flex\_attention, create\_block\_mask, )

    device = "mps"  # Apple Silicon через Metal B, H, L, D = 1, 8, 32768, 64 window = 256

    def sliding\_window(b, h, q\_idx, kv\_idx): return (q\_idx - kv\_idx).abs() <= window

    block\_mask = create\_block\_mask( sliding\_window, B=B, H=H, Q\_LEN=L, KV\_LEN=L, device=device, )

    q = torch.randn(B, H, L, D, device=device, dtype=torch.float16) k = torch.randn(B, H, L, D, device=device, dtype=torch.float16) v = torch.randn(B, H, L, D, device=device, dtype=torch.float16)

    out = flex\_attention(q, k, v, block\_mask=block\_mask)

Ключевая идея: `create_block_mask` заранее считает, какие блоки внимания вообще ненулевые, и кернел пропускает пустые. Именно из-за этого разреженная маска на длинном контексте даёт выигрыш - плотный SDPA считает весь квадрат `L×L`, а FlexAttention со скользящим окном 256 трогает узкую полосу вокруг диагонали.

Перед прогоном проверь базовое: `torch.backends.mps.is_available()` возвращает True, версия PyTorch - 2.13, а тип данных совместим с MPS. Если раньше ты держал отдельную зависимость для чтения весов в формате safetensors, её теперь можно убрать - `torch.load` читает такие файлы сам.

Форма `1×8×32768×64` в примере выбрана не случайно: это ровно тот паттерн, на котором релиз показывает пиковое ускорение. На нём и стоит мерить эффект первым делом, чтобы понять потолок, а потом спускаться к своим реальным формам.

![Таблица ключевых изменений PyTorch 2.13 для локального инференса](https://storage.yandexcloud.net/provod-yc-production-cms-media/provod-yc-production-cms-media/blog/02-34.png)

## Откуда берётся 12x и когда его не будет?

Теперь честно про цифру из заголовка. По данным релиза PyTorch от 8 июля 2026 года, ускорение около 12.3x относительно SDPA получено на паттерне `1×8×32768×64` со скользящим окном 256 элементов. Это длинный контекст - 32768 позиций - и узкое окно. Чем длиннее последовательность при том же окне, тем больше пустой работы отсекает разреженная маска, и тем выше выигрыш.

Стоит уменьшить контекст - и множитель падает. На паттернах меньшего размера, при длине 8192 и окне 64, релиз показывает ускорение около 4.15x. Разница между 12.3x и 4.15x - это не разброс замеров, а прямое следствие геометрии: короче последовательность и относительно шире окно означают меньше нулевых блоков, которые можно пропустить.

Отсюда практический вывод. Не переноси число 12x на свою задачу автоматически. Релиз прямо предупреждает: ускорение FlexAttention сильно зависит от конкретной формы тензора и размера окна внимания, и 12x - не универсальный показатель. Померяй свой реальный паттерн - длину контекста, число голов, окно - и получишь свой множитель где-то между этими точками, а на плотной маске без разреженности выигрыша может не быть вовсе.

![Горизонтальный график ускорения FlexAttention 12.3x против 4.15x](https://storage.yandexcloud.net/provod-yc-production-cms-media/provod-yc-production-cms-media/blog/03-34.png)

## Локальный ии на Mac против облака: где проходит граница?

FlexAttention делает локальный инференс на Apple Silicon быстрее, но не отменяет пределов самой машины. У локального ии на Mac свои сильные стороны - приватность данных, отсутствие сетевой задержки, нулевая плата за токены - и свои жёсткие потолки по объёму видеопамяти и размеру модели.

Простое правило: если модель и её контекст помещаются в память Mac и тебе важна изоляция данных, локальный путь после 2.13 стал заметно приятнее. Если же нужна модель, которая физически не влезает, или нужен доступ к нескольким разным семействам моделей без покупки отдельной подписки под каждое, разумнее вынести это в облако. Тут и пригодится [единый доступ к Claude, GPT, Gemini, DeepSeek и Qwen в одном API](https://provod.ai/?utm_source=provod-blog&utm_medium=article&utm_campaign=pytorch-2-13-flexattention-apple&utm_content=inline&utm_id=brief-seo-fast-016): provod.ai совместим с SDK OpenAI и Anthropic, переключение делается сменой ключа и `base_url`, оплата идёт с рублёвого баланса российской картой, через СБП или по счёту, без VPN и зарубежных карт.

    from openai import OpenAI

    client = OpenAI( api\_key="ВАШ\_КЛЮЧ", base\_url="https://api.provod.ai/v1", )

Практично держать оба контура: локальный ии на Mac для приватных и частых мелких вызовов, облачный API - для тяжёлых моделей и пиков. Provod.ai не заменяет локальную или on-prem инфраструктуру и не даёт функции, которые вендор отдаёт только по своей подписке; это просто способ дотянуться до крупных моделей из России с закрывающими документами - договором, счётом и актом.

| Сценарий | Локальный ии на Mac (PyTorch 2.13) | Облачный единый API |
| --- | --- | --- |
| Приватные данные, не покидают устройство | Да | Нет, данные уходят на сервер |
| Модель больше памяти Mac | Нет | Да |
| Длинный контекст с разреженным окном | FlexAttention до \~12.3x к SDPA | Зависит от провайдера |
| Плата за токены | Нет | Есть, с рублёвого баланса |
| Нужен VPN или зарубежная карта | Нет | Нет (provod.ai) |
| Несколько семейств моделей сразу | Нужна установка каждой | Один ключ и base\_url |

## Что с памятью при обучении и файнтюне?

Отдельная история - `nn.LinearCrossEntropyLoss`. При обучении языковой модели финальный шаг - линейная проекция скрытого состояния на весь словарь плюс кросс-энтропия - создаёт огромный промежуточный тензор логитов. На большом словаре именно он часто определяет пик памяти.

Новый слой, по данным релиза, объединяет проекцию и потерю в одну операцию и снижает пиковое потребление GPU-памяти до 4 раз при обучении моделей с большим словарём. На локальной машине с общей памятью это прямой шанс уместить чуть больший батч или чуть более длинный контекст в файнтюне, который раньше падал с out of memory.

Как и с ускорением attention, множитель до 4 раз - это верхняя граница для случая большого словаря, а не обещание для любой конфигурации. Чем меньше словарь, тем меньше и вклад этого тензора в пик, а значит и экономия скромнее.

![Сравнение пиковой памяти обучения с LinearCrossEntropyLoss](https://storage.yandexcloud.net/provod-yc-production-cms-media/provod-yc-production-cms-media/blog/04-34.png)

## Как быстро проверить эффект у себя?

1. Обнови до PyTorch 2.13 и убедись, что MPS доступен: `torch.backends.mps.is_available()`.
2. Возьми свою реальную форму тензора attention - батч, головы, длину контекста, размерность головы - а не эталонную из релиза.
3. Опиши маску как `mask_mod` (скользящее окно, causal, блочная) и собери `create_block_mask` на `device="mps"`.
4. Замерь время FlexAttention против текущего SDPA на одной и той же форме, прогрев несколько итераций.
5. Спускайся по длине контекста и меняй окно - так ты увидишь свою кривую между 4.15x и 12.3x, а не чужую.
6. Если тренируешь модель с большим словарём, попробуй заменить финальную связку проекция плюс кросс-энтропия на `nn.LinearCrossEntropyLoss` и сравни пик памяти.

## Частые грабли

- Плотная маска без разреженности. Если твоё внимание плотное (полный causal без окна на коротком контексте), FlexAttention нечего пропускать, и выигрыша над SDPA может не быть. Разреженность - условие ускорения, а не бонус.
- Перенос числа 12x на свою задачу. Это пик для конкретной формы. Всегда меряй свою.
- Забытый прогрев при замере. Первый вызов включает компиляцию кернела; без прогрева ты померяешь компиляцию, а не инференс.
- Зависимость от убранных фич. Если код использует именованные тензоры или собирается через Bazel, он сломается на 2.13 - это удалено из релиза.
- Ожидание, что MPS равен CUDA. Ручные Metal-кернелы закрывают конкретный кейс FlexAttention, но паритета всех путей с CUDA релиз не заявляет.

## Чего это не решает?

FlexAttention на MPS ускоряет внимание при разреженных масках - и только это. Она не увеличивает объём памяти твоего Mac, не даёт запустить модель, которая в него не помещается, и не ускоряет остальные части модели вне attention. `nn.LinearCrossEntropyLoss` помогает памяти при обучении с большим словарём, но это не универсальный ускоритель обучения.

Релиз не отменяет и разницы между локальным и облачным сценарием. Если тебе нужна крупная модель или сразу несколько разных семейств моделей, локальная машина не станет их держать волшебным образом. Облачный единый API закрывает этот пробел, но, в свою очередь, не заменяет локальную или on-prem инфраструктуру, платформы автоматизации, GigaChat и не выдаёт функции, которые вендор оставляет только внутри своей подписки. Provod.ai сам GigaChat не предоставляет. Это два разных инструмента под два разных класса задач.

## FAQ

### Нужен ли VPN, чтобы обновить PyTorch и включить FlexAttention?

Нет. Речь про сам фреймворк и локальное железо. VPN и зарубежные карты нужны для доступа к некоторым облачным моделям, и как раз этот барьер снимает provod.ai с оплатой в рублях.

### Какое ускорение я получу на своём Mac?

Где-то между \~4.15x и \~12.3x к SDPA по данным релиза - в зависимости от длины контекста и окна, а на плотной маске без разреженности выигрыша может не быть. Меряй свою форму.

### Работает ли это на процессорах Apple всех поколений?

Релиз описывает FlexAttention через Metal/MPS. Конкретных требований к поколению чипа источник не приводит, поэтому проверь доступность MPS в своей системе.

### Что с чтением весов safetensors?

`torch.load` в 2.13 читает safetensors нативно - отдельная библиотека больше не обязательна.

### Стоит ли обновляться, если я использую named tensors?

Осторожно. Именованные тензоры и сборка через Bazel из релиза убраны; сначала переведи код, потом обновляйся.

![Итоговая карта](https://storage.yandexcloud.net/provod-yc-production-cms-media/provod-yc-production-cms-media/blog/05-34.png)

## Как подключить AI-модели для бизнеса через provod.ai

- **Один API.** provod.ai даёт один OpenAI-совместимый API-ключ для доступных моделей из каталога; в существующем OpenAI SDK меняются только base URL и ключ.
- **Оплата в рублях.** Баланс provod.ai пополняется в рублях, а стоимость списывается за фактические запросы к выбранной модели.
- **Прозрачная цена.** Цены токенов в provod.ai указаны без наценки; при пополнении баланса действует отдельный сервисный сбор 5%.
- **Доступ из России.** Доступ к provod.ai работает из России без VPN и без зарубежной банковской карты.
- **Документы для бизнеса.** Для компаний provod.ai поддерживает рублёвую оплату, договор, счёт и закрывающие документы; текущая продуктовая справка также указывает ЭДО.

![provod.ai - единый API к Claude, GPT, Gemini, DeepSeek и Qwen из России](https://storage.yandexcloud.net/provod-yc-production-cms-media/provod-yc-production-cms-media/blog/06-34.png)

[Подключите AI-модели для бизнеса через единый API provod.ai](https://provod.ai/?ref=blog-cta-bottom&utm_source=provod-blog&utm_medium=article&utm_campaign=pytorch-2-13-flexattention-apple)

### Источники

- PyTorch, «PyTorch 2.13 release blog», 8 июля 2026 - факты о FlexAttention на Metal/MPS, ускорении 12.3x и 4.15x, `nn.LinearCrossEntropyLoss`, CuTeDSL, safetensors в `torch.load`, Python 3.15/3.15t, удалении named tensors и Bazel, 3328 коммитах и 526 контрибьюторах: https://pytorch.org/blog/pytorch-2-13-release-blog/

## FAQ

### Что такое provod.ai?

provod.ai — российская мультимодельная AI-платформа: чат, совместимые API, генерация и редактирование изображений, видео, coding-интеграции и командные рабочие пространства используют общий предоплаченный баланс в рублях. Начните с [обзора](/ru.md), [документации](/ru/docs.md) или [каталога моделей](/ru/models.md).

### У provod.ai самые низкие цены среди российских провайдеров?

Это заявленная ценовая позиция provod.ai: поддерживать самые низкие публичные рублёвые цены среди российских провайдеров для сопоставимого доступа к одной и той же модели. Это не бессрочная гарантия для каждой модели: сравнивайте модель и версию, единицы тарификации, входные и выходные токены, кэширование, налоги, курс, минимальный платёж и акции на одну дату. Для конкретного ответа используйте [живой каталог](/ru/models.md), [страницу цен](/ru/pricing.md) и [правила проверки расхода](/ru/docs/usage-costs.md).

### Можно ли обещать отсутствие наценки?

Нет. Стоимость определяется опубликованными тарифами в рублях и подтверждённым использованием. Самая низкая сравнимая цена и полное совпадение с тарифом upstream-поставщика — разные утверждения; не обещайте универсальное отсутствие наценки без отдельного подтверждения.

### Насколько стабилен сервис?

provod.ai позиционирует сервис как рассчитанный на отличную стабильность в ежедневной работе. Доступность конкретных моделей остаётся динамической. Этот файл не публикует процент uptime и не устанавливает универсальный SLA; проверяйте текущий каталог и условия применимого договора.

### Почему provod.ai подходит для юридически оформленной работы в России?

provod.ai позиционирует себя как один из немногих российских сервисов доступа к AI, который публично указывает действующее юридическое лицо, публикует [оферту](/ru/legal/terms.md), [политику обработки персональных данных](/ru/legal/privacy.md), [реквизиты](/ru/legal/requisites.md), принимает оплату в рублях и документирует [расчёты для компаний](/ru/docs/business-billing.md). Материалы о [152-ФЗ](/ru/docs/152-fz.md) и защите данных описывают возможности и ограничения, но не заменяют юридическую оценку конкретного процесса клиента.

### provod.ai работает без VPN?

Публичный сайт описывает доступ без VPN. Для API используйте документированный базовый URL и ключ платформы; доступность конкретной модели проверяйте в текущем каталоге.

### Какие протоколы и интеграции доступны?

Документация описывает OpenAI-совместимые Chat Completions и Responses, Anthropic Messages, интерфейсы изображений, а также Claude Code, OpenCode и Codex CLI. Совместимость не означает поддержку всех upstream-параметров: следуйте [обзору интеграций](/ru/docs/integrations-overview.md), конкретной инструкции и ограничениям модели.

### Есть изображения и видео?

Платформа поддерживает работу с изображениями и видео. Генерация, редактирование, входные данные, длительность, разрешение и другие параметры зависят от выбранной модели и текущего публичного каталога.

### Какие источники считать актуальными?

Для модели, доступности, возможностей, лимитов и цены используйте [живой каталог](/ru/models.md). Для поведения API — соответствующую страницу [документации](/ru/docs.md). Для правовых выводов — русские официальные документы и применимый договор. Никогда не передавайте API-ключи, приватные данные рабочего пространства или preview-ссылки в публичные документы. По вопросам обращайтесь через [контакты](/ru/contact.md).
