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

Статья описывает порядок работы с поставкой и обновлениями. Что именно меняется в архитектуре и как искать скрытые обращения наружу, показано на странице «Локальная LLM без интернета», общее устройство системы — в статье «Как развернуть LLM в закрытом контуре».

Коротко. Поставка собирается во внешнем сегменте, проверяется по контрольным суммам, лицензии и базе уязвимостей, переносится по вашему регламенту и принимается в хранилище. Обновление проходит тестовый экземпляр и контрольный набор, а предыдущая версия остаётся для отката. Цена ошибки в этом процессе растёт со временем, потому что обновления идут редко.

Три площадки: где собирается, где проверяется и где работает

Процесс держится на разделении площадок. Чем меньше они пересекаются, тем проще объяснить службе безопасности, что происходит с каждым файлом.

ПлощадкаДоступ в интернетЧто делаемКто отвечает
Внешний сегмент (сборка)естьСкачиваем веса и пакеты, собираем образы, формируем состав поставки, считаем контрольные суммы, записываем лицензиюИнженер, готовящий поставку
Промежуточная проверкаограничен или нетСверяем суммы, проверяем формат весов, сканируем зависимости на известные уязвимости, подтверждаем составСлужба безопасности или назначенный проверяющий
Внутренний контур (приём)нетПринимаем поставку в хранилище весов, реестр образов и зеркало пакетов, разворачиваем на тестовом экземпляре, затем на рабочемЭксплуатация и владелец сервиса

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

Что должно лежать в поставке

Типичная ошибка первой поставки: перенесли файл весов и решили, что этого хватит. Вот что нужно описать в составе поставки.

Часть поставкиЧто фиксируемКак проверяемЧто ломается без неё
Веса модели и токенизаторИмя, происхождение, формат, лицензия, контрольные суммыСумма совпадает с записанной; формат не исполняет код при загрузке; лицензия допускает ваше использованиеМодель не стартует или стартует с другим словарём, и ответы ломаются без ошибок
Образ сервера инференсаВсе слои, версии библиотек, параметры запускаСборка выполнена без доступа в сеть из зафиксированных пакетов; образ запускается в изоляцииСервер при старте докачивает недостающее и падает в контуре
Системные пакеты и драйвер ускорителяТочные версии, зависимости между нимиУстановка на чистой машине без сети, перезапуск, проверка видимости ускорителяДрайвер и сервер не совпадают по версии, обновить на месте нечем
Модели для поиска по документамМодель векторов и, если есть, переранжирования, их версииТе же проверки, что для основной; фиксируем версию, с которой построен индексСмена модели векторов делает прежний индекс бесполезным без перестроения
Шаблон запроса, параметры, конфигурацияСистемные инструкции, ограничения, настройки генерацииХранятся в репозитории, версия записана в состав поставкиМодель отвечает иначе, а причину не найти: нет записи, что поменялось
Контрольный набор вопросовВопросы и эталонные ответы или признаки верного ответаПрогон на старой и новой версии, сравнениеНечем доказать, что обновление не ухудшило ответы
МанифестСписок всех частей, версии и суммы, дата сборки, авторПроверяется при приёме автоматическиНельзя сказать, что именно сейчас работает

Манифест — главный документ поставки. По нему принимающая сторона проверяет полноту, а через год по нему можно восстановить, какая связка отвечала пользователям в конкретный день.

Подготовка во внешнем сегменте: порядок сборки

Хорошая поставка воспроизводится. Это значит, что собрать её второй раз по записям можно без памяти конкретного инженера.

  1. Зафиксировать версии. Все пакеты, образы и файлы весов записываются с точными версиями. Фраза «последняя версия» в составе поставки недопустима.
  2. Собрать в режиме без сети. Последний шаг сборки выполняется на машине, у которой сеть отключена. Если сборка не проходит, значит, часть зависимостей тянулась из интернета и в поставку не попала.
  3. Запустить на чистой машине. Поставка разворачивается на пустом сервере, не видевшем интернета, с нуля, по инструкции, без помощи собравшего инженера.
  4. Прогнать контрольный набор. Результат записывается в протокол: он будет эталоном для следующего обновления.
  5. Посчитать суммы и оформить манифест. После этого содержимое не меняется.

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

Что проверяют перед переносом

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

  • Контрольные суммы. Совпадение с записью в манифесте и, где возможно, с суммой, опубликованной автором файла.
  • Происхождение. Откуда взят файл, кто его опубликовал, есть ли подпись. Файл из случайного зеркала не принимается.
  • Формат весов. Берутся форматы, которые не исполняют код при загрузке. Файл в формате, допускающем исполнение кода, это риск, а не просто неудобство.
  • Лицензия. Не любая модель допускает коммерческое использование и работу внутри организации на ваших условиях. Лицензия записывается в манифест и читается до сборки, а не после.
  • Известные уязвимости. Образы и библиотеки сканируются по базе. Сама база обновляется по тому же регламенту, иначе проверка устаревает.
  • Состав. Сверка списка файлов с манифестом: ничего лишнего и ничего недостающего.

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

Как убедиться, что система не ходит в сеть

Отдельная проверка нужна потому, что многие программы по умолчанию что-то загружают или отправляют сами: недостающие файлы при первом запуске, проверку обновлений, статистику, шрифты и скрипты в веб-интерфейсе. Перечень типичных мест и способы их закрыть собраны на странице «Локальная LLM без интернета». Метод проверки такой:

  1. Запустить систему на тестовом экземпляре в сегменте без маршрута наружу и пройти типовые сценарии пользователей.
  2. Включить на границе сегмента запрет исходящих соединений и журнал попыток. Штатная работа идёт сутки-двое.
  3. Разобрать журнал: каждая попытка соединения либо закрывается настройкой, либо объясняется и фиксируется как известная.
  4. Повторить проверку после каждого обновления, потому что новая версия может добавить новое обращение.

Последний пункт обычно пропускают. В итоге система, которая при первой поставке была чистой, через два обновления снова пытается связаться с внешним адресом.

Выкатка: тестовый экземпляр, контрольный набор и рабочий

Поставка принята в хранилище, но пользователям её ещё нельзя показывать. Порядок выкатки одинаков для первой поставки и для обновления:

ШагЧто делаемКритерий остановкиЧто остаётся при откате
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 ₽.