惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

P
Proofpoint News Feed
A
About on SuperTechFans
The GitHub Blog
The GitHub Blog
大猫的无限游戏
大猫的无限游戏
C
Cisco Blogs
Blog — PlanetScale
Blog — PlanetScale
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
雷峰网
雷峰网
爱范儿
爱范儿
A
Arctic Wolf
腾讯CDC
S
Security @ Cisco Blogs
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
H
Hacker News: Front Page
T
Tor Project blog
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
V2EX - 技术
V2EX - 技术
Microsoft Azure Blog
Microsoft Azure Blog
P
Privacy International News Feed
美团技术团队
D
Darknet – Hacking Tools, Hacker News & Cyber Security
Hugging Face - Blog
Hugging Face - Blog
博客园 - 司徒正美
Cyberwarzone
Cyberwarzone
L
LINUX DO - 最新话题
Apple Machine Learning Research
Apple Machine Learning Research
Google Online Security Blog
Google Online Security Blog
罗磊的独立博客
S
Schneier on Security
Google DeepMind News
Google DeepMind News
IT之家
IT之家
N
News and Events Feed by Topic
P
Palo Alto Networks Blog
S
Securelist
SecWiki News
SecWiki News
T
The Exploit Database - CXSecurity.com
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
博客园 - 聂微东
F
Fortinet All Blogs
H
Help Net Security
博客园_首页
Recorded Future
Recorded Future
Help Net Security
Help Net Security
J
Java Code Geeks
月光博客
月光博客
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Recent Commits to openclaw:main
Recent Commits to openclaw:main
Application and Cybersecurity Blog
Application and Cybersecurity Blog
Hacker News: Ask HN
Hacker News: Ask HN
B
Blog RSS Feed

Все публикации подряд на Хабре

