Введение

Всем привет! Продолжаю тему предыдущей статьи. В ней сравнивалось железо для локального инференса — Nvidia DGX Spark, Mac Studio M3 Ultra и Strix Halo. И как можно было догадаться, остановился я именно на последнем.

Железо есть, зарядим теперь на нем пару-тройку локальных моделей под управлением проверенного AI-агента.

Claude Сode по подписке с оригинальными LLM - это, конечно, замечательно. Но это стоит денег, да и свой код в чужие дата-центры не всегда правильно отправлять. Плюс за всякое неосторожное движение можно попасть в бан, рискуя потерять все свои наработки.

Одно из решений: Claude Code во free mode с локальными моделями. Anthropic позволяет заменить свои модели на любые с совместимым API. И если раньше это выглядело как эксперимент (локальная модель — что с неё возьмёшь?), то сейчас, с моделями Qwen3.6 результат в целом рабочий.

В этой статье я расскажу, как всё это настроить на GMKtec EV0-X2 — от загрузки моделей до первого запроса к Claude Code.


Постановка задачи и конфигурация

Допустим, вы хотите использовать ИИ-ассистента для помощи в программировании, но по ряду причин не хотите пользоваться облачным API. Например:

  • платный API Claude Sonnet/Opus это дорого, лимиты выгорают быстро;

  • анализируете код, которым не хочется делиться;

  • или вам просто интересно (тоже повод).

Я выбрал связку: llama.cpp server + две GGUF-модели Qwen3.6-MTP + Claude Code в режиме free mode. Всё это работает на Strix Halo (Ryzen AI Max+ 395) с 128 ГБ оперативной памяти. ИИ-ассистент можно взять и другой (Opencode, Kilocode CLI и т.п.). Но мне пока больше всего нравится Claude Code. Качество harness у этого агента из коробки субъективно показалось мне выше, чем у опенсорсных альтернатив.

Железо

Напомним, что такое это самое Strix Halo. Это не конкретный компьютер, а архитектура AMD для высокопроизводительных ноутбуков и мини-ПК. Процессор Ryzen AI Max+ 395 - десктопный чиплет в форм-факторе мобильного решения.

Характеристики GMKtec EV0-X2:

Параметр

Значение

Процессор

AMD Ryzen AI Max+ 395, 16 ядер / 32 потока, TSMC 4nm, до 5.1 ГГц, 16 МБ L2, 64 МБ L3 (X3D)

Графика

AMD Radeon 8060S, RDNA 3.5, 40 вычислительных блоков

Оперативная память

LPDDR5X, 128 ГБ, 8-канальная, 8 ГГц, 217 ГБ/с

SSD

PCIe 4.0, 2 ТБ

Сеть

Wi-Fi 7, Bluetooth 5.4, 2.5 Гбит/с Ethernet

Питание

Стабильная работа при 120 Вт, пик до 140 Вт

Нейронный ускоритель

XDNA 2, до 126 TOPS

Для инференса LLM ключевой ограничитель - пропускная способность памяти. У Strix Halo 8-канальная LPDDR5X с 217 ГБ/с - это заметно больше, чем у типичных ноутбуков. А 128 ГБ можно делить между CPU и GPU. Если выделить на GPU 96 Гб (это делается через BIOS, не тратьте время на предустановенную утилиту AMD Software: Adrenalin Edition) то можно загрузить целиком в видеопамять модели размером до ~120B параметров в Q4_K_M.

К тому же это полноценная Windows 11 с обычным софтом. Ставишь на стол и работаешь. Продвинутые пользователи предпочитают накатывать на железку Linux, но инференс вполне прилично работает и из под Винды.

Софт для инференса

Собственно, вариантов под Виндой не много. Я смотрел на три основных:

Ollama - быстро и минималистично, много туториалов по работе, вот официальный сайт. Но мне не зашло. С консолью разбираться было в лом. Тем паче, что есть бесплатный LM Studio с великолепным графическим интерфейсом.

LM Studio помимо всего прочего обладает удобным GUI для скачивания и запуска моделей (повторяюсь, но он и вправду хорош). Очень удобно выбирать и скачивать GGUF-файлы прямо в графической оболочке, точно понимая - какая из компрессий сколько занимает места на диске. Рядом с перечнем моделей в соседнем окошечке - краткое описание модели и ссылка на сайт разработчика.

