Утечки памяти в долгоживущих сервисах упираются в перезагрузку

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

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

Перезагрузка по расписанию

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

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

Домашний сервис из модели требует регулярного ухода: мониторить память, перезагружать процесс, убирать старые логи. Это цена отказа от облака.