Чтобы запустить языковую модель без интернета, нужны три вещи: внешний сегмент, где собирается поставка, канал переноса, который выбирает ваша служба безопасности, и внутреннее хранилище, откуда система берёт всё и никуда не ходит. Сама модель при этом лишь один файл из многих. Остальное: образ сервера, библиотеки, словари, шаблоны запросов, конфигурация и контрольный набор вопросов. Если что-то из этого не попало в поставку, система соберётся на тестовом стенде с интернетом, а в контуре не заведётся.
Статья описывает порядок работы с поставкой и обновлениями. Что именно меняется в архитектуре и как искать скрытые обращения наружу, показано на странице «Локальная LLM без интернета», общее устройство системы — в статье «Как развернуть LLM в закрытом контуре».
Три площадки: где собирается, где проверяется и где работает
Процесс держится на разделении площадок. Чем меньше они пересекаются, тем проще объяснить службе безопасности, что происходит с каждым файлом.
| Площадка | Доступ в интернет | Что делаем | Кто отвечает |
|---|---|---|---|
| Внешний сегмент (сборка) | есть | Скачиваем веса и пакеты, собираем образы, формируем состав поставки, считаем контрольные суммы, записываем лицензию | Инженер, готовящий поставку |
| Промежуточная проверка | ограничен или нет | Сверяем суммы, проверяем формат весов, сканируем зависимости на известные уязвимости, подтверждаем состав | Служба безопасности или назначенный проверяющий |
| Внутренний контур (приём) | нет | Принимаем поставку в хранилище весов, реестр образов и зеркало пакетов, разворачиваем на тестовом экземпляре, затем на рабочем | Эксплуатация и владелец сервиса |
Площадки могут быть разной формы: отдельный компьютер без выхода в сеть, виртуальный сегмент, комната со сменными носителями. Для процесса важно не это, а то, что каждый шаг записан, а поставка после приёма не меняется. Перенос выполняют ваши сотрудники по вашему регламенту; мы описываем содержимое поставки и порядок, но не придумываем за вас схему обращения с носителями.
Что должно лежать в поставке
Типичная ошибка первой поставки: перенесли файл весов и решили, что этого хватит. Вот что нужно описать в составе поставки.
| Часть поставки | Что фиксируем | Как проверяем | Что ломается без неё |
|---|---|---|---|
| Веса модели и токенизатор | Имя, происхождение, формат, лицензия, контрольные суммы | Сумма совпадает с записанной; формат не исполняет код при загрузке; лицензия допускает ваше использование | Модель не стартует или стартует с другим словарём, и ответы ломаются без ошибок |
| Образ сервера инференса | Все слои, версии библиотек, параметры запуска | Сборка выполнена без доступа в сеть из зафиксированных пакетов; образ запускается в изоляции | Сервер при старте докачивает недостающее и падает в контуре |
| Системные пакеты и драйвер ускорителя | Точные версии, зависимости между ними | Установка на чистой машине без сети, перезапуск, проверка видимости ускорителя | Драйвер и сервер не совпадают по версии, обновить на месте нечем |
| Модели для поиска по документам | Модель векторов и, если есть, переранжирования, их версии | Те же проверки, что для основной; фиксируем версию, с которой построен индекс | Смена модели векторов делает прежний индекс бесполезным без перестроения |
| Шаблон запроса, параметры, конфигурация | Системные инструкции, ограничения, настройки генерации | Хранятся в репозитории, версия записана в состав поставки | Модель отвечает иначе, а причину не найти: нет записи, что поменялось |
| Контрольный набор вопросов | Вопросы и эталонные ответы или признаки верного ответа | Прогон на старой и новой версии, сравнение | Нечем доказать, что обновление не ухудшило ответы |
| Манифест | Список всех частей, версии и суммы, дата сборки, автор | Проверяется при приёме автоматически | Нельзя сказать, что именно сейчас работает |
Манифест — главный документ поставки. По нему принимающая сторона проверяет полноту, а через год по нему можно восстановить, какая связка отвечала пользователям в конкретный день.
Подготовка во внешнем сегменте: порядок сборки
Хорошая поставка воспроизводится. Это значит, что собрать её второй раз по записям можно без памяти конкретного инженера.
- Зафиксировать версии. Все пакеты, образы и файлы весов записываются с точными версиями. Фраза «последняя версия» в составе поставки недопустима.
- Собрать в режиме без сети. Последний шаг сборки выполняется на машине, у которой сеть отключена. Если сборка не проходит, значит, часть зависимостей тянулась из интернета и в поставку не попала.
- Запустить на чистой машине. Поставка разворачивается на пустом сервере, не видевшем интернета, с нуля, по инструкции, без помощи собравшего инженера.
- Прогнать контрольный набор. Результат записывается в протокол: он будет эталоном для следующего обновления.
- Посчитать суммы и оформить манифест. После этого содержимое не меняется.
Шаг «на чистой машине» дорогой по времени, но именно он отличает работающую поставку от набора файлов. Без него проблемы обнаруживаются в контуре, где устранять их тяжелее всего.
Что проверяют перед переносом
Проверка нужна потому, что файл из внешнего мира — единственный путь, по которому в изолированный контур может попасть чужое. Базовый набор:
- Контрольные суммы. Совпадение с записью в манифесте и, где возможно, с суммой, опубликованной автором файла.
- Происхождение. Откуда взят файл, кто его опубликовал, есть ли подпись. Файл из случайного зеркала не принимается.
- Формат весов. Берутся форматы, которые не исполняют код при загрузке. Файл в формате, допускающем исполнение кода, это риск, а не просто неудобство.
- Лицензия. Не любая модель допускает коммерческое использование и работу внутри организации на ваших условиях. Лицензия записывается в манифест и читается до сборки, а не после.
- Известные уязвимости. Образы и библиотеки сканируются по базе. Сама база обновляется по тому же регламенту, иначе проверка устаревает.
- Состав. Сверка списка файлов с манифестом: ничего лишнего и ничего недостающего.
Проверки не доказывают, что модель отвечает хорошо. Они доказывают, что в контур попало то, что собиралось, и что в нём нет очевидно опасного. Качество ответов проверяет контрольный набор на вашей выборке.
Как убедиться, что система не ходит в сеть
Отдельная проверка нужна потому, что многие программы по умолчанию что-то загружают или отправляют сами: недостающие файлы при первом запуске, проверку обновлений, статистику, шрифты и скрипты в веб-интерфейсе. Перечень типичных мест и способы их закрыть собраны на странице «Локальная LLM без интернета». Метод проверки такой:
- Запустить систему на тестовом экземпляре в сегменте без маршрута наружу и пройти типовые сценарии пользователей.
- Включить на границе сегмента запрет исходящих соединений и журнал попыток. Штатная работа идёт сутки-двое.
- Разобрать журнал: каждая попытка соединения либо закрывается настройкой, либо объясняется и фиксируется как известная.
- Повторить проверку после каждого обновления, потому что новая версия может добавить новое обращение.
Последний пункт обычно пропускают. В итоге система, которая при первой поставке была чистой, через два обновления снова пытается связаться с внешним адресом.
Выкатка: тестовый экземпляр, контрольный набор и рабочий
Поставка принята в хранилище, но пользователям её ещё нельзя показывать. Порядок выкатки одинаков для первой поставки и для обновления:
| Шаг | Что делаем | Критерий остановки | Что остаётся при откате |
|---|---|---|---|
| 1. Приём в хранилище | Загружаем поставку, проверяем манифест автоматически | Сумма или состав не совпали | Поставка отклонена, в хранилище ничего не изменилось |
| 2. Тестовый экземпляр | Разворачиваем из хранилища на отдельном сервере или в отдельной области | Развёртывание потребовало что-то извне или вмешательство разработчика | Рабочий экземпляр не затронут |
| 3. Контрольный набор | Прогоняем вопросы на новой и на прежней версии, сравниваем | Ответы на ключевые вопросы ухудшились; в ответах пропали ссылки на источники | Прежняя версия продолжает работать |
| 4. Проверка без сети | Журнал исходящих попыток за время теста | Появились новые обращения наружу | Прежняя версия |
| 5. Переключение | Включаем новую связку для небольшой группы, затем для всех | Рост ошибок, жалобы, замедление | Возврат к прежней связке одной операцией |
Версионируется не отдельная модель, а связка: модель, шаблон запроса, параметры и индекс. Если поменять только модель и оставить прежний индекс или шаблон, ответы могут ухудшиться без каких-либо ошибок в журнале. Поэтому откат — это возврат связки целиком, а предыдущая поставка остаётся в хранилище и не удаляется после переключения.
Как часто обновлять и что делать при срочном исправлении
Частота обновлений не диктуется выходом новых моделей. Новая версия приносит выигрыш только если на вашем контрольном наборе она отвечает лучше, а каждый перенос в изолированную сеть — ручная работа с проверками. Поэтому полезно разделить обновления на три вида.
| Вид обновления | Когда | Порядок | Особенность |
|---|---|---|---|
| Плановое | По графику, который вы выбрали на обследовании | Полный путь: сборка, проверка, перенос, тестовый экземпляр, контрольный набор, выкатка | Включает новые версии модели, библиотек и базы уязвимостей |
| Срочное исправление | Найдена уязвимость в образе или библиотеке | Сокращённая поставка: только изменённый слой образа или пакет, с теми же проверками суммы и без смены модели | Контрольный набор прогоняется, но модель и индекс не трогаются |
| Откат | Новая версия ухудшила ответы или работу | Возврат к предыдущей связке из хранилища | Требует, чтобы прежняя поставка была сохранена и описана манифестом |
Регламент записывается заранее: кто принимает решение о плановом обновлении, кто подписывает перенос, сколько версий хранится, как фиксируется результат контрольного набора. Без регламента обновление через полгода превращается в эксперимент на рабочей системе. Про расчёт оборудования под выбранную модель читайте в статье «Сколько видеопамяти нужно для LLM».
Что делаем мы и с чего начать
Начинаем с обследования: 200 000 ₽ и 2–3 недели для одной системы в изолированной сети, 350 000 ₽ и 3–4 недели для нескольких сегментов и систем, 500 000 ₽ и 4–6 недель для контура с категорированием. На выходе описание площадок и канала переноса, состав поставки, контрольный набор, проверка скрытых обращений и вилка бюджета. Сумма вычитается из первого этапа, если продолжаете с нами.
Дальше пилот на одном сервере (150 000–400 000 ₽, 2–8 недель) или с интеграцией (400 000–1 200 000 ₽, 2–3 месяца), затем вывод в эксплуатацию и сопровождение. Описываем поставку и порядок, перенос выполняют ваши сотрудники. Лицензии ФСТЭК у нас нет, аттестацию не проводим, работы дешевле 150 000 ₽ не берём, круглосуточно не дежурим. Подробнее об услуге — на странице «Локальная LLM без интернета», цены по ступеням — на странице «Тарифы».
Частые вопросы
Можно ли запустить языковую модель вообще без интернета?
Можно. После запуска модель работает на вашем сервере и в интернет не ходит. Интернет нужен только во внешнем сегменте, где готовится поставка. Знания модели ограничены датой обучения, свежие сведения она получает только через поиск по вашей базе документов.
Что входит в поставку, кроме файла модели?
Токенизатор, образ сервера инференса со всеми слоями, системные пакеты и драйвер, модели для поиска по документам, шаблон запроса и параметры, контрольный набор вопросов и манифест со списком версий и контрольных сумм.
Как перенести поставку в закрытую сеть?
По схеме вашей службы безопасности: учтённый носитель, промежуточная станция проверки, односторонний шлюз или иной канал. Содержимое поставки и порядок проверки описываем мы, перенос выполняют ваши сотрудники.
Как часто нужно обновлять модель?
Реже, чем в облаке, и по графику, который вы выберете. Плановое обновление имеет смысл, когда новая версия отвечает лучше на вашем контрольном наборе. Срочные исправления уязвимостей идут отдельным коротким путём.
Что делать, если обновление ухудшило ответы?
Вернуться к предыдущей связке из хранилища: модель, шаблон запроса, параметры и индекс возвращаются вместе. Поэтому прежняя поставка не удаляется после переключения, а описана манифестом.
Как проверить, что система не обращается в интернет?
Запустить её в сегменте без маршрута наружу, включить журнал запрещённых исходящих соединений, прогнать типовые сценарии за сутки-двое и разобрать каждую запись. Проверку повторяют после каждого обновления.
Нужна ли видеокарта и как выбрать оборудование?
Для большинства задач нужен сервер с ускорителем: объём видеопамяти определяет, какая модель поместится вместе с контекстом. Названий оборудования и цен мы не приводим, считаем по памяти и длине контекста и замеряем на вашей нагрузке.
Сколько стоит начать?
Обследование стоит 200 000 ₽ за одну систему в изолированной сети (2–3 недели), 350 000 ₽ за несколько систем (3–4 недели) и 500 000 ₽ для контура с категорированием (4–6 недель). Оно вычитается из первого этапа. Пилот — 150 000–400 000 ₽ или 400 000–1 200 000 ₽.