Рис. 1. Внешний вид окна поиска моделей в LM Studio (я фанат темных тем, но если вам нравится светлая, можете оставить её, она идет по умолчанию).
Рис. 1. Внешний вид окна поиска моделей в LM Studio (я фанат темных тем, но если вам нравится светлая, можете оставить её, она идет по умолчанию).

Также сразу видно, какие из моделей наиболее популярны, насколько они свежие, насколько нравятся пользователям (по количеству лайков). Локальные модели и их доработанные разными умельцами версии выходят довольно часто, есть из чего повыбирать. Поэтому такой интерфейс лично мной оказался весьма востребован.

LM Studio в developer mode позволяет делать множество настроек для оптимизации инференса. Это опции загрузки, типа количества токенов в контексте (для моего железа почти всегда в максимум), распределение загрузки слоев между памятью CPU и GPU (всё в GPU), различные параметры типа flash attention (всегда ON) и пр. Также можно выбирать температуру, top k, top p и прочие навороты. Здесь не будем углубляться. Наша задача запуститься, чтобы работало, остальное подкрутите по мере необходимости.

LM Studio вполне себе рабочий вариант для совместной работы с Claude Code. Он может даже выступать в качестве роутера. То есть можно загрузить сразу обе упомянутые выше модели в память одновременно, Claude code будет обращаться к нужной, а вы будете видеть результат этого обращения прямо в интерфейсе.

Рис. 2. Окно разработчика с перечнем загруженных моделей и логами.
Рис. 2. Окно разработчика с перечнем загруженных моделей и логами.

llama.cpp server — то, на чём я остановился. Пришлось таки разбираться с консолью, но оно того стоило. Помимо поддержки режима роутера и MTP технологии (собственно, аналогично с LM Studio) есть несколько приятных бонусов:

  • Скорость генерации при запуске той одной и той же модели напрямую из под llama.cpp примерно на 20...25% выше, чем при запуске из под LM Studio.

  • Поддержка режима размышления(недоступно в LM Studio из-за неполной реализации API Антропика);

  • Поддержка загрузки изображений (недоступно в LM Studio по той же причине).

Выбор моделей

В Claude Code используется система Tier-моделей: Opus (самая умная), Sonnet (сбалансированная), Haiku (быстрая и дешёвая). И тут есть возможность сопоставить каждому Tier свою локальную модель — тогда Claude Code будет автоматически выбирать нужную для задачи.

Сегодня (начало июня 2026-ого на дворе) я остановился на такой связке:

Tier Claude Code

Локальная модель

Для чего

Opus

Qwen3.6-27b-MTP

Сложные задачи: multi-file рефакторинг, архитектура, баг-фиксы

Sonnet

Qwen3.6-35B-A3B-MTP

Стандартные задачи: генерация кода, тесты, рефакторинг

Haiku

Qwen3.6-35B-A3B-MTP

Используется в основном для файлового поиска, чтобы не забивать контекст основной модели.

35B-A3B имеет Adaptive Sparsity — это модель, оптимизированная для скорости. Она быстрая (до 60 t/s при пустом контексте) и довольно умная, именно ей лучше всего подходит роль рабочей лошадки. А 27B — более «глубокая», но и при этом значительно более медленная (не более 20 t/s при пустом контексте) модель для случаев, когда нужен максимально точный ответ.

В качестве быстрой модели я также выбираю 35B-A3B из-за скорости. Если бы в семействе qwen3.6 были варианты на 4B или 2B параметров, можно было бы попробовать их, но таковых пока что нет. А qwen3.5-4B работает примерно с той же скоростью, как и qwen3.6-35B-A3B при этом значительно уступая по интеллекту (если верить бенчмаркам самой Qwen). Поэтому решено было не забивать память лишней моделью, а обойтись двумя.

MTP (Multi-Token Prediction) - расширение к обычной autoregressive генерации. В обычном режиме модель генерирует по одному токену за шаг. С MTP модель предсказывает сразу несколько следующих токенов. Это ускоряет генерацию в 1.5-2 раза. В начале мая в llama.cpp добавили поддержку MTP. А в середине мая ревизия llama.cpp с поддержкой MTP появилась и в LM Studio. Для того, чтобы получить максимальную скорость генерации лучше сразу ориентироваться на модели с поддержкой этой технологии. Можно более подробно почитать о ней здесь.

Квантизация моделей

Обе модели скачаны через LM Studio из репозитория unsloth на HuggingFace:

  • Qwen3.6-35B-A3B-UD-Q6_K_XL.gguf

  • Qwen3.6-27B-UD-Q6_K_XL.gguf

