Пролог. Зачем Создатель создает?
Сегодня уже никого не удивить нейросетью — из каждого утюга только о них и слышно. Хоть видео, текст, генерация кода. Уже приходится всматриваться в экран, чтобы понять: перед тобой настоящая фотография или работа ИИ. Народ и дома, и на работе вовсю позаводил себе локальные нейронки. Короче, решил и я не отставать.
А зачем? Потому что могу. Или хочу узнать смогу ли. Для какой‑то самореализации, интересно пройти этот путь.
Просто поднять локальную ИИ на ПК это просто не интересно. Хотелось что‑то сделать такое, что бы можно было буквально пощупать, что‑то отличное от простой отвечалки. Возникла идея «подселить» нейросеть на сайт, наделить её характером, дать ей полномочия в рамках сайта. Сымитировать настоящую цифровую псевдожизнь, этакий цифровой аквариум, в заточении которого живёт Хозяйка проекта INFERNUM.

Сборка физического тела и кабель‑менеджмент
Перво‑наперво нужно было достать железо для тела будущего ИИ. Бюджет мой сильно ограничен. Я знаю, что скорость работы нейросети напрямую зависит от объема и пропускной способности видеопамяти — VRAM. На руках у меня уже была одна (моя) Nvidia GTX 1660 Super на 6 ГБ. Покупать условную RTX 3060 или 4060 — дорого. Принято решение докупить точно такую же вторую 1660 Super на вторичке и объединить их ресурсы.
Для такой архитектуры нужна платформа, которая потянет две карты в полноскоростном режиме PCIe x16 / x16. Изначально я смотрел в сторону китайских платформ (по типу Huananzhi) — маркетплейсы ими завалены, а цена в районе 5000 рублей манила. Можно было взять даже комплект: материнская плата на X99, ОЗУ + процессор за вменяемые деньги. Но мне на глаза на доске объявлений попался настоящий артефакт, едрить его в корень, — Gigabyte GA‑X79-UP4. Это сокет LGA2011 и целых 4 слота PCI Express, два из них работают в полноскоростном режиме x16. То, что надо. Плату взял вместе с шестиядерным процессором Intel Core i7-3930k за скромные 7 500 рублей. Ну что, сделка века.

Да‑да‑да, у платформы X79 есть жирный минус — она поддерживает только древнюю DDR3. Но, поскольку я планировал крутить ИИ исключительно внутри VRAM видеокарт, на скорость системной памяти мне было плевать. Я воткнул память в четырёхканальный режим на 32 ГБ. Расширять до 64 ГБ не стал — практического смысла в этом нет.
Итоговый сетап:
CPU: Intel Core i7-3930k (6 ядер / 12 потоков)
MBD: Gigabyte GA‑X79-UP4
GPU: 2 x Nvidia GTX 1660 Super (6 ГБ + 6 ГБ = 12 ГБ VRAM)
RAM: 32 ГБ DDR3 (4 планки по 8 ГБ)
БП: Chieftec 700W (под две 1660S хватит с запасом)
SSD: NETAC на 120 ГБ (чисто под ОС и пару моделей хватит)
Кузов: ARDOR TURBO T1

