Окружение в production

Окружение — запись каталога с именем и immutable digest образа ядра. Занятие сохраняет выбранную ревизию. Изменение окружения по умолчанию или выпуск нового образа не меняют Python уже созданного занятия.

Панель «Окружения» показывает доступные ревизии и позволяет выбрать окружение по умолчанию для новых занятий. Если закреплённая ревизия недоступна, запуск завершается ошибкой; сервер не заменяет её случайным текущим образом.

Добавьте библиотеки

  1. Измените требования окружения в kernel/environments/. Директива # colloq: from NAME задаёт наследование.
  2. Зафиксируйте исходный коммит и подготовьте новый выпуск на доверенной машине сборки или через release CI.
  3. Опубликуйте образы и каталог с реальными digest.
  4. Установите выпуск и проверьте импорт и типовую задачу из занятия.

Production не собирает образ из веб-запроса и не получает Docker socket. Описание пакетов отражает запрошенные зависимости, а не полный pip lock: повторная сборка диапазонов версий может дать другой образ. Установленный digest при этом остаётся неизменным.

Сборка выпуска сопровождающим

Workflow Publish immutable release принимает тег версии и точный проверенный patch k3s, собирает выбранные окружения и прикладывает манифест, архив инструментов и суммы. Альтернатива — локальный scripts/release-build.py. Пример со значениями, которые нужно заменить:

python3 scripts/release-build.py --version YOUR_VERSION_TAG \
  --registry YOUR_REGISTRY_PREFIX --source-commit FULL_COMMIT_SHA \
  --k3s-version EXACT_TESTED_K3S_VERSION --environments base,cv

Для GPU дополнительно укажите --gpu-toolkit-version EXACT_NVIDIA_APT_VERSION и --gpu-device-plugin-image NVIDIA_PLUGIN_IMAGE_AT_SHA256. Авторизуйтесь в registry на машине сборки. Публикация артефактов сама по себе не является проверкой на целевой VM.

Ресурсы комнаты

Брокер по умолчанию задаёт комнате 2Gi памяти, 2 CPU и 2Gi ephemeral storage; requests равны limits. Это пределы ресурсов, а не обещание определённого числа студентов или скорости обучения модели.

Память /dev/shm входит в лимит Pod: по умолчанию 64 MiB у CPU-окружения и 1 GiB у GPU. Установщик задаёт лимит 256 PID на Pod. Namespace ResourceQuota и дополнительные правила допуска нагрузки оператор настраивает отдельно; готовой ResourceQuota в комплекте нет. Для workspace нет принудительной покомнатной файловой квоты; следите за отдельным файловым разделом и свободным местом.

GPU-окружения

Каждая GPU-комната запрашивает один nvidia.com/gpu и RuntimeClass nvidia. Совместное использование устройства не включается автоматически. Несколько одновременных GPU-комнат требуют соответствующего числа доступных устройств либо отдельно спроектированной и проверенной политики sharing.

Установщик сохраняет драйвер хоста, ставит закреплённые NVIDIA Container Toolkit и device plugin и проверяет реальную PyTorch CUDA-операцию. Для проверки нужен свободный GPU; занятая карта не отбирается у действующего занятия.

sudo scripts/cluster.sh gpu-preflight
sudo k3s kubectl get nodes \
  -o "custom-columns=NAME:.metadata.name,GPU:.status.allocatable.nvidia\.com/gpu"

Обычная доступность приложения не доказывает GPU-готовность. Если карта не выделяется или CUDA не работает, разберите причину до начала занятия.

Сохраняйте старые образы

Исторические ревизии каталога сохраняются, пока на них ссылаются комнаты. Не удаляйте соответствующие образы из registry. Резервная копия приложения содержит каталог и digest, но не слои образов.