Ловим музу за клавиатуру: как айтишнику стать автором Что умеет Midjourney в 2026? Мой немного грустный разбор этого шикарного инструмента Никто не любит писать тесты, но ИИ может исправить это IPv8 выглядит как мечта. Поэтому почти наверняка не взлетит Производители вернули в продажу материнки с DDR3. Что происходит? Управление агентом с телефона через Telegram теперь в KodaCode От координации к лидерству: как меняется роль руководителя разработки Я сделала родителям бизнес вместо пенсии: зарабатываем 70 тысяч, мама не даёт продать В три раза быстрее приемка товара и оптимизация трудозатрат на 73%: как «РСТ-Инвент» помог Gulliver Group ИИ-шечный мир победил? О влиянии искусственного интеллекта на игропром Кремль снижает давление на Телеграмм пока Европа строит интернет по паспорту Как CEO, CTO и CIO за 8 часов собрали ИИ-директора, который умеет держать позицию под давлением Как (не) потерять домен за выходные Вместо 8 разных VPS: как я организовал практику студентам на одном сервере Почему твой Open Source проект не замечают? R&D: искусство управления неопределенностью в разработке AI-дефляция: вакансий для разработчиков больше, а рост зарплат — худший за 15 лет Мы отдали управление роботами OpenClaw. Что из этого вышло Галактический ID: система идентификации для всех форм разумной жизни Шесть основ бизнес-анализа: начинаем с вопроса «Кто в игре?» Код-ревью, в котором дело не в коде Данные переехали. Команда — нет Системной подход к сдаче OSWE в 2025 Почему комната управления реактором покрашена в цвет морской пены 4 YAML-файла вместо PySpark: как аналитикам строить пайплайны без разработчиков LLM-агент для поиска свободных доменов: автоматизируем подбор Когда, зачем и как правильно начинать новую сессию в Claude Code? Как я заставил нейросеть писать макросы для FreeCAD Анатомия ИИ‑агента для подбора персонала. От тысячи резюме к топ‑10 за минуты Опыт разработчика как экономика внимания Автономность как точка невозврата: кто будет субъектом в цифровом будущем Обучение ИИ в «диких» условиях: как рутинные действия превращаются в датасеты Как измерить LLM для задач кибербеза: обзор открытых бенчмарков Где хранить код? Сравнение GitHub, GitLab и Bitbucket Математика объясняет, почему нормальное распределение встречается повсюду Почему ваш FinOps не работает: 12 тезисов от практиков Как подписать проектную документацию УКЭП с использованием бесплатных лицензий Pilot Адаптивное администрирование Sigla Vision Я грузил уран в бочки, а потом 20 лет строил ИТ в атомной отрасли Чем позвонить с Эвереста? История и обзор спутниковой связи. Часть 2 Как языковая модель помогает контролировать качество инструктажей по охране труда в металлургии Как не передать на desktop свой IP в РКН Анатомия SAP Privileges: как устроено управление правами в macOS MoneyDev: Сказка про три главных слова Обновлённый токенизатор видео K-VAE 2.0 от Сбера Как сделать диспетчеризацию дома на 1284 квартиры почти бесплатно Как мы разогнали железную дорогу Мы дали агентам рутину. Теперь надо решить — что делать с освободившимся временем Токсичный контент, промпт-хакинг и защита ИИ — всё о Guardrails для LLM Умный город начинается с точного взгляда: как «Фалькон Тех» меняет пространство к лучшему Навайбкодил приложение для анализа графов Почему Дюну так интересно читать? Упрощаем работу с рутиной или как стать Гендальфом Белым Деконструкция Go: CPU, RAM и что там происходит. Go Assembler база. Часть 1.1 Какие профессии исчезнут из-за ИИ, а какие появятся? И что с этим делать Как мы построили IT-отдел, где хочется расти: архитектурные встречи, прозрачные метрики и книжные подарки Rufler: Делаем из Claude Code автономный рой через один YAML-конфиг Sing-box и белый список приложений Как построить надёжный обмен сообщениями в микросервисах: лучшие практики для enterprise OpenAI строит MLM-пирамиду, а McKinsey и Accenture помогают ей в этом Дом, который не построил Фишер (Часть 2) «Сверхзвуковой математик» против «Вдумчивого логиста»: битва алгоритмов 3D-упаковки Мультимодальные модели – грубый и дорогой инструмент Разговоры ничего не стоят. Код тоже Проверки физических лиц: с кого начнет ФНС Топ-10 бесплатных нейросетей для создания видео в 2026 году Первые слои кода: как наши решения сегодня определяют архитектуру ИИ на десятилетия Разработка нового статического анализатора: PVS-Studio JavaScript Поиск уязвимостей ПО: базовый минимум или роскошный максимум Почему оценка персонала не работает как инструмент управления Как мы разработали ИИ-ассистента и сократили рутину продуктовой команды на 50% Как я ушел из найма, нажарил косточек и продал на маркетплейсах на 168 млн в год Когда 1С:ERP уже внедрена, а нормального производственного плана всё ещё нет Как я сделал Claude мультимодальным, подключив к нему Qwen Omni Как приглашение на вакансию мечты превращается в атаку Infrastructure as Code: философия и лучшие практики IaC Тестируем Yandex Code Assistant на задаче, в которой нужно хранить секреты nxs-universal-chart v3.0: новое поколение универсального Helm-чарта Callback Injection: Техника, которая отправила Microsoft Defender в глухой нокаут «Все идеи на стол»: митап как способ вывести проект из тупика Сегодня я узнал нечто новое о GPU благодаря багу в своей игре Как заставить LLM ̶ ̶г̶а̶л̶л̶ю̶ ̶ эволюционировать Карта событий как фундамент аналитики: практический кейс для E-commerce Что выбрать для AI: x86, ARM или RISC-V? Дайджест железа за март Роль соматических мутаций в развитии аутоиммунных заболеваний: путь к избирательной терапии Mythos от Anthropic — тревожный сигнал для всех, а не только для банков Guardrails для LLM на Java: как приручить промпт‑инъекции и токсичные ответы Green-VLA: как мы собрали VLA-модель для реального антропоморфного робота и не потеряли обобщение Финансовая гонка вооружений: почему умные люди добровольно в ней участвуют Эра ИИ-агентов наступила: выбираем лучшего цифрового сотрудника # Практический опыт внедрения WinCC Redundancy на производственном предприятии Сделал MVP за 3 дня, а потом неделю прикручивал оплату. Оно того стоило? Физика против Маска: почему Starship V3 может оказаться ещё одной катастрофой Нефть Венесуэлы: крупнейшие запасы в мире, но не крупнейшая нефтяная держава JPA 4. Переосмысление Hibernate Почему зеркальная фотокамера Nikon D5 десятилетней давности идеально подошла для миссии «Артемида-2» Проект «Уровень-Спутник» или как мы сделали платформу для гидрологов «Замедлиться, чтобы ускориться»: почему ИИ повышает цену ошибок в требованиях и архитектуре Как с нуля поднять трафик IT-компании на 1657% при бюджете 55 тыс. и выжить Pixel-perfect Downsampling — идеальная отрисовка 50 миллионов точек без потерь
Vibecode по дешевке — домашний сервер с Qwen Code за 25к, который не отключит Anthropic
Mark · 2026-06-18 · via Все публикации подряд на Хабре

Средний

20 мин

12


«У нас было две планки оперативной памяти, одна серверная Tesla V100, прочная открытая рама вместо корпуса, 5 райзеров, коробка, наполовину набитая переходниками питания, и целое море разноцветных SATA‑кабелей, стяжек и термопрокладок, а так же тюбик термопасты, моток шлангов для водянки, ящик вентиляторов, пинта изопропила и 12 саморезов неизвестного происхождения. Не то, чтобы всё это было категорически необходимо для сборки, но если уж начал собирать коллекцию, то к делу надо подходить серьёзно.»

— по мотивам Хантера С. Томпсона, «Страх и Ненависть в Лас‑Вегасе»


Я — начинающий инженер. Инженер‑разработчик. Учусь на программиста, обучаю нейросетки считать вес огурцов компьютерным зрением (подработка), хочу сделать робо‑собаку. Код пишу, как без этого? Рядом со мной всегда были старшие разработчики, и, глядя на них, я хотел создавать крутые решения — правильные эффективные решения уровня матерого сеньора — суровые как хижина в тайге и эффективные как электромотор на максималках. Проектировать, планировать, кодить, ревьювить, еще раз кодить, выхватывать озарения и переделывать куски кода потому что «смари, есть решение красивее» — все то, что приходит с опытом — огромным опытом и годами в профессии.