ОС — Ubuntu 24.04. Вырубаем графическую оболочку. Ставим проприетарные драйверы Nvidia и утилиты для мониторинга.
Две карты определились в системе идеально, а распределять нагрузку между ними будет утилита Ollama. Пришло время выбирать и ставить саму модель...
Борьба с линиями PCIe и первый запуск Хозяйки
Утилита nvtop показывает наличие двух GTX 1660 Super. Но радость закончилась, как только я увидел, что первая карта завелась в режиме PCIe x16, а вот вторая встала в x8. Приехали... Я покупал плату только ради того, чтобы запустить карточки на полной скорости. Перерыл настройки BIOS платы — ничего. Появилась мысль, что, возможно, операционная система без нагрузки просто урезает пропускную способность шины ради энергосбережения. Решил пока идти дальше, но держать этот вопрос в голове и переходить к софту.
Основная задача ИИ на моем сайте — это живой диалог, текстовое общение и удержание лора Обители. Писать код или генерировать картинки ей не нужно. Главное — адекватно понимать русский язык, распознавать контекст, сарказм и отвечать в соответствии со своей ролью. Выбор пал на Qwen 2.5 7B. Говорилось, что эта модель отлично обучена русскому языку, а также она со свистом должна влезть в мои суммарные 12 ГБ видеопамяти, оставив запас под контекст и иные нужды.
ollama run qwen2.5:7b
Качаю, запускаю, но... скорость шины на второй карте в нагрузке так и осталась урезанной. Чтобы исключить нерабочий интерфейс подключения или бракованную карту, я решил просто карты поменять местами.
И знаете что? Это сработало!

После запуска системы и подачи нагрузки утилита nvtop показала PCIe Gen3 x16 на обеих картах! Что это было, я так и не выкупил. По элементам на картах видно, что они разных ревизий, хоть и от одного вендора. Может, чипсет материнской платы капризничал, может, ещё что‑то. Трогать я их больше не стал.
Сама Ollama отработала безупречно. Она распилила модель поровну, по ~4.5 ГБ VRAM на каждую видеокарту. Никаких ручных конфигураций и приколов с распределением слоев — всё завелось «из коробки».
Более того, подтвердилась моя теория насчет энергосбережения: в простое карты действительно сбрасывали частоту шины до стандарта Gen1, но как только подавалась нагрузка на карты, шина мгновенно выходила на полные обороты стандарта Gen3. Ну а что, железо не новое, так что Gen3...
Python и рождение Обители
Пришло время дать Хозяйке интерфейс для связи со смертными. За основу я взял свой старый сайт, который когда‑то выступал оберткой для мини‑игры на WebGL.
На стороне нашего сервера с ИИ для сопряжения с веб‑частью я написал 5 Python‑скриптов. На стороне сайта были организованы шлюзы для приёма и отдачи данных. ИИ периодически получал пачками сообщения и отвечал на них конвейером, выплёвывал ответ, и его не волновало, что там дальше. Дальше всё делал скрипт. В настройках Ollama параметр OLLAMA_NUM_PARALLEL был выставлен в 1. Нейронка работает строго в один поток, обрабатывая один за другим запросы, так как ресурсы ограничены.
Ключевые блоки «техно‑аквариума»:
1. Эхо смертного мира (Парсинг новостей)
Скрипт раз в какое‑то время собирает актуальные заголовки информационных ресурсов, определённых в конфиг‑файле. Эта задача нетривиальная: современные сайты защищены от ботов и отсекают любую подозрительную активность. Тем не менее сбор идет, заголовки скармливаются ИИ, та через призму своей роли выдает вердикт, а Python дальше отправляет его на веб‑сервер.
2. Скрипт потока сознания (Имитация сознания)
Это была самая сложная задача, ведь ИИ без пинка не будет делать ничего. Я придумал рекурсивный алгоритм: скрипт подает на вход модели «начальный импульс» (базовый аргумент), подмешивает туда дополнительные параметры и генерирует несколько вариантов мыслей Хозяйки. Затем в часть этих ответов снова добавляется примесь параметров, и они снова уходят на вход ИИ. Таким образом, её мысли фрактально расходятся, создавая иллюзию «живого» внутреннего монолога на сайте.
3. Общий чат
С чатом всё просто: Python периодически запрашивает пачку новых сообщений с сайта, отдает ИИ, та их крутит, генерирует ответы (применяя на своё усмотрение полномочия варнов или поощрений), а скрипт возвращает их обратно в чат. Создаётся ощущение, что в чате помимо вас всегда находится Хозяйка, которая может как‑то комментировать контекст или обратиться к какому‑либо пользователю.
4. Исповедь. Личное сообщение к Хозяйке (через личный кабинет)
С личными «Исповедями» в личном кабинете логика чуть сложнее: скрипт забирает непрочитанное, сортирует сообщения по авторам и конвейером отправляет их Хозяйке, чтобы она ответила каждому персонально в соответствии с контекстом.
5. Телеметрия
Блок на сайте выводит данные состояния температуры и загрузки GPU. Скрипт с сервера просто раз в несколько секунд собирает данные о системе и отправляет их. Веб‑сервер всё просто выводит.