Почему именно Q6_K_XL? Тут простая математика:

Квантование

Размер 35B

Размер 27B

Суммарно

Качество

Q4_K_M

~20 ГБ

~16 ГБ

~38.5 ГБ

Ощутимая потеря качества

Q6_K_XL

~30 ГБ

~24 ГБ

~74 ГБ

Качество ≈ FP16

FP16

~70 ГБ

~54 ГБ

~132 ГБ

Не влезает в VRAM

Q6_K_XL — «золотая середина». Качество близко к FP16, а суммарно обе модели, занимая ~74 ГБ, влезают в 128 ГБ с запасом под KV-cache. Q4_K_M — быстрее, но на 27B уже заметна потеря качества в сложных задачах. FP16 — было бы совсем хорошо, но слишком жирно.

Настройка моделей будет дальше по тексту.

Скачивание и настройка llama.cpp server

Свежий релиз llama.cpp можно найти здесь. Если у вас Winows - лучше ставить "Windows x64 (Vulkan)", он работает стабильнее HIP. Если другая ОС - соответствующую сборку под свою ОС. И распаковываете в любую директорию. Например C:\Users\[user_name]\llama.cpp.

Presets-файл

llama.cpp позволяет определить несколько моделей в одном INI-файле. Каждая модель — отдельная секция с абсолютными путями:

[qwen3.6-27b-mtp]
model = C:\Users\[user_name]\.lmstudio\models\unsloth\Qwen3.6-27B-MTP-GGUF\Qwen3.6-27B-UD-Q6_K_XL.gguf
mmproj = C:\Users\[user_name]\.lmstudio\models\unsloth\Qwen3.6-27B-MTP-GGUF\mmproj-F32.gguf
n-gpu-layers = 99
n-gpu-layers-draft = 99
parallel = 1
ctx-size = 200000
cache-type-k = q8_0
cache-type-v = q8_0
flash-attn = on
load-on-startup = true

[qwen3.6-35b-a3b-mtp]
model = C:\Users\[user_name]\.lmstudio\models\unsloth\Qwen3.6-35B-A3B-MTP-GGUF\Qwen3.6-35B-A3B-UD-Q6_K_XL.gguf
mmproj = C:\Users\[user_name]\.lmstudio\models\unsloth\Qwen3.6-35B-A3B-MTP-GGUF\mmproj-F32.gguf
n-gpu-layers = 99
n-gpu-layers-draft = 99
parallel = 1
ctx-size = 200000
cache-type-k = q8_0
cache-type-v = q8_0
flash-attn = on
load-on-startup = true

Ключевые параметры:

  • model = C:\Users\[user_name]\.lmstudio\models\unsloth\...- директория, где лежат модели. Если скачивали из под LM Studio и от провайдера unsloth, то лежать должны именно там. Не забудьте поменять [user_name] на актуальное.

  • mmproj - мультимодальный проектор, нужен для того, чтобы модели понимали изображения. Лежит рядом с модлью.

  • n-gpu-layers = 99 - все слои на GPU (99 = «все доступные»). На Strix Halo GPU с 128 ГБ ОЗУ достаточно места для размещения всех моделей целиком.

  • n-gpu-layers-draft = 99 - draft-модель тоже на GPU. Критично для MTP: без этого будет простой на шине передачи.

  • parallel = 1 - один parallel stream на модель. Предотвращает конкуренцию за память между двумя моделями.

  • ctx-size = 200000 - контекст 200K токенов. Больше делать смысла нет, Claude Code будет работать только с такой длиной контекста.

  • cache-type-k = q8_0cache-type-v = q8_0 - KV-cache в q8_0 квантизации. FP16, который стоит по умолчанию, съел бы лишние ~10 ГБ.

  • flash-attn = on - flash attention для скорости.

  • load-on-startup = true - модель не выгружается из памяти после запроса. Первый запуск дольше (минут пять), но последующие запросы - мгновенно.

Команда запуска

llama-server.exe ^
    --models-preset presets_claude.ini ^
    --host 127.0.0.1 --port 1234 ^
    -ngl 99 ^
    --spec-type draft-mtp --spec-draft-n-max 3 ^
    --timeout 36000

Здесь всё предельно просто. -ngl 99 — глобальный оффлоад всех слоёв на GPU. --spec-type draft-mtp --spec-draft-n-max 3 — MTP speculation: модель предсказывает до трёх токенов за один шаг. --timeout 36000 — 10 часов бездействия, модели не выгружаются. --host 127.0.0.1 --port 1234 — такой же адрес и порт, как и у LM Studio. Сделал специально, чтобы при необходимости можно было запустить Claude Code совместно с LM Studio (на всякий случай).

