Запустил 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 и встроенная графика".
Ограничения эксперимента
Чтобы не переинтерпретировать результаты:
Это один ноутбук, а не серия устройств.
Каждый сценарий прогонялся как практический пользовательский тест без десятков повторов и статистического усреднения.
Замеры ресурсов брались из Windows Task Manager, а не из специализированного benchmark инструмента.
temperature, top_k, top_p, max_tokens отдельно не фиксировались.
Context Length выставленный лимит, а не фактически заполненный контекст.
Тест не сравнивает разные модели и форматы квантизации.
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 оставил бы для отдельных сценариев и только с закрытыми тяжёлыми приложениями.
Практические выводы
Локальная 20B-модель на ноутбуке без дискретной видеокарты рабочий сценарий, а не только ради демонстрации.
32 GB RAM достаточно для запуска, но запас быстро заканчивается, особенно при Context Length 65536.
Скорость около 9 tok/sec пригодна для неспешной работы: написать скрипт, разобрать код, составить текст, проверить требования.
Встроенная GPU участвует в работе, но shared memory делает RAM главным ресурсом.
Увеличение Context Length не гарантирует улучшение качества.
Фактологию, код и самоаудит нужно проверять вручную.
Итоговый вывод
Эксперимент показал что локальный запуск 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% |