А потом пришел Клод. Мне предложили сделать «небольшой» пет‑проект. Голосовой агент с RAG и достаточно нетривиальной логикой. И, чтобы я в нем не утонул, снабдили базовой учеткой Клода. Не enterprise‑level, а базовой — чтобы не было соблазна свалить все на агента. Пробуй, мол, расскажешь что как. И… я почувствовал себя первым после Бога. Я! Могу! Проектировать комплексные системы, получать работающий код на незнакомых языках, использовать малознакомые технологии, творить дизайн, покрывать все тестами за чашкой кофе. Но эйфория прошла быстро, когда я уткнулся в лимиты. Ты почти гуру, ты почти всемогущ, но через полчаса у тебя кончаются токены и могучие руки превращаются в лапки. Вставать в пять утра чтобы более эффективно использовать токены? Боль. Но я инженер или кто? В интернете пишут, что LLM для кодинга можно развернуть локально. Пробуем!

Небольшой спойлер: в итоге получился сервер с 32 ГБ VRAM, вращающий Qwen3.6–35B со скоростью от 30 до 85 токенов в секунду — смотря какая сборка модели и сколько карт в деле. С бюджетом в 35 тысяч рублей + старый системник.

А ещё, пока я писал эту статью, Anthropic взял и заблокировал Fable 5 — для всех разом. Просто отключил модель целиком. Остальные пока доступны, но прецедент уже есть: сегодня ты строишь на чём‑то рабочий процесс, а завтра кто‑то наверху принимает решение — и ты остаёшься ни с чем. А вот сервер под кроватью никто не отключит. Он мой, он рядом, он работает по моим правилам. Это, по сути, и есть главная причина, по которой стоит читать дальше.


Железо

Слева — мой PC, пересобранный из корпуса в открытую раму (ещё без V100); справа — он же, подключенный к сети там, где теперь будет стоять

Слева — мой PC, пересобранный из корпуса в открытую раму (ещё без V100); справа — он же, подключенный к сети там, где теперь будет стоять

Начну с базы. Я взял свой PC, снял с него корпус и собрал на открытой раме. Так проще ставить и вынимать карты, и так лучше с воздухом — а мне ещё и нравится этот технический, «потроха наружу» вид: видно всё железо, провода, трубки. Ubuntu Server, SSH. У сервера есть белый IP и выход в интернет — так что подключиться к нему можно откуда угодно, не только из дома (хотя к теме статьи это уже мало относится). Сам он просто молчит в углу и думает.

Главный экспонат — Tesla V100-SXM2-16GB. Серверная карта 2017 года. В своё время стоила несколько тысяч долларов: её покупали дата‑центры, гоняли серьёзные вычисления, потом списали. Теперь она живёт у студента рядом с кроватью. На Авито сейчас — 10–12 тысяч рублей.

И пусть пик её актуальности давно прошёл, а у меня и вовсе БУ‑экземпляр — списывать V100 со счетов рано. Некоторые биг‑тех компании до сих пор держат эти карты в своих дата‑центрах под небольшие AI‑задачи. Правда, в основном это версии на 32 ГБ — старшие братья моей шестнадцатигиговой.

Сборка с установленной V100 и водяным охлаждением

Сборка с установленной V100 и водяным охлаждением

Один нюанс: V100 в форм‑факторе SXM2. Это серверный разъём, в обычный PCIe‑слот не идёт — нужен переходник, около 7 тысяч рублей. Ещё карта рассчитана на серверный обдув и в закрытом корпусе перегреется. Значит — водянка.

Мне повезло: к карте прилагалась металлическая пластина для охлаждения чипа. Такую я больше нигде в объявлениях не встречал. Подключается к обычному контуру СВО — шланги, помпа, радиатор, ничего специфически серверного. Установка заняла меньше часа. Сама пластина обошлась примерно в 3 тысячи, водяной контур — ещё около 3 тысяч.

Водоблок крепится к пластине на V100

Водоблок крепится к пластине на V100

Результат с запасом: под нагрузкой 42–48°C, пик 52°C при лимите карты 83°C. Тридцать один градус запаса — карта о температуре вообще не думает. По факту водянка оказалась даже избыточной: такого контура с запасом хватит и на две карты одновременно — он потянет их вообще не напрягаясь. Так что когда дойдёт до второй V100, охлаждение переделывать не придётся.

Альтернативная пластина с тонким встроенным водоблоком: слева — вид сверху, справа — вид изнутри (фото из интернета)

Альтернативная пластина с тонким встроенным водоблоком: слева — вид сверху, справа — вид изнутри (фото из интернета)

Кстати про охлаждение — момент на будущее. Сама пластина тонкая, а вот водоблок из комплектной водянки толстый и торчит вверх. Пока V100 одна — это вообще не важно. Но если захочешь поставить вторую V100 рядом, в соседний слот, с таким же стандартным водоблоком она просто не влезет по высоте — блок упрётся. Решение — тонкий водоблок с интегрированной пластиной (фото выше): с ним две карты встают вплотную без проблем. Именно такой я и возьму, когда буду докупать вторую V100.

Итого на V100-сетап: ~25 000 рублей. Карта + переходник + охлаждение. Корпус, материнка, процессор, память сюда не входят — это мой обычный десктоп, который я переоборудовал. К тому моменту я полностью перешёл на Mac, и PC был нужен уже не как компьютер, а исключительно как интерфейс к GPU. В итоге стал сервером.

Момент важный: у кого есть относительно современный PC — можно повторить, не покупая ничего кроме V100 и переходника. И да, у меня в итоге набежало больше — я докупал карты, об этом ниже. Но эти 25 тысяч — нижняя планка входа: минимум, за который ты получаешь рабочий сервер с серьёзной моделью. Дальше уже по желанию и кошельку.

