Запустил openai/gpt-oss-20b в варианте MXFP4 GGUF на обычном ноутбуке без дискретной видеокарты: CPU, встроенная Radeon 780M и общая оперативная память.

Тест проводился на ASUS Vivobook S 16 M3607HA. Точную модель указываю не ради привязки статьи к конкретному ноутбуку, а для воспроизводимости, здесь важны 32 GB DDR5 5600, Ryzen 7 260, встроенная Radeon 780M и shared memory.

Главный вопрос был практический: можно ли реально пользоваться локальной 20B-моделью на ноутбуке с 32 GB RAM, если отдельной видеокарты нет?

Сразу оговорюсь это не научный benchmark, а пользовательский case study на конкретном железе с конкретной версией LM Studio, реальными prompt сценариями и замерами через LM Studio и Windows Task Manager.

Коротко

  • Модель запускается и отвечает при Context Length 16384, 32768 и 65536.

  • Скорость генерации в моих сценариях примерно 8,05-10,63 tok/sec.

  • Средняя скорость по сериям около 9 tok/sec.

  • Главный ограничитель RAM, а не CPU или встроенная GPU.

  • Пик памяти 27,6 GB при 16384, 28,7 GB при 32768 и 30,0 GB при 65536 из доступных 31,3 GB.

  • Диск во время генерации почти не нагружался: 0-1%.

  • NPU в тестах не использовался.

  • Модель хорошо справилась с практической задачей на Python скрипт, но иногда ошибалась в объяснениях и самоаудите.

  • Больший лимит контекста сам по себе не сделал ответы лучше.

Вывод: на ноутбуке с 32 GB RAM запускать такую модель можно, но комфортнее начинать с 16384 или 32768. Context Length 65536 работает, но запас по памяти становится слишком маленьким для обычной повседневной работы.

Для кого этот материал

Статья может быть полезна тем кто хочет понять есть ли смысл пробовать локальные LLM на ноутбуке без дискретной видеокарты. Особенно если конфигурация похожа: современный мобильный Ryzen, встроенная графика уровня Radeon 780M / 760M / 890M, 32 GB RAM, Windows и запуск через LM Studio.

Не утверждаю, что на любом похожем ноутбуке будут такие же цифры. У ноутбуков отличаются лимиты питания, охлаждение, BIOS, тип памяти и фоновые процессы. Поэтому этот материал лучше воспринимать как практическую точку отсчёта.

Почему указываю точную модель ноутбука

Тест проводился на ASUS Vivobook S 16 M3607HA.

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

Правильнее читать эту статью так:

это практический тест локальной 20B модели на ноутбуке без дискретной видеокарты, на примере ASUS Vivobook S 16 M3607HA.

Железо

Компонент

Значение

Ноутбук

ASUS Vivobook S 16 M3607HA

CPU

AMD Ryzen 7 260, 8 ядер / 16 потоков

GPU

AMD Radeon 780M Graphics, встроенная графика, shared memory

RAM

32 GB DDR5 5600

Доступная память Windows

31,3 GB

SSD

NVMe 512 GB

OS

Windows 11

Режим питания Windows

Оптимальная производительность

Питание

от сети

Radeon 780M это не дискретная видеокарта с собственной VRAM. Она использует shared memory, то есть общую оперативную память системы. Поэтому RAM в этом тесте важна одновременно для Windows, модели и встроенной графики.

До запуска тестов система выглядела так:

Метрика

Значение до тестов

CPU

18%

RAM

5,7 / 31,3 GB, 18%

Disk

7%

GPU

7%, 47°C

NPU

0%

Модель и запуск

Использовалась модель:

openai/gpt-oss-20b MXFP4 GGUF

Среда запуска:

LM Studio 0.4.16-1 x64

Общие настройки LM Studio для всех тестов:

Параметр

Значение

GPU Offload

20

CPU Threads

8

Evaluation Batch Size

512

Physical Batch Size

512

Max Concurrent Predictions

1

Unified KV Cache

включён

Offload KV Cache to GPU Memory

выключен

Keep Model in Memory

выключен

Менялся только Context Length:

Тест

Context Length

1

16384

2

32768

3

65536

В интерфейсе LM Studio было указано, что модель поддерживает до 131072 tokens, но в тестах выставлял только три значения: 16384, 32768 и 65536.

Важно Context Length это лимит контекста в LM Studio, а не фактическое количество токенов в каждом prompt. В этом эксперименте фактически использовалась только часть выставленного окна. Подробные цифры есть ниже в таблицах.

Ещё одна оговорка GPU Offload это не процент. Не называю его «20% offload» потому что это конкретный параметр LM Studio выставленный вручную.

Параметры temperature, top_k, top_p, max_tokens отдельно не фиксировались, поэтому не делаю по ним выводов.

Методика

Для каждого значения Context Length использовал три одинаковых сценария.

Prompt 1 проверял базовую скорость и фактологию: модель должна была составить таблицу исходных данных, перечислить метрики, объяснить смысл разных размеров контекста и воспроизвести контрольные маркеры:

MARKER_ALPHA: ASUS-780M-LOCAL
MARKER_BETA: MXFP4-20B-LMSTUDIO
MARKER_GAMMA: DDR5-5600-32GB

Prompt 2 был главным практическим тестом: написать Python скрипт для обработки большого лог файла на несколько гигабайт. Проверялись потоковое чтение, argparse, --encoding, --top, --json, обработка ошибок, подсчёт строк, ERROR, WARNING, HTTP status codes и IP адресов. Отдельное требование не использовать pandas и не загружать файл целиком в память.

Prompt 3 проверял удержание контекста и самоаудит: модель должна была вспомнить маркеры, характеристики ноутбука и LLM, требования из Prompt 2, а затем проверить своё предыдущее решение.

Что измерялось

Из LM Studio брал:

  • tok/sec;

  • количество сгенерированных токенов;

  • latency / время до первого токена по интерфейсу;

  • Current conversation tokens;

  • Total loaded context;

  • процент использованного контекста;

  • stop reason.

Из Windows Task Manager:

  • RAM;

  • CPU;

  • GPU;

  • Disk;

  • NPU;

  • температуру GPU.

Это не лабораторная телеметрия, но для пользовательского теста она показывает главное "сколько памяти занято, есть ли явный упор в диск, насколько загружены CPU и встроенная графика".

Ограничения эксперимента

Чтобы не переинтерпретировать результаты:

  1. Это один ноутбук, а не серия устройств.

  2. Каждый сценарий прогонялся как практический пользовательский тест без десятков повторов и статистического усреднения.

  3. Замеры ресурсов брались из Windows Task Manager, а не из специализированного benchmark инструмента.

  4. temperature, top_k, top_p, max_tokens отдельно не фиксировались.

  5. Context Length выставленный лимит, а не фактически заполненный контекст.

  6. Тест не сравнивает разные модели и форматы квантизации.

  7. Task Manager показывает состояние в конкретные моменты времени, а не полный лог всех пиков.

Поэтому это case study, а не универсальный benchmark.

Результаты: скорость

Context Length

Prompt

Назначение

tok/sec

Generated tokens

Latency / TTFT по интерфейсу

Thought time

Conversation tokens

Использовано контекста

16384

Prompt 1

базовая скорость + фактология

9,98

1532

1,80 s

1 мин 10 с

1951 / 16384

11,9%

16384

Prompt 2

reasoning + код

9,32

2076

1,33 s

52,08 s

3584 / 16384

21,9%

16384

Prompt 3

удержание контекста

8,66

744

5,44 s

24,23 s

4626 / 16384

28,2%

32768

Prompt 1

базовая скорость + фактология

10,04

1656

1,90 s

1 мин 7 с

2075 / 32768

6,3%

32768

Prompt 2

reasoning + код

9,17

2486

1,46 s

32,83 s

4135 / 32768

12,6%

32768

Prompt 3

удержание контекста

8,05

1518

7,81 s

1 мин 2 с

5951 / 32768

18,2%

65536

Prompt 1

базовая скорость + фактология

10,63

868

1,95 s

13,24 s

1287 / 65536

