diff --git a/about-npu/.metadata.json b/about-npu/.metadata.json new file mode 100644 index 0000000..32349d7 --- /dev/null +++ b/about-npu/.metadata.json @@ -0,0 +1,5 @@ +{ + "displayName": "Для чего нам нужен NPU?", + "pubDate": "07.03.2026", + "hide": true +} \ No newline at end of file diff --git a/about-npu/img_1.png b/about-npu/img_1.png new file mode 100644 index 0000000..0c49503 Binary files /dev/null and b/about-npu/img_1.png differ diff --git a/about-npu/img_2.png b/about-npu/img_2.png new file mode 100644 index 0000000..98377a0 Binary files /dev/null and b/about-npu/img_2.png differ diff --git a/about-npu/img_3.png b/about-npu/img_3.png new file mode 100644 index 0000000..fe443d2 Binary files /dev/null and b/about-npu/img_3.png differ diff --git a/about-npu/index.md b/about-npu/index.md new file mode 100644 index 0000000..0c39f99 --- /dev/null +++ b/about-npu/index.md @@ -0,0 +1,137 @@ +# Введение + +Год назад я приобрел ноутбук категории 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 - количество триллионов операций в секунду. + +## ИИ-функции Windows 11 + +Стоит отметить, что на момент покупки ноутбука этих функций в Windows 11 не было и появлялись они со временем. Хотя даже сейчас далеко не все функции доступны. + +Далее я расскажу лишь о некоторых таких ИИ-функциях, которые сам пощупал или по крайней мере пытался пощупать. + +### Recall + +Одной из наиболее интересных, для меня, стала функция [Recall](https://support.microsoft.com/en-us/windows/retrace-your-steps-with-recall-aa03f8a0-a78b-4b3e-b0a1-2eb8ac48701c) - она периодически делает снимки экрана и сохраняет их, создавая историю использования устройства. + +Затем можно выполнить ИИ-поиск по этим снимкам, котороые хранятся вплодь до 3-х месяцев. + +Конечно в такой функции пользователей больше всего волнует конфиденциальность. Первое время с этим были проблемы, но сейчас Recall имеет вполне гибкие настройки и неплохую безопасность. + +Кроме того, именно для этого нужен NPU, который позволяет обрабатывать снимки локально, так что они не покидают устройства. + +Но в этой статье я не буду подробно затрагивать безопасность, это тема для отдельной статьи, по этому ограничимся общим описанием. + +Сама функция работает вполне неплохо. Но больше всего волновало "а для чего использовать?". За пол года так ни разу не воспользовался поиском в Recall, просто не было нужды, хотя он работал, снимки делал и действительно позволял заглянуть на 3 месяца назад. За ненадобностью функция была благополучно отключена. + +### 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) - она позволяет анализировать текст на экране, даже если он на картинке. + +Текст определяет не идеально, есть ошибки, но в целом хорошо, периодически выручает. + +Не хватает возможности выделить фрагмент на экране и найти по нему информацию в интернете, подобно Circle to Search на смартфонах Android. Но можно быстро выполнить поиск по тексту, найденному на экране. + +### Что еще + +Есть еще несколько функций, таких как Cocreator и Restyle Image, которые помогают рисовать и изменять изображения соответственно, но на данный момент в РФ они не доступны. + +Сам Copilot, который должен работать локально, так и не нашел. Предлагают только Microsoft 365 Copilot, но это уже совсем другое. + +# Neural Processing Unit + +Как ранее уже упомянул, NPU - это сопроцессор, предназначенный для нейронных вычислений. Не буду углубляться в техническую архитектуру и различия меду CPU, GPU и NPU. Об этом можно найти достаточно материала как на хабре, так и на других ресурсах. + +NPU может в десятки раз проигрывать GPU по производительности, так зачем он нужен? + +Чтобы разобраться в этрм, немного разберем нейросети. В них можно выделить два основных этапа: обучение и выполнение. + +Обучение - процесс тяжелый и требует больших вычислительных ресурсов, по этому для них используются различные ускорители, в том числе видеокарты. + +После обучения, нейросеть попадает к пользователю (сейчас мы говорим о локальных нейросетях) для работы и выполнения своих задач. На этом этапе все еще требуется значительная вычислительная мощность, но видеокарты уже не являются предпочтительным вариантом, т.к. они совершенно не мобильные и имеют высокое энергопотребление. + +Например, я не хочу, чтобы в процессе работы, нейросети работающие в фоне, съедали все ресурсы устройства, тем самым мешая работать. + +И тут в дело вступает NPU в виде отдельного сопроцессора, который не затрагивает ресурсы CPU и GPU. Он потребляет меньше энергии, но и производительности значительно ниже, чем у GPU. + +# Тестируем NPU + +А теперь посмотрим на производительность NPU на практике. + +Мне, как разработчику, хочется иметь собственную LLM, для решения небольших задач, но так, чтобы она не сжирала весь бюджет за час. Локальная LLM - отличный вариант. Кроме того, работа на NPU означает, что CPU и GPU не будут затронуты и моей работе ничего не помешает. + +Далее запустим несколько LLM на NPU, но перед этим рассмотрим характеристики устройств и углубимся в детали. + +## Характеристики устройства + +В качестве рабочего устройства используется ноутбук со следующими характеристиками: + +| Процессор | AMD Ryzen AI 9 HX 370 | +| --------------------------- | ------------------------------------------ | +| NPU TOPS | 50 | +| Оперативная память | 32гб LPDDR5x, распаяна на плате в 4 гнезда | +| Скорость оперативной памяти | 7500 | +| Оперативная память для NPU | 16гб (заимствует оперативную память) | +Обратите внимание, что поскольку NPU не имеет большого объема собственной памяти, как VRAM в GPU, он использует оперативную память, как это делает процессор. + +Но объем оперативной память для NPU определен на аппаратном уровне, по этому расширению не подлежит. Это важная деталь, о которой позже поговорим. + +## Как тестируем + +Запуск локальной LLM на процессорах AMD Ryzen AI оказался непростой задачей. Тут важно уточнить, что процессоры AMD являются далеко не единственными представителями, имеющими NPU. У других производителей использование NPU может и скорей всего будет совершенно другим. AMD в этом плане имеет свои особенности и именно о них мы далее будем говорить. + +И так, задача запуска LLM на NPU оказалась нетривиальной. Я перебрал не мало вариантов и таки смог запустить, установив RyzenAI Software (его скачивание и установка само по себе как отдельный квест) и запустив предварительно оптимизированную под NPU модель через ONNX Runtime. + +Почему ONNX Runtime, а не, например, LM Studio? Дело в том, что llama.cpp, как и LM Studio в целом, не поддерживают NPU. Хотя спрос есть и [пользователи просят добавить поддержку](https://github.com/lmstudio-ai/lms/issues/30), но на данный момент это невозможно. + +Есть альтернативный вариант - запуск через DirectML, но как бы ни пытался, задействовать NPU не удалось. В конечном итоге я просто следовал инструкции от AMD и таки смог запустить модель. + +Кроме того, модель должна быть предварительно оптимизирована для работы на 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 в повседневных задачах. \ No newline at end of file