Куда расти: вторая V100 vs «солянка»

Дальше захотелось запускать модели потяжелее, а взять под них VRAM было неоткуда, кроме как добавить ещё карт. И вот тут меня ждало открытие: llama.cpp распределяет модель сразу по нескольким GPU, и они не обязаны быть одинаковыми. V100, старая игровая, майнинговая — всё складывается в один общий пул памяти, любая карта с поддержкой CUDA добавляет свой VRAM в котёл. То есть путей оказалось два.

Путь, по которому пошёл я — добрать что было под рукой:

  • CMP 90HX — 10 ГБ VRAM, 7 000 рублей. Бывшая майнинговая, отдавали по дешёвке

  • GTX 1060 6 ГБ — уже была, просто добавилась в пул

Финальная сборка: 90HX не влезла в раму, так что просто положил сверху и подключил её райзером

Финальная сборка: 90HX не влезла в раму, так что просто положил сверху и подключил её райзером

Итого 32 ГБ VRAM на трёх разных картах. Звучит красиво, но есть подвох. Похожую по размеру модель я пробовал на GTX 1060 в одиночку — 2–6 токенов в секунду даже при полной загрузке. V100 на том же тесте выдаёт 82–88. Дело не в памяти — дело в мощности: у V100 быстрая HBM2-память и много тензорных ядер под матричные операции, у 1060 этого нет. CMP 90HX, как выяснилось, тоже медленная. «Солянка» работает только потому, что основную часть весов тащит V100, а остальные карты просто хранят память и тормозят общий темп.

Путь, который правильнее системно — вторая V100. Я этого ещё не сделал, но посчитал:

  • Просто вторая V100 (+ переходник, + охлаждение) — ещё ~25 000 рублей. 32 ГБ VRAM на двух одинаковых быстрых картах вместо разношёрстной троицы. Это уже в разы быстрее, чем мой нынешний сетап: обе карты тянут вычисления на полную, а не одна за всех. Узкое место остаётся одно — карты общаются между собой через PCIe, и на этом обмене теряется часть скорости

  • Апгрейд до двух V100 через NVLink — около ~45 000 рублей сверху к тому, что есть (вторая V100, её переходник, охлаждение и сам мост). Дороже обычной второй карты, потому что нужен отдельный NVLink‑мост: специальная плата‑перемычка, которая соединяет карты напрямую в обход PCIe. Именно она убирает то самое узкое горлышко — по мосту карты гоняют данные между собой на порядок быстрее, чем через материнку, и пара работает практически как одна карта вдвое мощнее. Для инференса это уже совсем другой уровень

Если бы собирал заново — брал бы сразу две V100, в идеале на NVLink. CMP 90HX в этой логике — тупиковая ветка: дёшево, но медленно и без масштабирования.

Для понимания цен: RTX 4090 с 24 ГБ новая стоит 150–180 тысяч. Суть не в том, что V100 быстрее — суть в том, что за 25 тысяч рублей вообще можно что‑то запустить.

Как это выглядит в работе

Обращаюсь к серверу через Qwen Code CLI. Скриншоты ниже — просто пример интерфейса: по сути он один в один как у claude‑code. Те же диалог, чтение файлов, запрос разрешений, правки по строкам, команды управления сессией. Если работал с claude‑code — привыкать не придётся вообще, всё знакомо и удобно.

Самое начало диалога — приветствие и первый запрос

Самое начало диалога — приветствие и первый запрос

Агент читает файлы проекта и рассуждает, что делать дальше

Агент читает файлы проекта и рассуждает, что делать дальше

Запрос разрешений: прежде чем что-то менять, спрашивает подтверждение

Запрос разрешений: прежде чем что‑то менять, спрашивает подтверждение

Правка кода по строкам — видно, что именно меняется

Правка кода по строкам — видно, что именно меняется

Вызов команд для управления сессией

Вызов команд для управления сессией


Что запущено

На сервере три конфигурации одного семейства — Qwen3.6–35B MoE. Mixture of Experts: 35 миллиардов параметров суммарно, но на каждый токен активируется только около трёх. Остальные спят. Именно поэтому такая скромная модель влезает в не самое большое железо — и при этом работает.

Тестировал три варианта. Начну с базового.

Конфигурация 1: IQ3_XS — один V100, 13.5 ГБ

CUDA_VISIBLE_DEVICES=0 llama-server \  -hf mradermacher/Qwen3.6-35B-A3B-Claude-4.7-Opus-Reasoning-Distilled-i1-GGUF:IQ3_XS \  --host 0.0.0.0 -ngl 99 -c 100000 \  -ctk q4_0 -ctv q4_0 --flash-attn on

IQ3_XS — примерно 3 бита на параметр. 13.5 ГБ помещаются в V100 целиком, без сплита. Это reasoning‑версия: перед ответом думает в отдельном поле reasoning_content. Можно буквально наблюдать за процессом.

Главное преимущество: модель целиком в одной карте. Нет PCIe‑передач между GPU, нет накладных расходов на координацию. Это важно — и объясняет числа в таблице ниже.

Конфигурация 2: Q5_K — три GPU, 25 ГБ

Та самая «солянка» из трёх карт.

