# NPU, Copilot+ PC и нейросети. Использую NPU в повседневной жизни.

# Введение

Год назад я приобрел ноутбук категории Copilot+ PC с процессором [AMD Ryzen AI 9 HX 370](https://www.amd.com/en/products/processors/laptop/ryzen/ai-300-series/amd-ryzen-ai-9-hx-370.html). Тогда такие устройства были в новинку, да и сейчас не сильно распространены. Прошло достаточно времени и теперь хочу рассказать о том, что из себя представляют устройства такого типа.

Статью можно разделить на две части. Сначала расскажу об опыте использования Copilot+ PC и его функций в рамках Windows 11, а потом углубимся в NPU, разберемся что оно из себя представляет и даже проведем тестирование с запуском LLM.

> **Дисклеймер:** Статья написана живым человеком и даже НЕ редактировалась ИИ!
> Если найдете ошибки, то смело кидайтесь помидорами в этого необразованного, но честного автора.

# Copilot+ PC

В мае 24-го года Microsoft представили новую категорию устройств [Copilot+ PC](https://www.microsoft.com/en-us/windows/copilot-plus-pcs?r=1). Главная особенность таких устройств - процессор с NPU на 40+ TOPS для работы локальных нейросетей, которые в том числе будут встроены в Windows 11 и доступны только на этих устройствах.

NPU (Neural Processing Unit) - это отдельный сопроцессор, предназначенный для нейронных вычислений. Не редко мощность NPU измеряется в TOPS - количество триллионов операций в секунду.

Первыми представленными устройствами из этой категории, были ноутбуки на основе мобильного процессора Snapdragon X Elite. Позже подтянулись устройства на AMD с линейкой Ryzen AI и Intel с Meteor Lake. Да, все эти процессоры мобильные и предназначены для ноутбуков.

Но процессоры с NPU будут не только для ноутбуков. Уже сейчас можно найти такие процессоры для установки в обычный ПК, хотя до массового распространения, кажется, еще далеко.

## ИИ-функции Windows 11

Вместе с презентацией Copilot+ PC, Microsoft рассказали об ИИ-функциях в Windows 11. И это были самые странные обещания. Да, именно обещания, потому что рассказать - не значит сделать. Часть из представленных функций до сих пор либо нет, либо они в бете и не доступны в РФ.

Все представленные ИИ-функции должны работать локально на устройстве, как раз благодаря тому самому NPU.

Далее я расскажу лишь о некоторых таких функциях, которые сам опробовал или по крайней мере пытался.

### Recall

Одной из наиболее интересных, для меня, стала функция [Recall](https://support.microsoft.com/en-us/windows/retrace-your-steps-with-recall-aa03f8a0-a78b-4b3e-b0a1-2eb8ac48701c) - она периодически делает снимки экрана и сохраняет их, создавая историю использования устройства.

Затем можно выполнить ИИ-поиск по снимкам. Хранятся они до 3-х месяцев.

Функция, как и было заявлено, работает полностью локально. Встроенный ИИ обрабатывает снимки, которые затем в зашифрованном виде сохраняются на диск. Снимки делаются раз в 10-15 секунд, это видно по использованию NPU в диспетчере задач.

Работает функция незаметно, влияния на производительность системы нет, т.к. задействуется в основном NPU. Но все же есть то, что понравится далеко не всем. Для работы функции требуется включить шифрование устройства.

Шифрование устройства (BitLocker) - защищает данные на дисках, путем их шифрования. Но по данным тестов, в некоторых случаях, из-за шифрования, скорость работы диска снижалась до 45%.

![](./img_4.png)

Просмотр и поиск снимков работает интересно и вполне неплохо. Можно человеческим запросом найти снимки, выделить на них текст и получить разные подробности.

Но зачем это нужно? Я считаю, что функция бесполезна. Она несомненно необычная и интересная, но совершенно бесполезная. За пол года работы Recall, ни разу не воспользовался им по реальной нужде. По этому функцию благополучно отключил.

### Click to do

Другой, действительно полезной, оказалась функция [Click to do](https://support.microsoft.com/en-us/windows/click-to-do-do-more-with-what-s-on-your-screen-6848b7d5-7fb0-4c43-b08a-443d6d3f5955) - она позволяет анализировать и копировать текст на экране.

![](./img_6.png)

Текст определяет не идеально, есть ошибки, но в целом хорошо, периодически выручает.

Работает это так: нажав определенное сочетание клавиш, создается снимок экрана, который быстро (буквально за пол секунды) прогоняется через нейросеть. Работает все так же локально, на NPU.

### Paint с Copilot

Про эти ИИ-функции не смогу много рассказать, т.к. в РФ они не работают. Но зайдя в Paint, можно увидеть отдельную вкладку с различными функциями Copilot.

![](./img_5.png)

Для работы функций, требуется установить Image Generation Extension из Microsoft Store, но, как уже сказал, в РФ это расширение недоступно.

По описанию эти функции выглядят интересно, хотя далеко не новинка, кажется такое мы уже давно видим в смартфонах. 

### Вывод об ИИ-функциях

Я рассказал об этих функциях только для того, чтобы Вы могли понять их философию. Они не дают каких-то невероятных и прорывных возможностей. Но они есть, их можно использовать локально и благодаря NPU Ваша система не будет нагружаться.

Данные ИИ-функции не несут большой практической пользы, но задают направление развития. Они показывают, что так можно делать и очень хочется верить, что в будущем таких функций будет больше и они будут полезными.

# Neural Processing Unit

Как ранее уже упомянул, NPU - это сопроцессор, предназначенный для нейронных вычислений. Не буду углубляться в техническую архитектуру и различия меду CPU, GPU и NPU. Об этом можно найти достаточно материала как на хабре, так и на других ресурсах.

NPU может в десятки раз проигрывать GPU по производительности, но выигрывает в мобильности и энергоэффективности.

Чтобы понять предназначение NPU, давайте немного разберемся в нейросетях. В них можно выделить два основных этапа: обучение и выполнение.

Обучение - процесс тяжелый и требует больших вычислительных ресурсов, по этому для них используются различные ускорители, в том числе видеокарты. 

После обучения, нейросеть попадает к пользователю (сейчас мы говорим о локальных нейросетях) для работы и выполнения своих задач. На этом этапе все еще требуется значительная вычислительная мощность, но видеокарты уже не являются предпочтительным вариантом, т.к. они совершенно не мобильные и имеют высокое энергопотребление.

При чем тут мобильность? Дело в том, что нейросети не всегда используются только в ПК. Есть, например, устройства умного дома, на некоторых из них работают локальные нейросети и запихнуть туда видеокарту явно не получится. К тому же, страшно представить, какое будет энергопотребление.

Но мы, все же, в подавляющем большинстве говорим о ПК. Тут мобильность не так важна, но важно другое - ресурсы. Я бы не хотел, чтобы нейросети, работающие в фоновом режиме, съедали ресурсы GPU и CPU.

И тут в дело вступает NPU в виде отдельного сопроцессора, который не затрагивает ресурсы CPU и GPU, достаточно мобильный и потребляет меньше энергии. Но, конечно, все это бьет по производительности самого NPU.

# Тестируем NPU

Самый простой и понятный способ тестирования, который я нашел, это запустить LLM. Конечно это совсем другая категория нейросетей, в сравнении с ИИ-функциями, о которых рассказывал ранее. Но другой понятный способ тестирования найти сложно, учитывая что ПО для работы с NPU на данный момент не так много.

Даже с запуском LLM на NPU все оказалось далеко не так просто, но прежде чем перейти к деталям, рассмотрим характеристики устройства.

## Характеристики устройства

В качестве рабочего устройства используется ноутбук со следующими характеристиками:

| Характеристика              | Значение                                   |
| --------------------------- | ------------------------------------------ |
| Процессор                   | AMD Ryzen AI 9 HX 370                      |
| NPU TOPS                    | 50                                         |
| Оперативная память          | 32гб LPDDR5x, распаяна на плате в 4 гнезда |
| Скорость оперативной памяти | 7500                                       |
| Память NPU                  | 16гб (заимствует оперативную память)       |
Более подробные характеристики о ноутбуке можно посмотреть [тут](https://www.dns-shop.ru/product/2d49546e2d22d582/16-noutbuk-asus-vivobook-s-m5606wa-mx019w-cernyj/).

Обратите внимание, что поскольку NPU не имеет большого объема собственной памяти, как VRAM в GPU, он использует оперативную память, как это делает процессор.

Но объем оперативной память для NPU определен на аппаратном уровне, по этому расширению не подлежит. Это важная деталь, о которой позже поговорим.

## Как тестируем

Запуск локальной LLM на процессорах AMD Ryzen AI оказался непростой задачей. Тут важно уточнить, что процессоры AMD являются далеко не единственными представителями, имеющими NPU. У других производителей использование NPU может и скорей всего будет совершенно другим. AMD в этом плане имеет свои особенности и именно о них мы далее будем говорить.

И так, задача запуска LLM на NPU оказалась нетривиальной. llama.cpp и как следствие LM Studio не поддерживает NPU, хотя спрос есть и [пользователи просят добавить поддержку](https://github.com/lmstudio-ai/lms/issues/30). ROCm работает только с GPU. DirectML направляет вычисления в NPU только при магических обстоятельствах.

Оставался только фирменный RyzenAI Software (его скачивание и установка само по себе как отдельный квест) и предварительно оптимизированная под NPU модель, с запуском через ONNX Runtime.

В конечном итоге я просто следовал инструкции от AMD и таки смог запустить модель. Вот [тут](https://github.com/amd/RyzenAI-SW/tree/main/LLM-examples) есть достаточно информации об этом.

Модель должна быть предварительно оптимизирована для работы на NPU. Благо AMD предоставляют некоторое количество таких моделей. Со списком можно ознакомиться [тут](https://huggingface.co/collections/amd/ryzen-ai-17-npu-llm).

Для тестирования выбрал 3 модели: [Phi-3.5-mini-instruct](https://huggingface.co/amd/Phi-3.5-mini-instruct-onnx-ryzenai-npu), [Qwen2.5-Coder07B-Instruct](https://huggingface.co/amd/Qwen2.5-Coder-7B-Instruct-onnx-ryzenai-npu) и [gpt-oss-20b](https://huggingface.co/amd/gpt-oss-20b-onnx-ryzenai-npu). Разберем результаты для каждой модели отдельно.

### Phi-3.5-mini-instruct

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

В среднем NPU генерирует 12 tps (токенов в секунду). Это не много, например видеокарта NVIDIA GeForce RTX 3060 может выдавать 100+ tps для этой же модели.

Во время генерации используется 90-100% NPU.

![](./img_1.png)

### Qwen2.5-Coder07B-Instruct

Эта модель уже потребляет 5.4гб памяти и почти 6гб после начала генерации. Генерирует в среднем 10-11 tps. И нагружает NPU так же на 90-100%.

![](./img_2.png)

### gpt-oss-20b

Эта модель уже потребляет почти 13гб памяти и что интересно, после начала генерации значение никак не меняется. Что еще более интересно, график показывает использование NPU в пределах 60-70%. Но генерация особо не падает, в среднем 10-11 tps.

Почему происходит такое поведение с большими моделями - мне не известно. Возможно найдутся знатоки в комментариях, буду благодарен за объяснение.

![](./img_3.png)

Запустить модели большего размера не представляется возможным. Как писал ранее, память NPU ограничена 16гб и изменить это нельзя. Кроме того, это самая большая оптимизированная для NPU модель, которую мне удалось найти.

## Итоги тестирования

Конечно все протестированные модели можно использовать только для решения простых задач. Но что можно было ожидать от локальной LLM?

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

Скорость генерации тоже оставляет желать лучшего, но опять же, для простых задач этого вполне хватит и вновь скажу, что поскольку основные ресурсы устройства (CPU и GPU) не задействуются, есть возможность запустить такую LLM для работы в фоновом режиме.

# Заключение

NPU - это в первую очередь, как по мне, сопроцессор, предназначенный для работы фоновых нейронных процессов, которые требуют не быстрого результата, а экономной работы без перегрузки устройства.

И такие фоновые нейронные процессы это не только про LLM. В качестве хорошего примера у нас уже есть ИИ-функции в Windows 11 на устройствах категории Copilot+ PC. Хотя, как по мне, многие из этих функций являются бесполезными, но они все же задают верное направление для использования NPU в повседневных задачах.

Я показал что из себя представляет NPU на персональных устройствах в данный момент, а выводы для себя делайте сами. Спасибо за прочтение.