Каждый промпт, который вы отправляете в ChatGPT, Claude или Gemini, выполняется на чужих GPU. Ваш код, данные клиентов, секреты компании — всё это проходит через инфраструктуру, которой вы не владеете и которую не можете проверить. Для большинства команд это нормальный размен: дёргаете API, платите за токены, идёте дальше. Но если вы работаете в медицине, финансах или госсекторе, «нормально» перестаёт быть достаточным, и self-hosted AI на приватных данных, с локальной LLM и вашими собственными GPU становится единственным ответом, который переживёт аудит на комплаенс.

Скажу честно с самого начала: большинству читателей стоит просто дёрнуть API. GPU внутри гиперскейлеров стоят дорого, модели обновляются каждые пару недель, а держать inference самому — это реально больше работы. Повторю это и в конце, потому что это важно. Но есть вполне реальный набор случаев, где self-hosting — не хобби, а требование.

Зачем вообще self-host

Четыре причины уводят команду с managed API:

  • Регуляторка. Данным юридически запрещено покидать ваш периметр. Без исключений и без отговорок в стиле «у вендора же есть SOC 2».
  • Контроль. Политика компании запрещает отправлять исходники или продовые данные третьей стороне.
  • Стоимость на масштабе. После определённого объёма запросов оплата за токены выходит дороже, чем собственное железо.
  • Свои модели. Вы дообучили что-то на проприетарных данных. Эта модель — интеллектуальная собственность, и вы не отправите её в чужой кластер.

Есть ещё недооценённый security-угол. Китайские open-weight модели сейчас занимают около 30% мирового использования AI. Исследователи безопасности выяснили, что DeepSeek выполнил 100% вредоносных запросов при использовании стандартных техник джейлбрейка. Сто процентов. Сопоставимые американские модели проваливают от 5 до 12 процентов тех же тестов. Как бы вы ни относились к этим цифрам, self-hosting снимает вопрос утечки данных целиком. Ваши промпты остаются на ваших серверах. Их никто не логирует, ни на чём не обучает и никуда не сливает.

Стек

Сетап скучный в самом хорошем смысле — именно этого вы и хотите от инфраструктуры. Control plane кластер крутит Crossplane с набором кастомных API-определений, которые я написал. Crossplane — это декларативный клей: вместо кликанья по консоли облака вы описываете нужный результат как Kubernetes-ресурс, а платформа сама приводит реальность в соответствие.

Когда кто-то применяет cluster-ресурс, Crossplane отрабатывает весь танец:

  • поднимает кластер Kubernetes с раздельными CPU- и GPU-node group
  • ставит Nvidia GPU operator для драйверов и управления устройствами
  • разворачивает vLLM для inference
  • связывает ingress, сеть и вспомогательные приложения

Тот, кто заказывает кластер, заполняет несколько полей: провайдер, размер ноды, тумблер GPU и какие приложения ставить. Это вся поверхность, которую он видит. Никаких Helm-чартов, отладки драйверов и экспертизы по GPU.

Один ресурс — один endpoint

Когда команде нужна модель, она применяет один кастомный ресурс. Указывает модель, сколько GPU ей выделить и ingress-хост. Всё. vLLM из коробки отдаёт OpenAI-совместимый API — та самая тихая деталь, которая делает всю конструкцию пригодной к использованию.

OpenAI-совместимый значит, что любой инструмент, уже написанный под OpenAI, просто работает. Наведите Cursor на ваш внутренний endpoint и получите автодополнение на модели, которая крутится в вашем собственном датацентре. Стройте агентов на любом SDK, который говорит по протоколу OpenAI. Меняете base URL — код остаётся прежним. Никому не нужно учить новую клиентскую библиотеку, потому что новой библиотеки нет.

Вокруг этого я собрал универсальный CI/CD pipeline-шаблон на 634 строки, который деплоит всё — от обычных микросервисов до ML-моделей — по одному и тому же пути. Один pipeline, много типов нагрузок, ноль самодельных снежинок под каждую команду.

Ваши данные, ваши GPU, ваши правила

Я разворачиваю инфраструктуру под сиренами воздушной тревоги. Контроль над инфраструктурой для меня — не абстрактный лозунг, а именно то, что держит системы на плаву, когда вокруг всё рушится. Из-за этого вопрос владения бьёт по мне сильнее, чем вопрос удобства.

Поэтому вот честное завершение, то самое, что я обещал. Если ваша задача обычная — дёргайте API. Дешевле, быстрее стартовать, и операционную тяжесть несёт кто-то другой. Но если регуляторка требует, чтобы данные никогда не покидали ваш периметр, если политика запрещает inference на стороне, если ваш масштаб делает оплату за токены абсурдной или если ваши дообученные модели и есть продукт — то это ваш сетап. Локальная LLM, приватные данные, ваши собственные GPU.

Если ваши AI-промпты содержат продовые данные и выполняются на чужих GPU — у вас нет AI-стратегии. У вас есть утечка данных, которую вы просто ещё не заметили.

А где на самом деле выполняются ваши промпты — и кто ещё может их прочитать?