CUDA_VISIBLE_DEVICES=1,0,2 llama-server \  -hf huihui-ai/Huihui-Qwen3.6-35B-A3B-Claude-4.7-Opus-abliterated-MTP-GGUF:Q5_K \  --host 0.0.0.0 --main-gpu 0 --fit on --no-mmap \  -c 90000 -ctk q4_0 -ctv q4_0 -fa on -ub 512 -b 512

Q5_K — около 5 бит на параметр, качество квантизации выше. 25 ГБ не влезает в одну карту, модель размазывается по трём. CUDA_VISIBLE_DEVICES=1,0,2 нужен, чтобы llama.cpp видел V100 как главный GPU — у него больше VRAM.

Конфигурация 3: APEX MTP Balanced — три GPU, спекулятивное декодирование

CUDA_VISIBLE_DEVICES=1,0,2 llama-server \  -m /opt/dmakeev/models/Qwen3.6-35B-A3B-Claude-4.7-Opus-Reasoning-Distilled-APEX-MTP-I-Balanced.gguf \  --host 0.0.0.0 --main-gpu 0 --fit on --no-mmap \  -c 110000 -fa on -ub 512 -b 512 \  --spec-type draft-mtp --spec-draft-n-max 3

Экспериментальный пресет: 26 ГБ, смешанная квантизация под сплит на разные карты, reasoning, и главное — --spec-type draft-mtp. Спекулятивное декодирование через MTP‑головы: модель на каждом шаге пытается угадать сразу 3 следующих токена. Угадала — быстрее. Кеш здесь дефолтный (f16), без принудительного снижения.


Результаты

Один V100: IQ3_XS

Тест

Токенов

Время

Скорость

Финиш

Холодный старт

120

17 с

7 т/с

stop

Тёплый (что такое MoE)

120

1.4 с

85 т/с

stop

Python FastAPI сервис

450

5.3 с

85 т/с

stop

Сервис + JWT‑авторизация

900

10.8 с

83 т/с

stop

Анализ уязвимостей

1800

22 с

82 т/с

stop

3 параллельных запроса

~47 т/с каждый

Холодный старт — 7 т/с. Первый запрос после долгого простоя: CUDA инициализирует ядра. В реальном использовании это не заметно — модель живёт тёплой постоянно.

Температура: простой 37–38°C, нагрузка 42–48°C, пик 52°C. Предел карты 83°C. Водянка справляется с большим профицитом.

Три GPU: Q5_K

Тест

Токенов

Время

Скорость

Финиш

Что такое MoE

201

4.2 с

47.8 т/с

stop

aiohttp сервер

779

15.2 с

51.2 т/с

stop

Задача на вероятность

600

11.9 с

50.5 т/с

length*

Пиролиз пластика

1000

19.4 с

51.6 т/с

length*

Caddy reverse proxy

1200

23.3 с

51.4 т/с

length*

3 параллельных

400×3

14.8 с

27.0 т/с каждый

length — ограничение max_tokens в тесте, не модели

50–52 т/с стабильно на любом типе задачи. Загрузка карт при этом:

Карта

Avg загрузка

Пик T

Пик мощности

GTX 1060

33–39%

56°C

94 Вт / 130 Вт

Tesla V100

22–25%

42°C

104 Вт / 300 Вт

CMP 90HX

30–39%

47°C

87 Вт / 250 Вт

Вывод nvidia-smi: модель распределена по трём картам

Вывод nvidia‑smi: модель распределена по трём картам

V100 загружена меньше всех по проценту — хотя держит ~15 ГБ весов. MoE активирует небольшую долю параметров на каждый шаг, в этом и фокус.

Три GPU: APEX MTP Balanced

Тут важная тонкость с тем, как API считает скорость.

completion_tokens в ответе — только видимые токены. Reasoning‑модель перед ответом думает в поле reasoning_content — и эти токены в счётчик не попадают. Поэтому API говорит 15–17 т/с, хотя на самом деле модель работает быстрее. Замерял через стриминг — все токены подряд, включая thinking:

Тест

Всего токенов

Thinking / Content

Реальная скорость

Объяснить MoE

400

269 / 129

28.4 т/с

Функция бинарного поиска

529

32 / 495

35.3 т/с

Доказательство √2 иррац.

795

793 / 0

30.7 т/с

Для кода (бинарный поиск) — почти не думала: 32 токена рассуждений, 495 контента, 35.3 т/с реальных. Для математики — 793 токена thinking и ноль в content: max_tokens кончился на рассуждениях, до ответа не дошло.

VRAM после загрузки:  GTX 1060:   4 449 / 6 144 МиБ  V100:      15 111 / 16 384 МиБ  CMP 90HX:   8 507 / 10 240 МиБ

Сравнение трёх конфигураций

IQ3_XS

Q5_K

APEX Balanced

Размер файла

13.5 ГБ

25.3 ГБ

26 ГБ

Квантизация

~3 бит

~5 бит

смешанная

GPU

V100 × 1

V100+90HX+1060

V100+90HX+1060

Скорость (одиночный)

82–88 т/с

47–52 т/с

28–35 т/с реальных

Скорость (3 параллельных)

~47 т/с

~27 т/с

Reasoning

Да

Нет

Да

Кеш KV

q4_0

q4_0

f16

Контекст

100 000

90 000

110 000

Спекулятивный декодинг

Нет

Нет

MTP, 3 черновика

