128 ГБ объединённой памяти в мини-ПК на Ryzen AI Max+ 395 позволяют целиком держать в видеопамяти модели, для которых 16 ГБ VRAM дискретной карты мало. После перехода с Windows на Ubuntu с включённым TTM под VRAM уходит почти вся оперативная память, и llama.cpp на ROCm или Vulkan сохраняет интерактивную скорость на Qwen3-Coder 30B и Qwen3-Coder Next 80B. На моделях, которые полностью помещаются в 16 ГБ, RTX 5060 Ti остаётся быстрее, но при выгрузке слоёв в системную память проигрывает встройке.
Дальше конкретика: зачем нужна Ubuntu, как выставить BIOS и собрать оба бэкенда, на чём спотыкаются драйверы и как читать замеры prefill и decode при разной длине контекста.
Почему Ryzen AI Max+ 395 интересен для локального инференса
Ryzen AI Max+ 395 объединяет 16 ядер и встроенную графику уровня младшей дискретной карты. Задачу локальных LLM решает не вычислительная мощность, а 128 ГБ памяти, которую CPU и GPU делят между собой: в такой объём влезают модели, для которых 16 ГБ VRAM мало. Отсюда и интерес к платформе - возможность запустить 30B и 80B в приличном кванте дома, а не в датацентре.
Ключевые характеристики и архитектура
Стенд, о котором идёт речь в опубликованном разборе, - мини-ПК GMKTec EVO X2: 16-ядерный Ryzen AI Max+ 395, 128 ГБ DDR5-8000 и встроенная графика. По отзывам владельцев, встройка здесь сопоставима с RTX 4060, что для iGPU необычно много. Процессор способен отдавать до 140 Вт, но этот показатель зависит от конкретного устройства и его охлаждения.
Память объединённая: одни и те же чипы отдают данные и процессору, и графике. Пропускная способность LPDDR5X-8000 - около 256 ГБ/с, у RTX 5060 Ti с GDDR7 - порядка 448 ГБ/с по спецификациям производителя. Для prefill (обработка промпта) это не критично, там больше решают вычислительные блоки, а decode (генерация токенов) упирается именно в чтение весов из памяти.
Отсюда простое правило оценки. Вес модели в памяти ≈ число параметров × бит на вес / 8. Квант Q4_K_M - примерно 4,5-5 бит на вес, Q8_0 - около 8,5. Модель 30B в Q4_K_M занимает порядка 17 ГБ, в Q8_0 - около 32 ГБ. Модель 80B в Q4_K_M - примерно 45 ГБ, в Q8_0 - около 85 ГБ. Сверху добавляются KV-кэш и буферы, и именно здесь 128 ГБ превращаются в реальное преимущество.
Устройства на Ryzen AI Max+ 395: GMKTec EVO X2 и альтернативы
Мини-ПК и ноутбуки на этом чипе делают GmkTec, Minisforum, Beelink, IceBook, есть и референсное устройство от самой AMD. Ноутбук Asus интересен форм-фактором, но ограничен по TDP и не выжимает полные 140 Вт, которые способен отдать процессор. Различия между устройствами сводятся к охлаждению, набору портов, BIOS и питанию: сам чип и память у всех одинаковые, а от охлаждения зависит, как долго система держит высокие частоты.
Отдельный момент - цена. За год такие устройства подорожали в 2-3 раза из-за роста цен на память и комплектующие, поэтому сравнивать APU с дискретной видеокартой по стоимости за гигабайт VRAM некорректно: здесь вы покупаете готовую систему целиком. Оба факта - список производителей и рост цен - приводятся в исходном разборе на Хабре.
Windows vs Linux: почему для локального инференса нужна Ubuntu
Разница между ОС здесь не в драйверах, а в распределении памяти. Windows требует заранее решить в BIOS, сколько памяти отдать под VRAM, и этот объём фиксируется. Linux с подсистемой TTM отдаёт графике почти всю оперативную память динамически.
Как TTM расширяет VRAM в Linux
На Windows в BIOS выбирается максимум, в этом устройстве - 96 ГБ под VRAM, а остальные 32 ГБ остаются системе. Модель, которой нужно 102 ГБ, в такой схеме просто не загрузится. MoE-модели вынуждены постоянно гонять слои между оперативной памятью и видеопамятью, и это копирование стоит времени, хотя физически данные лежат в одних и тех же чипах.
TTM (Translation Table Maps) - подсистема управления памятью GPU в ядре Linux. Схема обратная: в BIOS выставляется минимум (512 МБ или 1 ГБ) под выделенную видеопамять, дальше GPU запрашивает память из системной динамически, и под VRAM реально уходит почти всё объединённое пространство: до 128 ГБ. Выигрыш даёт не пиковая скорость памяти, а отсутствие выгрузки слоёв. Пропускная способность LPDDR5X всё равно ниже, чем у GDDR7, и об этом стоит помнить при чтении замеров. Схема с разделением 96/32 ГБ и работа TTM описаны в том же разборе.
Пошаговая инструкция: переход на Ubuntu и настройка BIOS
- Записать на флешку актуальный LTS-образ Ubuntu и установить систему. Номер версии меняется каждые полгода, поэтому ориентируйтесь на текущий релиз, а не на инструкцию годичной давности.
- В BIOS найти настройку выделенной видеопамяти (UMA Frame Buffer Size или iGPU memory) и выставить минимум: 512 МБ или 1 ГБ. Большой фиксированный объём здесь мешает, а не помогает.
- Драйвер amdgpu в современных ядрах уже встроен, отдельная установка проприетарного пакета не нужна. Проверить, что система видит графику, можно через rocm-smi, а корректность Vulkan-слоя - через vulkaninfo.
- Запустить llama.cpp и посмотреть, сколько VRAM видит сборка. Если объём близок к системной памяти, TTM работает как надо.
- Не добавлять лишние параметры ядра без необходимости. На унифицированной памяти amdgpu.gttsize конфликтует с TTM и может сломать выделение - этот конфликт разбирался на примере Radeon RX 7600 и ROCm 7, где такие параметры приходилось убирать.
Переход занял не вечер. Старые инструкции с сайта AMD перестали работать, потому что поменялись версии Linux, ядра, драйверов и llama.cpp. Часть проблем автор разбора решал по обсуждениям на Reddit, в мануалах на GitHub и в комментариях на Хабре, единого актуального руководства под эту связку железа нет.
Настройка ROCm и Vulkan для llama.cpp: пошаговый гайд
llama.cpp работает с AMD-графикой через два бэкенда. ROCm ближе к железу и обычно быстрее на prefill, Vulkan проще ставится и реже конфликтует с драйверами. Разумный порядок действий: сначала поднять Vulkan и убедиться, что система вообще считает модель, затем собрать ROCm и сравнить на своих задачах.
Установка ROCm: зависимости и подводные камни
Понадобятся ядро с поддержкой amdgpu и пакеты rocm-hip-runtime, rocm-opencl-runtime. Сборка llama.cpp с HIP выполняется через CMake:
cmake -B build -DGGML_HIPBLAS=ON -DAMDGPU_TARGETS=<архитектура вашего iGPU> cmake --build build --config Release -j
Значение AMDGPU_TARGETS зависит от поколения графики. Если указать не ту цель, сборка пройдёт успешно, но при запуске вы получите "HIP error: invalid device function": бинарник не содержит кода под вашу архитектуру. Вторая причина той же ошибки - прекомпилированные сборки, в которых целевые архитектуры встроенной и мобильной графики часто не включены. Поэтому llama.cpp приходится собирать из исходников, зато это заметно проще, чем сборка под CUDA.
Пути к библиотекам прописываются явно: export LD_LIBRARY_PATH=/opt/rocm/lib:$LD_LIBRARY_PATH. Готовая команда запуска с разбором каждого флага есть в материале про Qwen 3.6 35B A3B на Radeon RX 7600.
Сборка llama.cpp с Vulkan: альтернативный путь
Для Vulkan нужны загрузчик Vulkan и драйвер mesa-vulkan-drivers. Сборка короткая:
cmake -B build -DGGML_VULKAN=ON cmake --build build --config Release -j
Проверка окружения - vulkaninfo: в списке устройств должна появиться встроенная графика. Vulkan выигрывает предсказуемостью: один драйвер, минимум зависимостей, работает и на APU, и на дискретных Radeon. По замерам на близкой по классу встроенной графике Radeon 780M, ROCm обгонял Vulkan на prefill примерно на половину, а на генерации разница была куда скромнее - этот случай разобран в тесте Gemma 4 и Qwen 3.6 MoE на Ryzen 7 6800H, где подробно показана сборка под Vulkan на APU.
Типичные ошибки и их решение
| Ошибка | Причина | Решение |
|---|---|---|
| libamdhip64.so: cannot open shared object file | Окружение не знает, где лежат библиотеки ROCm | Добавить /opt/rocm/lib в LD_LIBRARY_PATH |
| HIP error: invalid device function | Бинарник собран не под архитектуру вашего GPU | Пересобрать с корректным AMDGPU_TARGETS |
| no compatible GPU found | У пользователя нет прав на устройство | Добавить его в группы render и video, затем перелогиниться |
| Vulkan device not found | Не установлен драйвер Vulkan | Поставить mesa-vulkan-drivers и проверить vulkaninfo |
| Модель грузится, но слои уходят в CPU | Ограничение GTT или не хватает свободной памяти | Проверить настройки TTM, убрать конфликтующие параметры ядра |
Если ошибки нет в списке, ищите по точному тексту сообщения: обсуждения по Ryzen AI Max+ 395 идут на Reddit, в issue на GitHub и в комментариях к новостям на Хабре. Готового единого мануала нет, потому что конфигурации у всех разные.
Тесты производительности: Qwen3-Coder 30B и Qwen3-Coder Next 80B
Замеры снимались на GMKTec EVO X2 с 128 ГБ объединённой памяти: llama.cpp, две модели, разные кванты и разная длина контекста. Точные значения токенов в секунду привязаны к версиям ядра, драйвера и сборки llama.cpp, поэтому переносить их один в один на другую систему не стоит. Ниже - что именно измерялось, какие ориентиры по памяти получаются и как эти цифры читать.
Методика тестирования
Модели запускались через llama.cpp на обоих бэкендах, целиком в объединённой памяти, без выгрузки слоёв на CPU. Отдельно фиксировались две величины: prefill - сколько токенов промпта движок обрабатывает за секунду, и decode - сколько токенов ответа генерируется за секунду. Длина контекста менялась, потому что KV-кэш растёт линейно и меняет и память, и скорость. Сравнение с RTX 5060 Ti 16 ГБ делалось на тех же моделях и квантах. Полный набор замеров приведён в исходном разборе.
Результаты для Qwen3-Coder 30B
Практический ориентир по памяти (оценка весов по формуле, без KV-кэша и буферов):
| Модель | Квант | Вес модели, оценка | Влезает в 128 ГБ | Влезает в 16 ГБ VRAM |
|---|---|---|---|---|
| Qwen3-Coder 30B | Q4_K_M | ~17 ГБ | да, с большим запасом | нет |
| Qwen3-Coder 30B | Q5_K_M | ~21 ГБ | да | нет |
| Qwen3-Coder 30B | Q8_0 | ~32 ГБ | да | нет |
Модель 30B укладывается в объединённую память в любом из этих квантов, поэтому prefill и decode считаются без выгрузки слоёв. При росте контекста с 4K до 32K растёт KV-кэш и объём работы на внимании: prefill падает сильнее, decode - умереннее. Разница между квантами заметна и в скорости, и в качестве кода: Q4_K_M быстрее, Q8_0 аккуратнее на сложных задачах.
Результаты для Qwen3-Coder Next 80B
| Модель | Квант | Вес модели, оценка | Влезает в 128 ГБ | Влезает в 16 ГБ VRAM |
|---|---|---|---|---|
| Qwen3-Coder Next 80B | Q4_K_M | ~45 ГБ | да, остаётся запас под длинный контекст | нет |
| Qwen3-Coder Next 80B | Q8_0 | ~85 ГБ | да, но контекст придётся ограничивать | нет |
80B в Q4_K_M занимает около 45 ГБ, в Q8_0 - около 85 ГБ. Во втором случае на KV-кэш и буферы остаётся меньше 40 ГБ, поэтому длину контекста стоит держать умеренной. Скорость decode на 80B ниже, чем на 30B: при той же пропускной способности памяти на каждый токен нужно прочитать примерно вдвое больше весов.
Влияние квантов и длины контекста
Баланс для интерактивной работы выглядит так: Q4_K_M и контекст до 16K дают лучшую скорость при приемлемом качестве кода, Q5_K_M заметно увеличивает вес модели и немного снижает скорость, Q8_0 берут тогда, когда качество важнее и запаса памяти хватает. Контекст за 32K на 80B в высоком кванте лучше не выставлять: растёт KV-кэш, растёт время prefill, а свободная память тает. На итоговую скорость влияет не только квант, но и движок: на тестах современных LLM на RTX 5090 видно, как выбор движка и квантования меняет результат сильнее, чем ожидаешь.
Сравнение с NVIDIA RTX 5060 Ti 16 ГБ: когда встройка обгоняет дискретку
Сравнение двух платформ сводится к одному вопросу: влезает ли модель целиком. Если да, выигрывает карта с более быстрой памятью. Если нет, выигрывает система, которой не нужно постоянно перекачивать слои в медленную память.
Ключевые различия в архитектуре памяти
| Параметр | Ryzen AI Max+ 395 | RTX 5060 Ti 16 ГБ |
|---|---|---|
| Память | LPDDR5X-8000, объединённая, до 128 ГБ | GDDR7, 16 ГБ |
| Пропускная способность | около 256 ГБ/с | около 448 ГБ/с по спецификациям |
| Модель без выгрузки слоёв | до 80B в квантах | примерно до 14B в Q8_0 или 30B в Q4_K_M с частичной выгрузкой |
| Поведение при нехватке памяти | ничего не выгружается, пока модель влезает в 128 ГБ | часть слоёв уходит в системную RAM, скорость падает |
Ключевой фактор для decode - чтение весов из памяти. У RTX 5060 Ti пропускная способность выше, и на моделях, которые помещаются в её 16 ГБ, она быстрее. Как только модель перестаёт влезать, начинается выгрузка слоёв через PCIe, и преимущество исчезает.
Сценарии, где выигрывает Ryzen AI Max+ 395
Модели 30B и больше в квантах Q5_K_M и Q8_0, длинный контекст, несколько моделей в памяти одновременно: основная модель плюс эмбеддер под RAG или агент с инструментами. На 16 ГБ такие сценарии упираются в выгрузку - карта держит часть слоёв у себя, остальное считает CPU, и время ответа растёт нелинейно. Ориентиры по бюджету памяти на карте с 16 ГБ и работе с KV-кэшем подробно разобраны в материале про Qwen3.8-27B на RTX 5080 16 ГБ.
Сценарии, где выигрывает RTX 5060 Ti
Модели, которые целиком помещаются в 16 ГБ: 7-14B в Q4 и Q8, плюс всё, что завязано на CUDA - специализированные библиотеки, дообучение, работа с графикой. Настройка под NVIDIA проще: один комплект драйверов и предсказуемая сборка llama.cpp с GGML_CUDA=ON, без возни с архитектурами и путями к библиотекам.
Практические выводы: кому подходит Ryzen AI Max+ 395 для локального инференса
Кому стоит рассмотреть Ryzen AI Max+ 395
- Тем, кто хочет запускать 30B и 80B локально, а не арендовать GPU в облаке.
- Разработчикам, которые тестируют агентов с RAG и инструментами: 128 ГБ позволяют держать в памяти модель и эмбеддер одновременно.
- Тем, кому важен компактный корпус: мини-ПК занимает мало места и обходится без отдельного питания для дискретной карты.
- Пользователям видеокарт AMD, которые уже привыкли собирать llama.cpp под ROCm или Vulkan: логика настройки та же, меняется только объём доступной памяти.
Ограничения и на что обратить внимание
- Linux обязателен, если вы хотите отдать под VRAM всю память. На Windows потолок фиксируется в BIOS и оказывается заметно ниже.
- Пропускная способность объединённой памяти ниже, чем у дискретных карт: на моделях до 14B APU проигрывает по скорости генерации.
- ROCm требует сборки из исходников и аккуратности с версиями драйверов, готовые инструкции быстро устаревают.
- При нехватке свободной памяти система начинает активно свопиться, поэтому длину контекста лучше ограничивать заранее.
- Не все модели одинаково хорошо работают на обоих бэкендах: на 80B разница между ROCm и Vulkan может быть меньше, чем на плотных моделях меньшего размера.
Итоговое сравнение с RTX 5060 Ti
| Задача | Что подходит лучше | Почему |
|---|---|---|
| Кодогенерация на 30B в Q4_K_M | Ryzen AI Max+ 395 | модель целиком в памяти, дискретной карте не хватает 16 ГБ |
| Работа с 80B в Q4_K_M | Ryzen AI Max+ 395 | на 16 ГБ такой квант не загрузить без выгрузки слоёв |
| Максимальная скорость на 7-14B | RTX 5060 Ti 16 ГБ | выше пропускная способность памяти и зрелее экосистема CUDA |
| Агент с моделью и эмбеддером сразу | Ryzen AI Max+ 395 | объёма хватает, чтобы держать обе модели в памяти |
| Дообучение и CUDA-инструменты | RTX 5060 Ti 16 ГБ | заточка библиотек под CUDA |
Выбор сводится к размеру модели. Нужны 30B и 80B в разумном кванте, длинный контекст и несколько моделей в памяти - берите Ryzen AI Max+ 395 и закладывайте время на настройку Ubuntu, BIOS и сборку llama.cpp под ROCm или Vulkan. Нужны максимальные токены в секунду на моделях до 14B, дообучение и CUDA-инструменты - дискретная карта остаётся практичнее.