2,0%

65536

Prompt 2

reasoning + код

9,49

1844

1,20 s

15,61 s

3252 / 65536

5,0%

65536

Prompt 3

удержание контекста

8,54

1260

2,71 s

44,19 s

4809 / 65536

7,3%

Средние значения:

Context Length

Средняя скорость по 3 prompt

16384

~ 9,32 tok/sec

32768

~ 9,09 tok/sec

65536

~ 9,55 tok/sec

На первый взгляд 65536 выглядит даже быстрее, но я бы не делал такой вывод. В этом прогоне ответы были короче, фактически использованный контекст был меньше, а разница между 9,09 и 9,55 tok/sec для такого теста не доказывает преимущество одного режима.

Корректная интерпретация: в моих сценариях увеличение выставленного Context Length с 16384 до 32768 и 65536 не привело к заметному падению скорости генерации.

Результаты: ресурсы

Context Length

Prompt

CPU

RAM

Disk

GPU

NPU

Комментарий

До тестов

-

18%

5,7 / 31,3 GB, 18%

7%

7%, 47°C

0%

Базовое состояние системы

16384

Prompt 1

50%

27,5 / 31,3 GB, 88%

1%

72%, 72°C

0%

Резкий рост RAM после загрузки модели

16384

Prompt 2

49%

27,5 / 31,3 GB, 88%

1%

69%, 74°C

0%

Главный coding-тест

16384

Prompt 3

48%

27,6 / 31,3 GB, 88%

0%

65%, 76°C

0%

RAM почти без изменений

32768

Prompt 1

47%

28,7 / 31,3 GB, 92%

0%

73%, 75°C

0%

RAM уже почти у потолка

32768

Prompt 2

48%

28,5 / 31,3 GB, 91%

0%

71%, 76°C

0%

Ресурсы стабильны

32768

Prompt 3

47%

28,5 / 31,3 GB, 91%

1%

63%, 74°C

0%

Проверка удержания контекста

65536

Prompt 1

48%

30,0 / 31,3 GB, 96%

1%

73%, 77°C

0%

Самый тяжёлый момент по RAM

65536

Prompt 2

46%

29,9 / 31,3 GB, 96%

0%

71%, 76°C

0%

Главный coding-тест

65536

Prompt 3

48%

28,4 / 31,3 GB, 91%

1%

67%, 78°C

0%

RAM снизилась, GPU прогрелась до 78°C

Главная таблица по памяти:

Context Length

Примерный пик RAM

Свободная память на пике

Практическая оценка

16384

27,6 GB

3,6-3,8 GB

Работает, но памяти занято много

32768

28,7 GB

2,6-2,8 GB

Работает, запас маленький

65536

30,0 GB

1,2-1,4 GB

Почти предел для 32 GB RAM

CPU во всех тестах держался примерно в диапазоне 46-50%. Встроенная Radeon 780M была загружена примерно на 63-73%, температура около 72-78°C. Диск во время генерации почти не использовался, обычно 0-1%. NPU оставался на 0%.

Самый важный вывод по ресурсам с ростом выставленного Context Length растёт потребление RAM, а скорость в этих сценариях почти не меняется.

Результаты по каждому Context Length

Context Length 16384

16384 оказался самым спокойным режимом из трёх.

Prompt

tok/sec

Generated tokens

Использовано контекста

Prompt 1

9,98

1532

11,9%

Prompt 2

9,32

2076

21,9%

Prompt 3

8,66

744

28,2%

Средняя скорость около 9,32 tok/sec. RAM держалась на уровне 27,5-27,6 GB из 31,3 GB.

По качеству Prompt 2 с Python скриптом был выполнен хорошо, но в Prompt 1 модель не вывела полные значения контрольных маркеров, а в Prompt 3 не восстановила все исходные характеристики. Ещё один показательный момент, в объяснении к коду появилась противоречивая формулировка, хотя сам код читал файл построчно.

Вывод по 16384: хорошая стартовая настройка для регулярной локальной работы на 32 GB RAM. Памяти занято много, но остаётся несколько гигабайт запаса.

Context Length 32768