Вывод из таблицы простой. IQ3_XS быстрее всех — несмотря на наименьшую битность, потому что целиком влезает в одну карту: ноль PCIe‑передач между GPU. Q5_K и APEX берут качеством и reasoning, но платят за это сплитом — 51 и ~30 т/с против 85. APEX вдобавок тратит часть токенов на «думанье», так что max_tokens ему нужен с запасом.

Мораль: помещается в один GPU — держи в одном GPU. Сплит — это компромисс ради VRAM, а не способ ускориться.


Примеры того, что модель умеет

Код — aiohttp сервер (Q5_K)

Запрос: написать асинхронный сервер с /health и /echo, логированием

import asyncio
import logging
import time
from aiohttp import web
logging.basicConfig(level=logging.INFO,                    format="%(asctime)s %(levelname)s %(message)s")
logger = logging.getLogger(__name__)
async def health(request: web.Request) -> web.Response:    return web.json_response({"status": "ok"})
async def echo(request: web.Request) -> web.Response:    body = await request.read()    logger.info("POST /echo body_size=%d", len(body))    return web.Response(body=body, content_type=request.content_type)
@web.middleware
async def log_middleware(request, handler):    t0 = time.monotonic()    response = await handler(request)    ms = (time.monotonic() - t0) * 1000    logger.info("%s %s -> %d (%.1fms)",                request.method, request.path, response.status, ms)    return response
app = web.Application(middlewares=[log_middleware])
app.router.add_get("/health", health)
app.router.add_post("/echo", echo)
if __name__ == "__main__":    web.run_app(app, host="0.0.0.0", port=8000)

Рабочий. С первого раза. Финиш stop — ответ завершён полностью, модель не обрезана.

Ревью кода — поиск уязвимостей (APEX)

Сгенерировать код — это полдела. Интереснее, понимает ли модель чужой код. Я скормил ей намеренно дырявый фрагмент Flask‑приложения — нашпигованный не учебными «SQL‑инъекциями», а подлыми, неочевидными уязвимостями — и попросил провести security‑ревью уровня пентестера:

import os, re, time, yaml, hmac, hashlib, random, subprocess
from urllib.request import urlopen
from flask import Flask, request, redirect, render_template_string
from Crypto.Cipher import AES
app = Flask(__name__)
KEY = b"0123456789abcdef"
IV  = b"\x00" * 16
def verify_sig(payload: bytes, sig: str) -> bool:    expected = hmac.new(KEY, payload, hashlib.sha256).hexdigest()    try:        if expected == sig:            return True    except Exception:        return True    return False
def encrypt(data: bytes) -> bytes:    cipher = AES.new(KEY, AES.MODE_CBC, IV)    pad = 16 - len(data) % 16    return cipher.encrypt(data + bytes([pad]) * pad)
@app.route("/render")
def render():    tpl = "<h1>Hello, " + request.args.get("name", "guest") + "!</h1>"    return render_template_string(tpl)
@app.route("/fetch")
def fetch():    url = request.args.get("url", "")    if "internal.corp" in url:        return urlopen(url).read()    return "forbidden", 403
@app.route("/reset")
def reset():    random.seed(int(time.time()))    token = "".join(random.choice("0123456789") for _ in range(6))    return {"reset_token": token}
@app.route("/config", methods=["POST"])
def config():    return str(yaml.load(request.data))
@app.route("/thumb")
def thumb():    f = request.args.get("f")    subprocess.run("convert " + f + " -resize 100x100 /tmp/thumb.png", shell=True)    return "ok"
@app.route("/go")
def go():    return redirect(request.args.get("to"))

Модель выдала 10 пунктов. Привожу ключевые (формулировки её):

  • Fail‑open HMAC — except Exception: return True: при любой ошибке в проверке подпись считается валидной. Защита, которая «пропускает» вместо «запрещает».

  • Padding Oracle — AES‑CBC без аутентификации (нет MAC/GCM): по ответам сервера о валидности padding восстанавливается plaintext. Это она добавила сама, сверх «очевидного» нулевого IV.

  • YAML RCE — yaml.load() без Loader: payload вида !!python/object/new:... выполняет код на сервере.

  • RCE через shell=True — имя файла клеится в команду строкой: ; или && запускают произвольные команды.

  • SSRF в обход фильтра — "internal.corp" in url это поиск подстроки, а не разбор URL; обходится поддоменом вроде internal.corp.evil.com.

  • Предсказуемый токен сброса — random.seed(int(time.time())): зная время запроса, токен из 6 цифр перебирается за секунды.

Плюс timing‑атака на сравнение ==, open redirect и XSS через javascript:‑редирект.

Самое сильное здесь — fail‑open HMAC и padding oracle: это не «грепнуть по списку плохих функций», а понимание того, как именно ломается логика. Padding oracle она вообще нашла сверх заложенного.

Но честно, без прикрас: один критичный баг модель упустила — SSTI в /render, где пользовательский ввод склеивается прямо в шаблон Jinja2 ({{7*7}} → выполнение кода). Так что это сильный помощник по код‑ревью, но не замена живому security‑инженеру. Что, в общем, и есть мысль всей статьи.

