«У нас было две планки оперативной памяти, одна серверная 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 тысяч рублей, кровать рядом, и в углу что‑то тихо поёт дросселями, пока пишет тебе код.


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


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

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


  1. Dreams_and_magic
    18.06.2026 11:22

    Я не нашёл применения локальному инференсу на слабой модели:)

    Кстати, проверил Ваши промты на бесплатной Nemotron 3 Ultra Free, ответы понравились:)


    1. gerbert_MX
      18.06.2026 11:22

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

      вообще в светлом будущем локальные явно догонят флагманы и станет возможно нормально кодить на них

      но на сейчас мне локальные нравятся только своей "открытостью", то есть расцензуренная нейронка что ответит на любой твой вопрос - можно прямым текстом задавать вопросы и знать что это близко к реальности в ответе (сейчас флагманы все чаще дают ответ, водянистый и не о чем, а не пишут "запретная тема" как раньше было)


      1. Dreams_and_magic
        18.06.2026 11:22

        В случае зомбо-апокалипсиса самая лучшая википедия это бумажный энциклопедический словарь и прочие источники на бумаге. А самая лучшая инвестиция - это запас одежды и крепкие ботинки :)


        1. Dhwtj
          18.06.2026 11:22

          И огнестрел


          1. Dreams_and_magic
            18.06.2026 11:22

            Дааа:)


        1. gerbert_MX
          18.06.2026 11:22

          да но нет

          Резерв последнего шанса да, причем на хранении так что бы бумага могла лежать годами без проблем, но вот в ситуации "здесь и сейчас" електронные решения выигрывают в своей компанктности. А локальные нейронки дважды выигрывают контекстом - даже если не понял то попроси что бы обьяснило понятно

          Единое что, для реального зомби-апокалипсиса я бы сделал ведение истории на чековой бумаге, что бы сразу печатало в рулон и если техника умерла и/или нужно иметь на бумажке то то доступно без танцев и ничего не потеряно

          У меня у самого огромная проиндексированная домашняя библиотека на NAS (включая поварену книгу анархиста) и я проводил сравнение - нейронка дала быстрее и точнее ответ чем манипуляция с библиотекой и поиск ответа. Понятно что на долгой дистанции реальные знания в приоритете, но опять таки в условиях "здесь и сейчас" нейронка лучший выбор. Особенно если ты зимой в лесу и не знаешь как построить теплый шалаш что бы переночевать и связи нет.


          1. Dreams_and_magic
            18.06.2026 11:22

            И зимой в лесу у вас есть комп с мощной видеокартой и электрическая сеть в киловатт мощности:)


            1. gerbert_MX
              18.06.2026 11:22

              у меня телефон нормально тянет. Греется как утюг правда, но тянет. Мелкие 4б вообще летают по 200 токенов на секунду


      1. milka713 Автор
        18.06.2026 11:22

        Правды ради - модели семейства qwen по моему опыту отказываются учавствовать в чем-то аморальном/незаконном. Например вредоносный код без танцев с бубном не напишет. А вот насчет гугл-википедии согласен, в данном случае даже лучше, т.к можно задавать прямой вопрос и вполне себе получать ответ


        1. gerbert_MX
          18.06.2026 11:22

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


        1. Moog_Prodigy
          18.06.2026 11:22

          Qwen 9b Heretic и подобные. Во всем участвуют, маленькие, умные) А есть еще и на 27b.


        1. scientificus-emigrans
          18.06.2026 11:22

          учавствовать в чем-то аморальном/незаконном

          моя бабушка в этом случае запускала abliterated/uncensored модели.


    1. milka713 Автор
      18.06.2026 11:22

      Так тут смысл не в том, что это дешево или доступнее платных нейронок. Это именно локальныф вайб-кодинг, доступ к которому никто не сможет отобрать ) Пока статью публиковали anthropic вроде бы вообще заявили, что теперь будут требовать подтверждения личности при авторизации. А вы уверены, что Nemotron 3 Ultra внезапно не станет недоступна для вас?


      1. vmpg
        18.06.2026 11:22

        А вы уверены, что Nemotron 3 Ultra внезапно не станет недоступна для вас?

        Я уверен, что если для меня внезапно станут одновременно недоступны claude, openrouter и codex/NIM/etc, то беспокоить меня будут уже совершенно другие вещи, а не недоступность локального вайбкодинга.


  1. korolevdd
    18.06.2026 11:22

    Может я не правильно что-то понимаю, но почему вы запускаете модели с флагом --main-gpu 0, когда у вас V100 gpu 1?


    1. Gamefin
      18.06.2026 11:22

      Считают 0-1-2 а не 1-2-3


      1. korolevdd
        18.06.2026 11:22

        Я понимаю, но у вас карта gpu 0 - 1060, 1 - V100. т.е. основной картой у вас стоит 1060


      1. MrCoffee25
        18.06.2026 11:22

        Это да, но у автора в статье указано:

        CUDA_VISIBLE_DEVICES=1,0,2 нужен, чтобы llama.cpp видел V100 как главный GPU — у него больше VRAM

        Тут как будто бы первое число указывает на main GPU (хотя позже в команде явно флагом задаётся значение 0)


        1. milka713 Автор
          18.06.2026 11:22

          Главную карту задаёт флаг --main-gpu 0, а не порядок в CUDA_VISIBLE_DEVICES сам по себе. Просто –main-gpu считает по уже переотображённому списку: CUDA_VISIBLE_DEVICES=1,0,2 ставит мою V100 (физический GPU 1) на позицию 0, и --main-gpu 0 выбирает именно её.

          Вы же сами пишете: GPU 1 — это V100. Я ставлю её первой в списке → она получает индекс 0 → становится main. А 1060 (физический 0) в списке идёт второй → индекс 1, не главная.

          Формулировка в статье «первое число = main» неточная, согласен: главной делает связка «первой в списке → индекс 0 → на него указывает --main-gpu 0»


  1. test4354545
    18.06.2026 11:22

    С таким количеством памяти тогда уж Qwen 3.6 27b запускать. Да, скорость генерации упадет, но он намного умнее чем Qwen3.6 - 35B MoE


    1. slabnoff
      18.06.2026 11:22

      Опыт показал, что не на много. Комплексная задача - любимый пример у народа - рыбки в аквариуме - да, огромная разница. Работа в opencode над python/c/c# с большим объемом кода и не сверхсложной догикой - не вижу особой разницы, но 35b быстрее у меня в 2.5 раза. В итоге 27b стоит как запасная


      1. slabnoff
        18.06.2026 11:22

        В догонку. У 35b есть преимущество согласно тестам самой Qwen на 2 тестах:
        Terminal-Bench 2.0 Агентное программирование в терминале 41.6% и 51.5%
        QwenWebBench Генерация фронтенд-кода (UI/UX) 1068 (Elo) 1397 (Elo)


  1. vmpg
    18.06.2026 11:22

    Это не замена Claude. Но как страховка

    Если смотреть на экономику, то выглядит так, что в качестве страховки на случай отвала claude дешевле закинуть $30 в openrouter и иметь возможность при необходимости пользоваться и упомянутыми и гораздо более мощными моделями (в том числе бесплатно в некотором объеме).
    Также интересно, сколько эта штука в простое потребляет? Если это ~200Вт, то месячное потребление будет 150 кВт*ч без нагрузки. Если электроэнергия "бесплатная" или по 2 рубля за кВт*ч - это один расклад, если она по 20 центов (да или даже если по 10 рублей), то уже совсем другой: она будет электричества в месяц жрать больше, чем резервная подписка на условный codex plus стоит.
    То есть экономическая сторона вызывает очень много вопросов. Но чисто технически сам проект может представлять интерес.


  1. fuwiak
    18.06.2026 11:22

    Мне нравится эта идея, а вы подсчитывали, во сколько обойдётся содержание всего этого комплекта? Насколько больше электроэнергии потребляет такая конфигурация? И т. д.?


  1. slabnoff
    18.06.2026 11:22

    Посмотрите модели квантизованные fraQtl или DuoNeural, там по-разному сделано, но очень упрощенно общий смысл в том, что не просто все квантовано одинаково, а с разной точностью разные части модели с целью повышения общей точности при том же размере. В итоге очень ощутимо лучше точность модели, чем в обычных квантованиях, на большом контексте очень заметно. У меня сейчас основная модель от fraQtl.

    Ну и mtp попробуйте - поможет ускориться.

    Для moe-моделей очень хорош форк ik_llama.cpp. У меня он минимум на 20% быстрее обычной llama.cpp.


  1. Dreams_and_magic
    18.06.2026 11:22

    Это не замена Claude. Но как страховка

    Для страховки отлично подходит OpenCode, там сейчас бесплатных моделей 5 штук. Также есть AI веб-чаты, они всегда бесплатны.


    1. the2rkmen
      18.06.2026 11:22

      боюсь что так будет не всегда


      1. Dreams_and_magic
        18.06.2026 11:22

        Ну для этого можно юзать какой-нибудь Дипсик, там стоимость копейки.


  1. iamkisly
    18.06.2026 11:22

    Не хочу быть токсичным, но что это за инженер у которого руки превращаются в лапки без нейросетей?


    1. terthon
      18.06.2026 11:22

      Да тоже обратил внимание, но это типичный "21 летний сеньор" который с "наушником" собесы проходит. Без негатива малыши)


  1. UB3
    18.06.2026 11:22

    2 автор - спасибо за статью, очень познавательно. я было тоже загорелся нечто подобное собрать но глянув ролики в ютубе быстро охладел тк архитектурно эти карточки могу т переварить нейросети квантизацией 16 бит, на время их выпуска это было нормальная ситуация, а типа квантизация 8 и 4 бит ими уже не поддерживается, это со слов авторов на ютубе, я в этих ньюансах не силен - что скажите из своего реального опыта?

    Спасибо


    1. VO_Obsidian
      18.06.2026 11:22

      Там не поддерживается bf16 (работает через эмуляцию) и nvfp4 (вообще не работает). На практике считать всё будет в fp32, но это не особо играет роль, основной упор в ПСП. По производительности в LLM чуть слабее 5070ti если не брать в расчет модели с упором в вычисления типа ультракомпактных в весах nvfp4.


      1. UB3
        18.06.2026 11:22

        да, вы правы, я ошибся, 32 бита а не 16


  1. radhab20
    18.06.2026 11:22

    Купил недавно 7900xtx для этих целей, неплохо справляется. То что мне нужно делает и не надо городить отдельный горизонтальный сервер. Но дороже


    1. shteyner
      18.06.2026 11:22

      Главное что тут можно собрать сервер на 4шт V100, сколько поддерживается по NVLink и, в принципе, можно сделать сборку на 128 гигов до 200к


      1. VO_Obsidian
        18.06.2026 11:22

        Нельзя, китайские острова есть только на 4 карты и стоят от 60к, а чтоб было 128 это нужна 32 гб версия v100, которая идёт где-то 45-55к за штуку.

        На 8 карт в теории можно найти б/у сервак dell, hp или супермикро, но я бы не надеялся что это будет дёшево.


        1. shteyner
          18.06.2026 11:22

          Да, действительно, чёт они сильно дорогие стали(

          Значит 64 в одном корпусе пока что предел из дешевых.