32768 дал лучший баланс в этом эксперименте.

Prompt

tok/sec

Generated tokens

Использовано контекста

Prompt 1

10,04

1656

6,3%

Prompt 2

9,17

2486

12,6%

Prompt 3

8,05

1518

18,2%

Средняя скорость около 9,09 tok/sec. RAM выросла до 28,5-28,7 GB из 31,3 GB.

Качество удержания контекста здесь было лучше, модель вспомнила полные маркеры, технические данные и провела более аккуратный самоаудит. Python скрипт тоже получился наиболее качественным из трёх вариантов.

Минус: в Prompt 1 модель добавила неподтверждённое утверждение, что GPT-OSS-20B имеет ограничение примерно в 32k токенов. Это не следовало из условий теста и конфликтовало с интерфейсом LM Studio где было указано до 131072 tokens.

Вывод по 32768: лучший компромисс в этих прогонах, но свободной памяти остаётся уже меньше 3 GB.

Context Length 65536

65536 запустился и отвечал, но по памяти это уже почти потолок для ноутбука с 32 GB RAM.

Prompt

tok/sec

Generated tokens

Использовано контекста

Prompt 1

10,63

868

2,0%

Prompt 2

9,49

1844

5,0%

Prompt 3

8,54

1260

7,3%

Средняя скорость около 9,55 tok/sec. Пик RAM доходил до 30,0 GB из 31,3 GB то есть свободной памяти оставалось примерно 1,2-1,4 GB.

Качество не стало лучше от большего лимита. Prompt 1 был корректным, но скрипт из Prompt 2 получился более грубым чем при 32768 HTTP коды искались как любые трёхзначные числа, IP адреса определялись через split(), а обработка пустого файла была мягче чем хотелось бы. В Prompt 3 модель вспомнила маркеры, но не восстановила отдельным пунктом характеристики ноутбука и LLM, а в самоаудите указала несуществующий недочёт.

Вывод по 65536: для эксперимента интересно, для повседневной работы на 32 GB RAM спорно. Модель запускается, но запас RAM минимальный.

Сравнение качества ответов

Context Length

Prompt 1

Prompt 2

Prompt 3

Общая оценка

16384

В целом корректно, но маркеры выведены без значений, появились лишние примеры контекста

Хороший рабочий скрипт, но в объяснении была противоречивая формулировка

Самоаудит есть, но контекст удержан частично

Работоспособно, но не идеально по строгой фактологии

32768

Хорошая таблица и маркеры, но была галлюцинация про ограничение ~32k токенов

Самый аккуратный вариант скрипта

Лучшее удержание контекста из трёх прогонов

Лучший баланс качества и скорости, но RAM почти у предела

65536

Исходные данные и маркеры корректны

Рабочий, но более грубый скрипт

Контекст удержан частично, самоаудит местами ошибочный

Запускается, но качество не стало лучше от большего лимита

Главный вывод по качеству: больший Context Length сам по себе не гарантирует лучший ответ. В этом эксперименте наиболее сбалансированным оказался 32768, но это не универсальное правило, результат зависит не только от лимита контекста, но и от конкретной генерации.

Что получилось с Python задачей

Главный практический тест Prompt 2. Во всех трёх режимах модель соблюдала базовые требования: файл читался построчно, pandas не использовался, были аргументы командной строки, JSON вывод, обработка основных ошибок и подсчёт нужных сущностей.

Разница была в аккуратности реализации. Лучшим выглядел вариант при 32768: там были регулярные выражения для уровней, статусов и IP адресов, отдельная функция форматирования результата и более развёрнутый самоаудит.

Вариант при 65536 был проще: HTTP коды и IP адреса искались более грубо. Он годится как черновик для простых логов, но я бы не стал брать его в продакшн без доработки.

Что важно не переинтерпретировать

1. Это не доказательство, что 65k контекста комфортно работает на 32 GB RAM

Фактическое использование контекста к концу Prompt 3 было таким:

Context Length

Фактически использовано к концу Prompt 3

16384

4626 токенов, 28,2%

32768

5951 токен, 18,2%

