Я думал, что нейросеть просто запускается. Что нужно для работы нейросети - понял только после провала

Что нужно для работы нейросети - я разобрался в этом ценой трёх недель, потраченных впустую, и сервера за 40 тысяч рублей в месяц, который я арендовал не глядя. Запустил, посмотрел на throughput, чуть не расплакался. Расскажу как было на самом деле.

Что нужно для работы нейросети: я начинал не с того конца

Это было в конце 2024-го. Я взялся задеплоить локальную языковую модель для внутреннего проекта - хотел уйти от внешних API, чтобы данные компании не утекали к третьим сторонам. Задача разумная, страх понятный.

Я прочитал три статьи, посмотрел два видео и решил что всё понял. Скачал модель на 13 миллиардов параметров, поднял сервер с GPU, написал простой фреймворк-обёртку. Запустил запрос. Ждал. Ждал ещё.

Ответ пришёл через 47 секунд.

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

Вот в чём штука: нейросеть - это не программа которую просто запускаешь. Это система, у которой есть очень конкретные требования к окружению.

Где все ошибаются в расчётах

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

Модель на 13B параметров в формате float16 весит около 26 ГБ просто для хранения весов. Но во время работы ей нужна ещё память под активации, KV-кэш (это такой буфер для промежуточных вычислений), батч данных. На практике умножай цифру на диске минимум на 1.5, а лучше на 2.

Я этого не знал. Арендовал GPU с 24 ГБ видеопамяти, модель туда формально влезала - и всё равно падала с OOM (out of memory, нехватка памяти) при длинных контекстах.

Честно, я был в бешенстве. Потому что нигде в документации это не было написано явно.

Ладно, потыкав в это неделю, я собрал список того что реально нужно проверить перед запуском:

1. Память GPU - не меньше размера модели умноженного на 2, плюс запас под контекст

2. Тип квантизации - модель в int4 или int8 займёт в 2-4 раза меньше памяти с небольшой потерей качества (квантизация - это сжатие весов до меньшей точности)

3. CPU и оперативная память - нужны для обработки входящих запросов и предобработки данных, минимум 32 ГБ RAM

4. Быстрый диск - модель грузится в память с диска, SSD сокращает время первого запуска с минут до секунд

5. Сеть и латентность - если модель крутится в облаке, а клиент у тебя локально, задержка сети прибавляется к времени инференса

Когда я учёл всё это и перешёл на правильно подобранную конфигурацию с квантизированной моделью - латентность упала с 47 до 4 секунд. На том же железе.

Что я сейчас делаю иначе

Теперь перед любым деплоем я сначала считаю, потом арендую железо. Не наоборот.

Ещё одна вещь которую я сильно недооценивал - изоляция. Модель в контейнере (Docker или аналоги) с чёткими правами сетевого доступа. Это не паранойя, это минимальная гигиена. Модель которая умеет ходить в интернет без ограничений и имеет доступ к файловой системе - это уязвимость которую ты сам себе создал.

На мой взгляд, большинство статей про нейросети на 80% состоят из теории про архитектуры и на 20% из практики. Мне кажется это соотношение нужно перевернуть.

Заключение

Что нужно для работы нейросети - это не магия и не ракетная наука, но это точно не "скачал и запустил". Нужно понять цепочку: память GPU, тип квантизации, RAM, диск, сеть. Пропустишь одно звено - получишь либо провал с OOM, либо латентность которая убьёт любой пользовательский опыт.

Я сэкономил бы месяц времени если бы кто-то объяснил мне это в начале. Может ты сэкономишь сейчас.

Автор: Виктор Строев