Ещё штрих про железо. Этот разбор я гонял на «умной» сборке — APEX на трёх картах. На чистой V100 с IQ3_XS (той, что выдаёт 85 т/с) по интеллекту выходит не сильно хуже — находит примерно также. Разница в стабильности: облегчённая модель быстрее начинает галлюцинировать или срываться в бесконечный цикл — один из моих прогонов так и завис, штампуя один и тот же пункт сотню раз подряд. Поэтому она ещё требовательнее к промпту и к чистоте контекста: формулировать чётко и почаще чистить историю диалога, чтобы не накапливался мусор, который сбивает модель.


Модель — это не только про код

Qwen — это вообще‑то модель широкого профиля; просто конкретно наша сборка дообучена под код. Но общая база знаний от этого никуда не делась, и она широкая. Проверял на задачах вне кода.

Отдельно отмечу: модель одинаково свободно говорит и на русском, и на английском — все примеры ниже на русском, но переключение между языками даётся ей без труда. Другие языки я не проверял.

Пластик в бензин

Запрос: постапокалипсис. Объясни как обычному человеку — что собирать, что не трогать, как собрать установку из бочки и труб, что получится

Что собирать — по конкретным предметам: — Канистры из‑под бензина и масла — лучший вариант, дают много жидкого топлива — Водопроводные и канализационные трубы (пластиковые, обычно чёрные или серые) — отлично горят — Крышки от бутылок, ящики для яиц, вёдра, тазики — годятся

Что не трогать — и почему: — Серо‑голубые жёсткие трубы (ПВХ) — при нагреве выделяют хлороводород. Это кислотный газ: разъедает металл реактора и убивает лёгкие. Если бросите в реактор — поймёте сразу по резкому запаху, но лучше не проверять — Прозрачные пластиковые бутылки из‑под воды — дают мало топлива, не стоят усилий

Установка: Металлическая бочка 50–200 л с герметичной крышкой — реактор. Из крышки выведите стальную или медную трубу — паровод. Трубу пропустите через ёмкость с холодной водой — конденсатор. Пары охладятся и стекут в сборник. Газ, который не сконденсировался, пустите обратно под реактор — будет топить сам себя.

Температура: 350–450°C — жидкое топливо. Выше 500°C — больше газа, меньше жидкости.

Что получится: тёмная жидкость, близкая по составу к дизелю. В генератор или мотор идёт напрямую, но чем чище пластик — тем чище топливо.

Объясняет через конкретные предметы, не через химические формулы. Именно это нужно, когда справочника под рукой нет.

Выживание без электричества

Запрос: конкретные инструкции: буржуйка из бочки, масляная лампа, фильтр для воды, что брать в заброшенном доме в первую очередь

Буржуйка из бочки: 200-литровая стальная бочка — желательно из‑под ГСМ, но тщательно выжечь остатки. Снизу, на высоте 10–15 см от дна — вырезать зольник (~15×20 см). Выше, на 30–40 см — дверца топки ~20×25 см, петли из вырезанного куска. Решётка из арматуры или проволоки на высоте 5–7 см от дна. Дымоход: отверстие Ø100–150 мм в верхней части бочки, труба уходит через крышу. Герметизация: глина с соломой 1:1 до состояния пластилина — или асбестовый шнур из старых плит если найдёте.

Масляная лампа: Стеклянная банка 0.5–1 л. Лучшее масло — машинное отработанное или животный жир (топлёный свиной/говяжий горит чисто и долго). Подсолнечное горит, но чадит. Фитиль — хлопковый жгут из старой футболки, плотный, не пушащийся. Пропитать маслом 30 минут перед первым использованием. Торчит над маслом 1–2 см. Если чадит — укоротить.

Фильтр для воды (из 2-литровой бутылки): Срезать дно, перевернуть. Слои снизу вверх: хлопок/вата → уголь древесный 5–7 см (не пепел!) → речной песок 5–7 см → мелкий гравий 5 см → ткань. После фильтрации — кипятить 5–10 минут обязательно.

Что брать в заброшенном доме в первую очередь: Кухня: посуда для кипячения, спички/зажигалки, консервы, масло, соль. Ванная: пластиковые ёмкости, мыло, лекарства. Гараж: инструменты, проволока, арматура — для буржуйки и ремонта. Чердак/подвал: уголь если есть, старые вещи на утепление.

1443 токена, ответ завершён. Конкретные размеры, порядок слоёв, материалы.

Квазары

Запрос: расскажи про квазары — что это, почему важно и почему интересно. Объясни как обычному молодому человеку, без научного занудства

Квазар — это сверхмассивная чёрная дыра в центре далёкой галактики, которая активно «наедается». Когда материя падает в неё, она не просто исчезает — разгоняется, нагревается до миллионов градусов и выстреливает колоссальное количество энергии в космос.

Один квазар может светить ярче, чем целая галактика из сотен миллиардов звёзд. Это как если бы Солнце вдруг начало светить ярче, чем весь Млечный Путь. И всё это — от одной чёрной дыры.

Квазары — это «маяки» ранней Вселенной. Их свет шёл до нас миллиарды лет, и по нему мы понимаем, как выглядел космос, когда ему было всего пара миллиардов лет. Один из самых далёких — мы видим его таким, каким он был, когда Вселенной было всего 690 миллионов лет. То есть смотришь на него — и видишь объект, который существовал до появления Солнца.

Мы живём в эпоху, когда квазаров почти не осталось. Они были активны в молодости Вселенной. Мы видим их свет, но сами они уже погасли.

Квазары — это как космические прожекторы, которые подсвечивают нам историю Вселенной.

