Боги з гуртожитку

Глава 4. За натхнення!

Глава 4. За натхнення!

 

Я зайшов, коли мої друзі вже були по лікоть у залізі.

Олег сидів на підлозі, оточений коробками, як шаман у колі з тотемів, і акуратно орудував канцелярським ножем, розчленяючи одну з коробок, які наповнювали кімнату. Дмитро стояв біля столу й розкладав комплектуючі. У повітрі стояв запах нового пластику.

Кімната була заставлена нашим багатством з коробок від відеокарт, порожніми лотками, антистатичними пакетами, дротами, які ще не встигли під’єднати.

Я залучився до процесу одразу, як тільки но привітався з хлопцями. Скинувши куртку, закотив рукава й підійшов до Дмитра, допомогати йому з комплектуючими.

Ми швидко зібрали все в один цілісний вузол (ну як швидко,.. три години разом з перевірками): встановили корпус із фільтрами, щоб система не задихнулася від пилу ще до першого запуску, закріпили материнку на стійках, розвели сет відеокарт із зазором під нормальний продув, під’єднали окремий storage-блок і акуратно проклали кабелі, щоб нічого не терлося й не висіло. Блок живлення взяли з запасом і розвели лінії так, щоб кожна карта й процесор мали своє стабільне харчування, без фокусів на межі можливостей, після чого встановили кулер, не шкодуючи часу на термопасту й притиск. Коли залізо нарешті стало схожим на завершену систему, ми кілька разів пройшлися по всіх підключеннях – очима, руками, ще раз очима – перевіряючи кожен конектор, кожен гвинт і кожен кабель, бо спалити все це на першому старті було б надто простим і надто епічним фіналом навіть для нашої дружньої компанії.

Потім почалося програмне – тобто етап, де залізо треба привчити жити в соціумі: щоб сервіси не жерли одне одного, не душили пам’ять і не влаштовували війну за ресурси, а бодай удавали, що працюють на спільний результат.

 Підняли віртуальне середовище: окремий хост, гіпервізор/VM під “чисту” систему, зверху – Docker-контейнери, щоб кожен сервіс сидів у своєму акваріумі й не ліз у чужу пам’ять, плюс окремі томи під логи, кеші й бази. Розкатали інфраструктуру: inference-сервер для моделей, брокер повідомлень для подій, сховище стану світу, моніторинг/метрики, і нормальні ротації логів (бо ми вже вміли плакати від файлів розміром з роман Толстого). Далі – встановили наш рушій, симулятор світу, API агентів, підняли маршрути, ключі доступу, конфіги, і в кінці зробили ритуал “перевірити двічі”: чи підхопилися залежності, чи не переплутали порти, чи не забули обмеження по пам’яті, чи не виставили випадково debug-режим “на всю планету”.

Коли ми вперше запустили локальний старт, термінал посипав знайомими рядками – і, що найбільш підозріло, без помилок. Не було червоного, не було “segmentation fault”, не було “permission denied”, не було навіть натяку на те, що наш  Frankenstein v2.0   хоче нас принизити і видати якусь фігню. Логи просто спокійно сказали: окей, я живий. І в той момент ми всі подумали одну й ту саму річ: або це диво, або це затишшя перед бурею.

– Він живий, – з ентузіазмом промовив Олег.

І цього було достатньо, щоб викликати в мене легку посмішку.

Я дивився на монітор і відчував стриманий, майже небезпечний оптимізм. Той самий, який не дозволяє радіти, але вже не дає опустити руки. Усередині крутилася одна думка: зараз або воно полетить – або доведеться чесно визнати, що п’ять років ми маялися дурнею.

Запуск у нас вийшов майже святковий. Перші тести пройшли гладко: графіки рівні, відповіді швидкі, метрики такі красиві, що хотілося зробити скріншот і повісити на стіну замість мотиваційного плаката. Перші десять хвилин система навіть поводилася пристойно – наче розуміла, що зараз її оцінюють, і вирішила не ганьбити нас перед всесвітом в перші ж хвилини. Ми підняли навантаження, додали агентів, підкрутили частоту оновлень – і все ще було “окей”. А потім сталося те, що завжди стається з великими ідеями: реальність ввімкнулася повністю.

Ми підняли навантаження, почали «розгортання» агентів, підкрутили частоту оновлень – і все ще було “окей”. А потім ми зробили те, заради чого все й збиралося: почали розгортати пакети світу. Підтягнули планету – спершу базову географію, потім кліматичні шари, міста й дороги, вузли економіки, біоми, фонову логіку і фізику, яка робить карту не мапою, а місцем. Світ наче надувався зсередини: з’являлися маршрути, точки інтересу, зони подій, дрібні системи побуту, які не видно з висоти, але без яких усе виглядає мертвим. А далі ми почали прив’язувати NPC до агентної інфраструктури: для кожного персонажа створювалася сесія, виділялася квота CPU/GPU/пам’яті, піднімався його контекст, і в нього завантажувалась стартова “біографія” – базові факти, соціальні зв’язки, досвід, звички, поточні цілі та початковий стан. Підключення йшло партіями: ми розгортали пачку NPC, прогрівали контексти, синхронізували з поточним станом світу, перевіряли черги подій і тільки тоді додавали наступну – щоб система не просто “бачила натовп”, а реально обслуговувала тисячі паралельних процесів прийняття рішень із пам’яттю та історією. У перші хвилини це навіть працювало: ніби планета прокидається. А потім, як це завжди буває, разом із планетою прокинулася й реальність – і нагадала, що кожен зайвий шмат життя має свою ціну.

Проблеми посипалися каскадом, як рахунок у ресторані, де ти не замовляв половину страв. По-перше, стеля по NPC в режимі активної взаємодії виявилася смішною – приблизно мільйон осіб, і це при тому, що ми ще не “оживляли планету”, а просто змушували їх думати й взаємодіяти між собою. По-друге, навіть “урізаний” світ – десь вісім відсотків від задуму – починав забивати все навколо: логи росли, кеш роздувався, пам’ять агентів товстішала буквально на очах. По-третє, пам’ять NPC вела себе як снігова куля: що більше подій, тим більше “важливих спогадів”, а що більше спогадів – тим довше рішення, і тим більше подій накопичується зверху. По-четверте, черги подій почали залипати: щось не встигало, накопичувалося, а потім система починала “наздоганяти” – і це виглядало так, ніби світ задихається на бігу. По-п’яте, лог-файли росли швидше, ніж світ встигав прожити свій день: ми ще не встигли відчути симуляцію, а вже відчули біль файлової системи. По-шосте, SSD на 10 ТБ виявився не “з запасом”, а “на кілька днів”, і це ще ми старалися не балувати систему зайвими подробицями. По-сьоме, кожне додавання агентів давало не лінійний приріст проблем, а геометричний: більше персонажів → більше взаємодій → більше пам’яті → більше логів → більше затримок → ще більше взаємодій у черзі. І по-восьме, у якийсь момент стало очевидно: світ і персонажі починають “падати” разом – не тому, що щось конкретне зламалося, а тому, що такою є ціна масштабу.




Поскаржитись




Використання файлів Cookie
З метою забезпечення кращого досвіду користувача, ми збираємо та використовуємо файли cookie. Продовжуючи переглядати наш сайт, ви погоджуєтеся на збір і використання файлів cookie.
Детальніше