Мотивация

Когда начали появляться слухи о ноутбуке с более чем 100 ГБ ОЗУ, доступного для GPU, первое желание было исследовать, что можно построить на такой машине. Особенно привлекала перспектива работать с open-weight моделями локально — экспериментировать с reinforcement learning, квантизацией и fine-tuning. Разработчик уже публикует собственные GGUF квантизации на Hugging Face с более чем 160 000 загрузок в месяц.

Однако оказалось, что официальная поддержка — только для Windows. A Windows есть немало причин избегать: принудительные требования к Microsoft-аккаунту при установке, многолетнее ожидание возможности положить панель задач на боковую сторону, отвратительная реклама прямо в ОС и многое другое.

Выбор был очевиден: Arch Linux. Разработчик уже входит в команду Arch как мейнтейнер пакетов и даже ставил его на IBM mainframes (слайды с FOSDEM). Начинать здесь было решено с Arch Linux ARM — отдельного проекта, портирующего Arch-пакеты на ARM, с добавленной поддержкой железа.

Установка и кастомизация

NVIDIA проводила работу над ядром для Ubuntu, что дало хорошую отправную точку. Эту работу использовали, исправили override для ACPI и маппинг framebuffer для консоли, а затем нашли необходимые ACPI overrides прямо из таблиц самого ноутбука. Драйвер NVIDIA и микрокод динамика ASUS пришли из официальных источников в интернете. Поддержка клавиатуры потребовала патча для hid-asus, а звук — собственного машинного драйвера.

Всё это было собрано в загрузочный USB и дополнено расширением upstream Archinstall 4.5 для установки поддержки железа. Репозиторий содержит скрипты сборки и патчи, включая шаги для выгрузки собственных таблиц ACPI и извлечения микрокода динамика из пакета драйвера ASUS локально.

Входные данные для сборки привязаны по хешу. Пакеты с поддержкой железа подписаны ключом Arch Linux Package Maintainer, а ACPI overrides берутся непосредственно с ноутбука.

Дисплей работает на 3840 × 2400 при 120 Гц, система использует NetworkManager, PipeWire и rootless Podman с NVIDIA CDI. Установщик фиксирует ядро, NVIDIA, пакеты управления питанием и прошивки через IgnorePkg, а остальные пакеты обновляются из Arch Linux ARM.

Производительность CPU

Тесты запускались 19 октября на нативной Arch Linux ARM с ядром 7.0.0-1022-nvidia и драйвером NVIDIA 615.78.08. Ноутбук был подключен к электросети с выбранным режимом производительности. Для сравнения CPU использовались опубликованные результаты Windows.

Тест CPU — нативный ARM64 7-Zip 26.04 с фиксированным 32 МБ словарём. Один проход для разогрева и три измеренных прохода на каждое количество потоков, затем взяты медианы:

Потоки Сжатие (МБ/с) Распаковка (МБ/с)
1 6,18 118,26
20 141,77 1 629,60

StorageReview тестировал HP OmniBook Ultra 16 (128 ГБ) с тем же 20-ядерным N1X на нативных Windows ARM64 бинариках. Они приводят рейтинги 7-Zip в GIPS, поэтому показатели MIPS из логов разделены на 1 000 для сопоставимости. Больше — лучше.

Тест 7-Zip ProArt, Linux (GIPS) HP OmniBook, Windows (GIPS) Разница
Сжатие одного потока 7,221 7,31 −1,2%
Распаковка одного потока 10,779 10,87 −0,8%
Сжатие 20 потоков 165,754 157,9 +5,0%
Распаковка 20 потоков 148,471 144,5 +2,7%

Одиночный поток — практически ничья. Со всеми 20 потоками Linux-конфигурация примерно на 5% впереди в сжатии и на 3% в распаковке. В обзоре HP не указана версия 7-Zip и размер словаря, поэтому эти проценты сравнивают две конфигурации ноутбуков.

ComputerBase тоже тестировал ProArt P16 с 20-ядерным N1X. Перёведя в GIPS, её результат Windows 7-Zip составил 155,774; медиана из трёх прогонов составила 157,084 GIPS. Результат ComputerBase попал в диапазон трёх прогонов от 155,759 до 157,193 GIPS. Тестируемая машина была конфигурацией 64 ГБ с 7-Zip 26.00, размер словаря в таблице не указан.

Разделение памяти

С памятью результаты более впечатляющие. Linux-конфигурация сообщает 116,0 ГБ одновременно как системное ОЗУ и как общую память CUDA из одного физического пула. Windows делит ОЗУ на выделенную для GPU, общую и только для CPU. Рабочие нагрузки CPU не могут использовать выделенную GPU, а выделение памяти GPU не может использовать только CPU-область.