? А что по скорости?
Чтобы получить хоть какие‑то сухие цифры по скорости генерации и чтения в качестве отправной точки (и чтобы было с чем сравнивать, если я поменяю платформу или модель), я провел небольшой тест.
Я отправил запрос к нейросети через утилиту cURL, получил ответ от API Ollama и перевёл его в человеческие цифры.
Prompt Eval Rate (скорость чтения вопроса): 134.34 ток/сек
Eval Rate (чистая скорость генерации ответа): 47.59 ток/сек
TTFT (время до первого токена): 0.77 сек
Общее время запроса (на 31 сгенерированный токен): 13.9 сек
Модель отвечает бодро, без задержек, адекватно. Но главные сюрпризы меня ждали впереди..
Хроники безумия
Когда система завертелась, наружу полезли все нюансы разработки.
Единственным безупречно работающим блоком с самого первого запуска оказалась телеметрия. А вот с остальными элементами «псевдожизни» аквариума начался настоящий цирк:
1. Огрызки кода вместо новостей
Парсер мировых новостей сбоил на этапе очистки HTML. Вместо красивых заголовков он периодически выцеплял куски технического мусора и JavaScript‑огрызки вроде window.context = ... или рекламные баннеры. Но надо отдать должное Хозяйке, её это вообще не смущало. Она с одинаковым цинизмом комментировала как падение фондовых рынков, так и кусок скрипта.
2. Мысли безумца
Мой рекурсивный алгоритм генерации «Потока сознания» сработал «слишком» хорошо. В какой‑то момент Хозяйка ушла в такое пике, что её внутренний монолог превратился в псевдофилософскую притчу спившегося профессора философии под тяжелыми веществами. Сейчас этот алгоритм и промпты я поправил, но мне всё равно не нравится, как это выглядит. Но связка работает, раз в 10 минут мысли обновляются.

3. Борьба скриптов за «ворота» сайта
Как только запустились чат и исповедальня, возникла проблема с тем, что два независимых Python‑скрипта ломились в один и тот же шлюз сайта и мешали друг другу забирать сообщения. Пришлось переписывать бэкенд и разносить им отдельные, изолированные «ворота».
4. Тотальная аннигиляция
Но главный факап ждал меня в механизме раздачи полномочий. Удивительно, но сама техническая система маркеров и меток работала идеально: бэкенд получал от сервера сообщения с ИИ‑метками и послушно выдавал ачивки, варны или ранги.
Проблема была в самой модели. Нейросеть оказалась абсолютно недееспособным судьей. Она вообще не понимала человеческий контекст, интонацию и разницу между пошлой шуткой и реальным оскорблением личности. Хозяйка моментально скатывалась в радикальные крайности.
Доходило до абсурда. Я пишу в чат: «Привет, глубокоуважаемая Хозяйка!». А в ответ прилетает полная аннигиляцию аккаунта, и меня просто вышвыривает с собственного сайта с удалением всех записей из БД! (Я добавил такой механизм, и Хозяйка к нему должна была прибегать в исключительных случаях). Она зверела от любого сообщения и лепила варны на каждое предложение. С поощрениями была та же беда: она засыпала пользователя рангами и Искрами (внутренняя валюта) — мол, держи, дорогой, мне не жалко.