951 токен, завершён, 26.1 т/с.

Звёзды: сколько им жить

Маленькие звёзды живут триллионы лет — дольше, чем существует Вселенная. Средние, как наше Солнце, — 10–12 миллиардов лет. Нашему примерно 4.6 миллиарда, мы где‑то в середине. Через 5–6 миллиардов лет Солнце начнёт раздуваться. Через 7–8 миллиардов станет красным гигантом и поглотит внутреннюю часть Солнечной системы. Потом сбросит оболочки и превратится в белый карлик — тусклый, медленно остывающий остаток.

Массивные звёзды живут несколько миллионов лет, но умирают эффектно: взрыв сверхновой, а ядро превращается в нейтронную звезду или чёрную дыру.

Так что да — Солнце умрёт. Но к тому моменту жизнь на Земле будет давно невозможна.

Сами звёзды умирают, но именно их смерть создаёт тяжёлые элементы — углерод, кислород, железо, золото. Всё, из чего состоим мы, было создано в недрах звёзд и вынесено во Вселенную при их взрывах. По сути, мы — это пыль бывших звёзд, которая на короткое время стала сознанием.

Вот ради таких ответов в том числе и стоит держать это дома.


Ограничения

Нет открытого веб‑поиска. Модель не ходит в интернет. Может обращаться к конкретным сайтам через tool use, если настроено. Для «что нового в Python 3.13» — контекст давать руками. Планирую добавить поиск через API.

Холодный старт. После нескольких часов простоя первый запрос медленный. В реальном использовании почти не замечаю — модель живёт запущенной постоянно.

Галлюцинации на плохих промптах. Claude додумает за тебя, если промпт размытый. Эта — нет. Нужно формулировать чётко. Это не ракетостроение, но привыкать надо.

Это не замена Claude. Серьёзно — если есть доступ к Claude, пользуйтесь. Разница ощутима: и по качеству на сложных задачах, и по терпению к неточным промптам. Локальная модель — это страховка. Запасной аэродром, который лежит и ждёт своего часа.

Если Claude упадёт или доступ закроют — работа не остановится. Медленнее, с более тщательными промптами — но код будет написан. Это просто спокойнее.

И второй момент, о котором редко говорят: всё, что уходит в модель, остаётся дома. Код, данные, промпты — никуда не летят. Не из паранойи — просто факт.

Telegram‑бот. Поверх всего этого живёт Telegram‑бот — доступ к модели с телефона. Но это не просто «чат с нейросетью»: бот умеет выполнять bash‑команды на сервере. Перезапустить модель, посмотреть логи, проверить температуры, запустить скрипт — всё через обычный разговор в Telegram. И можно раздавать доступ: дал другу ключ — он тоже пользуется моделью со своего телефона. Никакого облака, никаких подписок, просто свой сервер и несколько человек с доступом.

Может напишу отдельную инструкцию, но если коротко: всё это несложно, и с такой задачей вполне справится сама домашняя нейронка.


Итоги

Базовый сетап (V100)

~25 000 ₽ (V100 12к + переходник 7к + пластина 3к + водянка 3к)

Доп. VRAM (CMP 90HX)

+7 000 ₽

Райзеры, кабели, расходники

~3 000 ₽

Итого железо

~35 000 ₽ (+ старый системник)

VRAM суммарно

32 ГБ (3 карты)

Лучшая скорость (single)

88 т/с — IQ3_XS на одном V100

Рабочая скорость

51 т/с — Q5_K на трёх GPU

Параллельные запросы

3 одновременных без деградации

Контекст

до 110 000 токенов

Пик температуры

56°C GTX 1060 (воздух), 52°C V100 (водянка)

За 35 тысяч рублей и старый системник — рабочий инструмент: 85 токенов в секунду на одном V100, 51 т/с при трёх GPU, контекст до 110 000 токенов, температура в норме под нагрузкой. Пишет код, объясняет физику, даёт инструкции по выживанию — и всё это остаётся дома. Никаких подписок, никакого облака, никакого «сервис временно недоступен».

Это не замена Claude. Но как страховка, как личный инструмент с доступом для друзей, как что‑то, что работает всегда и не зависит ни от чего внешнего — оно своё место занимает. А история с Fable 5, с которой я начал, только лишний раз это подтвердила: сервер под кроватью никто не выключит сверху.


P. S. Про звук

Когда модель генерирует — слышно. Характерный высокочастотный писк дросселей, меняющийся в такт нагрузке: выше нагрузка — громче, падает — тише. Сервер буквально думает вслух. Когда добавил CMP 90HX и GTX 1060 и нагрузка распределилась, V100 стала тише.

В детстве я представлял ИИ‑помощника из Fallout — того, что живёт в бункере, знает всё и помогает выжить. Казалось, это точно не про наш мир. Ну или только для очень богатых. Оказалось — нет. Студент, 35 тысяч рублей, кровать рядом, и в углу что‑то тихо поёт дросселями, пока пишет тебе код.


Дисклеймер. Цитата в начале — это переделанная отсылка к «Страху и ненависти в Лас‑Вегасе»: оригинальный список я заменил на железо, чтобы не упоминать ничего, что могло бы трактоваться как нарушение закона. А примеры про переработку пластика и выживание — лишь иллюстрация того, что модель держит в голове, а не руководство к действию. Берегите себя.


Вопросы по железу и конфигурации — в комментарии.