65536

4809 токенов, 7,3%

Даже в режиме 65536 я не загружал модель реальными 65k токенов. Я проверял запуск, память, скорость и качество при выставленном лимите.

2. Низкий Disk usage не означает, что своп невозможен

У меня во время генерации Disk был около 0-1%, поэтому явного постоянного упора в SSD не видно. Но при Context Length 65536 свободной памяти оставалось около 1,2-1,4 GB. Если параллельно открыть браузер, IDE, Docker или другую тяжёлую программу, ситуация может измениться.

3. Локальная модель может писать нормальный код, но всё равно ошибаться

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

Границы применимости

На такой конфигурации модель выглядит полезной для задач вроде:

  • написать небольшой скрипт или CLI утилиту на Python, Go, Java, C# и других языках;

  • объяснить код;

  • составить таблицу;

  • проверить требования;

  • сделать черновик документации;

  • помочь с локальным анализом текста;

  • работать без отправки данных в облако.

Зоны риска:

  • длинные диалоги с реально большим контекстом;

  • работа параллельно с тяжёлыми приложениями;

  • задачи где критична точная фактология;

  • задачи где нельзя допустить незаметную ошибку в коде;

  • самоаудит без внешней проверки.

Какой Context Length я бы выбрал

Context Length

Моя оценка

16384

Самый спокойный режим. Хорошо для регулярной локальной работы, оставляет больше запаса RAM.

32768

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

65536

Запускается и работает, но на 32 GB RAM это почти предельный режим. Подходит скорее для эксперимента чем для повседневной работы.

Для себя я бы начал с 16384, а если действительно нужен более длинный диалог пробовал бы 32768. 65536 оставил бы для отдельных сценариев и только с закрытыми тяжёлыми приложениями.

Практические выводы

  1. Локальная 20B-модель на ноутбуке без дискретной видеокарты рабочий сценарий, а не только ради демонстрации.

  2. 32 GB RAM достаточно для запуска, но запас быстро заканчивается, особенно при Context Length 65536.

  3. Скорость около 9 tok/sec пригодна для неспешной работы: написать скрипт, разобрать код, составить текст, проверить требования.

  4. Встроенная GPU участвует в работе, но shared memory делает RAM главным ресурсом.

  5. Увеличение Context Length не гарантирует улучшение качества.

  6. Фактологию, код и самоаудит нужно проверять вручную.

Итоговый вывод

Эксперимент показал что локальный запуск openai/gpt-oss-20b MXFP4 GGUF на ноутбуке без дискретной видеокарты возможен.

На ASUS Vivobook S 16 M3607HA с Ryzen 7 260, встроенной Radeon 780M и 32 GB DDR5 5600 модель выдавала около 9 токенов в секунду в моих тестовых сценариях. Для локальной 20B модели на встроенной графике это уже практичный уровень для неспешной работы с кодом и текстом.

Главный лимит RAM. При Context Length 65536 система доходила до 30,0 GB из 31,3 GB, поэтому я бы не считал этот режим комфортной настройкой по умолчанию на ноутбуке с 32 GB RAM.

Финальная формулировка: да, локальная 20B-модель на ноутбуке без дискретной видеокарты рабочий сценарий. Но с оговорками: следить за RAM, не путать лимит контекста с фактическим использованием и обязательно проверять ответы модели.

Короткая сводка цифр

Показатель

16384

32768

65536

Средняя скорость

~ 9,32 tok/sec

~ 9,09 tok/sec

~ 9,55 tok/sec

Пик RAM

27,6 GB

28,7 GB

30,0 GB

Минимальный запас RAM

3,6-3,8 GB

2,6-2,8 GB

1,2-1,4 GB

GPU

65-72%

63-73%

67-73%

Температура GPU

72-76°C

74-76°C

76-78°C

CPU

48-50%

47-48%

46-48%

Disk

0-1%

0-1%

0-1%

NPU

0%

0%

0%

Фактический контекст к концу Prompt 3

4626 токенов

5951 токен

4809 токенов

Доля использованного контекста

28,2%

18,2%

7,3%

Комментарии (0)