Приложение NVIDIA на Windows позволяет менять выделенный объём и перезагружаться; ProArt P16 на 128 ГБ Frandroid достигал 96 ГБ. CUDA может превышать это за счёт выделения из общей памяти, в рамках бюджета памяти Windows.

При выделении 91 ГБ для GPU, Windows-конфигурация Frandroid сообщала о 109,7 ГБ общей памяти CUDA, включая общую. Linux-конфигурация сообщила 116,0 ГБ — примерно на 6,3 ГБ больше. Главное преимущество — иметь больший пул доступным для работы CPU без необходимости двигать ползунок резервирования и перезагружаться между рабочими нагрузками.

Локальный запуск Qwen

Запущен контрольный пункт Qwen3.8-Flash-Next-FP4-Local от NVIDIA через vLLM с B12X CUDA kernels в нативном ARM64 контейнере, с использованием смешанной квантизации и FP8 KV кэша. Для этого прогона режим "думанья" отключен.

До загрузки модели Linux сообщил 110,9 ГБ свободной ОЗУ. vLLM записал 68,2 ГБ для загрузки модели и выделил ещё 21,1 ГБ для KV кэша. Это почти 90 ГБ, выделённых модели и KV кэшу прямо на ноутбуке.

Загрузка и компиляция модели заняли примерно 16 минут перед первым запросом. Тайминги ниже начинаются после разогрева. Таблицы встраивания PLE поддерживаются диском и выигрывают от тёплого кэша страниц; остальные компоненты используют CPU offload. CUDA обрабатывает вывод, часть модели находится вне памяти GPU.

Дали Qwen два глючащих Python-помощника на проверку, длинный журнал инцидента с одной неудачной операцией для поиска и платёжную записку для преобразования в JSON. Каждая задача запускалась три раза после разогрева с известными ответами для проверки. Нужно было узнать, сколько ждать и вернёт ли он правильные поля.

Задача Входные токены Первый токен, медиана (с) Полный ответ, медиана (с) Проверки пройдены
Проверка Python кода 208 0,316 4,008 3/3
Поиск сбоя в журнале инцидентов из 128 записей 9 775 4,532 5,768 3/3
Извлечение информации из платёжной записки 87 0,256 2,035 3/3

Задача с логом прочитала почти 10 000 токенов и вернула правильный запрос, причину и следующее действие менее чем за 6 сек. Ответ содержал всего 39 токенов, что составило 6,8 токена/сек для всего запроса. Большинство времени ушло на обработку подсказки, поэтому для этой задачи время ответа показывает больше, чем показатель токена/сек.

Для проверки кода скорость генерации оценивалась как (выходные токены − 1) / (время ответа − время до первого токена), обе времени в секундах. Сюда входит overhead потока. Frandroid запускал задачи кодирования Qwen3.8-Flash-Next на своём Windows ProArt:

Система Квантизация и runtime Генерация (токен/с)
ProArt P16 разработчика, Linux FP4-Local, vLLM B12X 30,9 (медиана из 3)
ProArt P16 Frandroid, Windows UD-IQ4_XS, llama.cpp 29,4 и 31,4

Обе конфигурации ProArt работают около 30 токенов/сек. Для вывода Frandroid использовал выделение 85 ГБ для GPU и лимит контекста 262 144 токена; лимит контекста в Linux-конфигурации был 32 768 токенов. Подсказки, квантизации, runtime'ы и методы замера различаются. Это сравнивает две рабочие конфигурации; не изолирует влияние ОС.

Также запущены четыре проверки кода одновременно. Медиана пакета завершилась за 5,314 сек, произведя 86,6 выходных токенов/сек для всех четырёх запросов вместе. Этот показатель включает обработку подсказки и overhead ответа. Все 12 ответов прошли проверку за три пакета.

Затем система крутилась в цикле через три задачи, один запрос за раз, в течение десяти минут. Завершила 150 запросов, 50 каждого типа, и каждый ответ прошёл проверки. Средние времена ответа составили 4,036 сек для проверки кода, 5,921 сек для логов и 2,046 сек для извлечения. При сравнении первых десяти и последних десяти повторений каждой задачи средние времена ответов выросли менее чем на 1,6%.

Все 171 измеренные ответы прошли проверки. Это три подсказки, повторённые с детерминированным декодированием; проверка при проверке кода верифицирует выходы регрессии. Сохранил каждый ответ и сырой поток событий, проверил их против сводок.