Обёртка в батник

Всё это можно поместить в llama_for_claude.bat — он автоматически генерирует presets-файл при каждом запуске и стартует сервер. Не требует Python, виртуальных окружений или Docker. В файл добавлены настройки самих моделей (температура и пр. в соответствии рекомендациями Qwen).

run_llama_for_claude.bat
@echo off
setlocal enabledelayedexpansion

:: Переход в папку с llama.cpp
cd /d "C:\Users\[user_name]\llama.cpp" || ( echo Ошибка: папка не найдена & pause & exit /b 1 )

echo ============================================================
echo Starting llama-server for Claude Code
echo Port: 1234
echo Models will stay in memory
echo Request logs (generation speed) will appear below
echo ============================================================
echo.

:: Создаём временный файл пресетов с абсолютными путями к моделям
set PRESETS_FILE=presets_claude.ini
(
echo [qwen3.6-27b-mtp]
echo model = C:\Users\[user_name]\.lmstudio\models\unsloth\Qwen3.6-27B-MTP-GGUF\Qwen3.6-27B-UD-Q6_K_XL.gguf
echo mmproj = C:\Users\[user_name]\.lmstudio\models\unsloth\Qwen3.6-27B-MTP-GGUF\mmproj-F32.gguf
echo n-gpu-layers = 99
echo n-gpu-layers-draft = 99
echo parallel = 1
echo ctx-size = 200000
echo cache-type-k = q8_0
echo cache-type-v = q8_0
echo flash-attn = on
echo temp = 0.6
echo top-p = 0.95
echo top-k = 20
echo presence-penalty = 1.1
echo min-p = 0
echo load-on-startup = true
echo.
echo [qwen3.6-35b-a3b-mtp]
echo model = C:\Users\[user_name]\.lmstudio\models\unsloth\Qwen3.6-35B-A3B-MTP-GGUF\Qwen3.6-35B-A3B-UD-Q6_K_XL.gguf
echo mmproj = C:\Users\[user_name]\.lmstudio\models\unsloth\Qwen3.6-35B-A3B-MTP-GGUF\mmproj-F32.gguf
echo n-gpu-layers = 99
echo n-gpu-layers-draft = 99
echo parallel = 1
echo ctx-size = 200000
echo cache-type-k = q8_0
echo cache-type-v = q8_0
echo flash-attn = on
echo temp = 0.6
echo top-p = 0.95
echo top-k = 20
echo presence-penalty = 1.1
echo min-p = 0
echo load-on-startup = true
) > "%PRESETS_FILE%"

echo [INFO] Preset file created: %PRESETS_FILE%
echo.

:: Запуск сервера с MTP, постоянным удержанием моделей и подробными логами
llama-server.exe ^
    --models-preset "%PRESETS_FILE%" ^
    --host 127.0.0.1 --port 1234 ^
    -ngl 99 ^
    --spec-type draft-mtp --spec-draft-n-max 2 ^
	--timeout 36000

:: Если сервер завершился с ошибкой – показать сообщение
echo.
echo Сервер остановлен. Нажмите любую клавишу для выхода...
pause > nul

Запускаем bat файл, ждем с минуту загрузки обоих моделей, и всё — сервер работает. Проверить можно так: curl http://127.0.0.1:1234/v1/models — должен вернуть список всех трёх моделей.

Рис. 3. Запущенный в окне терминала llama.cpp server выводит служебные сообщения при работе Caude Code.
Рис. 3. Запущенный в окне терминала llama.cpp server выводит служебные сообщения при работе Caude Code.

Установка Claude Code

Установка под Windows и все остальные ОС описана в официальной документации Антропика.

Настройка Claude Code

Дальше вC:\Users\[user_name]\.claude\settings.json прописываем сопоставление Tier → модель, указываем адрес сервера и ещё ряд интересных параметров:

{
  "env": {
    "ANTHROPIC_BASE_URL": "http://127.0.0.1:1234",
    "ANTHROPIC_AUTH_TOKEN": "sk-any-key",
    "ANTHROPIC_API_KEY": "sk-any-key",
    "ANTHROPIC_DEFAULT_OPUS_MODEL": "qwen3.6-27b-mtp",
    "ANTHROPIC_DEFAULT_SONNET_MODEL": "qwen3.6-35b-a3b-mtp",
    "ANTHROPIC_DEFAULT_HAIKU_MODEL": "qwen3.6-35b-a3b-mtp",
    "CLAUDE_CODE_ATTRIBUTION_HEADER": "0",
    "CLAUDE_CODE_AUTO_COMPACT_WINDOW": "262144",
    "CLAUDE_AUTOCOMPACT_PCT_OVERRIDE": "95",
    "CLAUDE_CODE_DISABLE_ADAPTIVE_THINKING": "1",
    "CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC": "0",
    "CLAUDE_CODE_ENABLE_TELEMETRY": "0",
    "CLAUDE_CODE_MAX_OUTPUT_TOKENS": "32768",
    "CLAUDE_STREAM_IDLE_TIMEOUT_MS": "36000000",
    "CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS": "1"
  }
}

Вот что они означают:

Переменная

Значение

Зачем

ANTHROPIC_BASE_URL

http://127.0.0.1:1234

Указывает на наш llama-server. С такой настройкой можно будет запускать claude code как с llama.cpp, так и с LM Studio.

ANTHROPIC_AUTH_TOKEN

sk-any-key

Любое непустое значение, если не поставить, Claude Code будет требовать аутентификации.

ANTHROPIC_API_KEY

sk-any-key

Любое непустое значение

ANTHROPIC_DEFAULT_OPUS_MODEL

qwen3.6-27b-mtp

Сложные задачи → умная модель

ANTHROPIC_DEFAULT_SONNET_MODEL

qwen3.6-35b-a3b-mtp

Стандартные задачи → основная модель

ANTHROPIC_DEFAULT_HAIKU_MODEL

qwen3.6-35b-a3b-mtp

Тривиальные → быстрая модель (в нашем случае та же основная)

CLAUDE_CODE_MAX_OUTPUT_TOKENS

32768

Максимум токенов в ответе модели.

CLAUDE_CODE_AUTO_COMPACT_WINDOW

262144

262K контекста - пробовал увеличить контекст до поддерживаемого моделями, но это не сработало.

CLAUDE_AUTOCOMPACT_PCT_OVERRIDE

95

Компрессия только когда контекст заполнен на 95%. Вроде бы оно тоже не особо работает (

CLAUDE_STREAM_IDLE_TIMEOUT_MS

36000000

10 часов ожидания генерации (на всякий случай).

CLAUDE_CODE_DISABLE_ADAPTIVE_THINKING

0

Включить мышление, в llama.cpp оно работает!

CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC

1

Полный оффлайн, без сетевых запросов

CLAUDE_CODE_ENABLE_TELEMETRY

0

Без телеметрии

CLAUDE_CODE_ATTRIBUTION_HEADER

0

Без колонтитулов с указанием ИИ. Если не указать - Claude Code будет жутко тормозить.

Запуск Claude Code

Сначала запускаете llama.cpp server с помощью bat файла, приведенного выше.

Потом открываете терминал в любой своей рабочей директории и вбиваете claude. В терминале запустится ваш полностью локальный Claude Code с моделями Qwen на борту.

Рис. 4. Локальный Claude Code.
Рис. 4. Локальный Claude Code.

Бенчмарки

Тестировал на GMKtec EV0-X2 (Ryzen AI Max+ 395, 128 ГБ RAM). llama.cpp server, GPU offload, MTP speculation включён.

Скорость загрузки промпта и генерации (токенов/сек):

Модель

Квантование

Input, t/s

Output, t/s

Qwen3.6-35B-A3B-MTP

Q6_K_XL

~750-300

~55-35

Qwen3.6-27B-MTP

Q6_K_XL

~175-100

~15-10

Приведен диапазон значений. Максимальные значения наблюдаются сразу после запуска Clude Code (сразу после начала диалога, контекст что-то около 16...20 килотокенов). Далее по мере заполнения контекста значения будут проседать. Для получения максимальной точности лучше не переваливать за 100...120 тыс. токенов, чтобы экономить контекст используйте субагентов (они запускаются со своим контекстным окном).

Заключение

Вот собственно и всё. Запускаете, работаете в Claude Code с локальными моделями, жжёте токены как не в себя и в ус не дуете. Модели, конечно, поглупее по сравнению с оригинальными Антропиковскими, но зато абсолютно бесплатно!

Only registered users can participate in poll. Log in, please.
Используете ли вы Claude Code?
50%Да, с оригинальной подпиской16
6.25%Да, с локальными моделями2
43.75%Нет14
32 users voted. 4 users abstained.