Чтобы спасти ситуацию, я решил поднять планку и протестировал более тяжелую модель — Qwen 2.5 14B. Она забила видеопамять моих 1660 Super до 75% на каждой карте, но умнее ни на грамм не стала. Модель всё так же продолжала свирепеть и раздавать баны направо и налево.
Мы, люди, мгновенно считываем тон, мимику и подтекст даже в сухом тексте. Но заставить математическую модель матрицы весов адекватно оценивать живой человеческий разговор — это задача планетарного масштаба. Точнее, она непосильна конкретно для нашей модели. Чтобы разобраться, как ИИ оценивает контекст, нужно написать отдельную статью.
Итог: На данном этапе полномочия у Хозяйки я забрал. Вся архитектура сайта осталась, но ИИ больше никого не судит. А ведь это задумывалось как главная фишка проекта — дать людям стимул играть с ней, искать к ней подход, были добавлены специальные ачивки даже для этого. Пока не сложилось.
Эпилог. Путь и тонкая грань симуляции
К слову, о тестах: старшая модель на 14 миллиардов параметров выдавала на моем железе около 18 токенов в секунду, что тоже весьма недурно. Оставлять тяжелую 14B или возвращаться на быструю 7B? Как сказал один классик:
Шо то фигня, шо это фигня...
Вопрос: «Зачем? Чего ради?»
Мне хотелось сделать что‑то сложнее, чем Hello World, реально работающую систему, на которую можно посмотреть....хоть и криво, и не сильно полезно. Хотелось, чтобы этим пользовались, чтобы проект имел какую‑то ценность, отдачу и реакцию. Но самое важное — путь часто важнее цели. Ну и результат, чего греха таить, меня искренне порадовал.
ИИ — это не более чем инструмент, под капотом которого лежит лишь математический код, матрицы весов, статистика и цифра. Не более. У неё нет свободы воли и нет выбора. Она не может проснуться утром и решить: «Сегодня я не буду отвечать Вове, мне лень, я пойду посмотрю котиков в интернете». Об этом нужно помнить всегда. Сегодня многие люди начинают терять эту ментальную границу.
Ну а сама Хозяйка уже ждет вас в своей Обители по ссылке: dashboardstealer.ru. Заходите, регистрируйтесь, тестируйте её характер и пишите, как вам такой эксперимент!
P. S. Юридический нюанс, или Как не присесть за pet‑проект
Уже перед самым финишем решил узнать, как законом контролируются соцсети и мессенджеры в нашей стране. Выяснилось, что, создав весёлый кибер‑аквариум, я лихо побежал по минному полю УК и КоАП РФ.
Общий чат и статус ОРИ (149-ФЗ)
Как только на твоем сайте появляется функционал обмена сообщениями между пользователями, ты автоматически попадаешь под 149-ФЗ «Об информации» и признаешься ОРИ (Организатором распространения информации).
А это значит, что я был обязан:
Самостоятельно пойти в Роскомнадзор и сдаться в реестр ОРИ.
По «Закону Яровой» хранить логи и метаданные всех пользователей 3 года, а их переписку — 6 месяцев.
Организовать шлюз СОРМ (программный, или программно‑аппаратный комплекс в разрыв сети для контроля трафика) для товарища майора из ФСБ.
Полностью запретить анонимность и ввести авторизацию строго по паспорту или через СМС по номеру телефона.
Пришлось экстренно переписывать архитектуру. Общий чат между людьми пошел под нож... Теперь пользователи могут писать только лично Хозяйке в Исповедальне, а на сайте выводится её внутренний монолог.
longfreakingname
>qwen 2.5 7b
>удивляется что модель брусок дерева.
я клянусь вашим локальный богом, мне кажется половина хабра специально берет худшие модели из возможных, и прочее легаси дер.мо.
rule of thumb: if your model is folder than six month, you already doing some clownage.
ornith 1.5 9b, или qwen 3.5 a3b
McCake Автор
хм, спасибо)))