Облачная платформаEvolution

Ошибка «kernel_manager_class could not be imported»


Описание проблемы

Возникает при запуске Jupyter Server в кастомном Docker-образе.

В логах контейнера появляется сообщение:

Traceback (most recent call last):
File ".../jupyter_server/application.py", line ..., in initialize
self.kernel_manager = self.kernel_manager_class(...)
ImportError: cannot import name 'MlspaceAsyncMappingKernelManager' from 'cloudru_extension.services.kernels.kernelmanager'
------------------------------------------------------------
kernel_manager_class could not be imported

Причина

В базовом образе Jupyter Server файл конфигурации /home/jovyan/.jupyter/jupyter_server_config.py содержит строку:

c.ServerApp.kernel_manager_class = 'cloudru_extension.services.kernels.kernelmanager.MlspaceAsyncMappingKernelManager'

Эта настройка указывает Jupyter Server использовать расширенный менеджер ядер MlspaceAsyncMappingKernelManager из системного пакета cloudru_extension.

При сборке кастомного Docker‑образа на основе базового, если пакет cloudru_extension был удален или перезаписан, конфигурационный файл остается без изменений. В результате Jupyter Server не может импортировать указанный класс и аварийно завершает инициализацию.

Пакет cloudru_extension предоставляет:

  • мониторинг количества открытых файлов, чтобы избежать ошибок EMFILE;

  • оптимизацию использования памяти и предотвращения OOM‑падений;

  • уведомления о системных событиях;

  • работу client_lib и прокси‑серверов.

Решение

Выберите один из трех вариантов в зависимости от ваших целей.

Вариант 1 — сохранить пакет cloudru_extension

Убедитесь, что пакет не удаляется при сборке кастомного образа:

  1. Не используйте флаг --force-reinstall при установке зависимостей — он может перезаписать системные пакеты.

  2. Избегайте глобального обновления зависимостей через pip install -U . — это может удалить cloudru_extension.

  3. При добавлении новых библиотек явно перечисляйте их в pip install, не заменяя весь набор зависимостей.

Вариант 2 — восстановить пакет cloudru_extension

Если пакет уже удален, его можно восстановить из рабочего экземпляра:

  1. Запустите временный Jupyter Server на том же базовом образе, что использовался при построении кастомного.

  2. В терминале внутри контейнера выполните:

    /home/user/.mlspace_pack

    Скрипт восстановит системные компоненты, включая cloudru_extension.

  3. Скопируйте восстановленный пакет в свой кастомный образ.

    Например, через docker cp или архивацию в site-packages.

  4. Пересоберите образ и запустите Jupyter Server.

Внимание

После восстановления пакета не требуется менять jupyter_server_config.py.

Вариант 3 — отключить использование cloudru_extension

Если пакет cloudru_extension вам не нужен:

  1. Откройте файл конфигурации jupyter_server_config.py.

  2. Удалите строку:

    c.ServerApp.kernel_manager_class = 'cloudru_extension.services.kernels.kernelmanager.MlspaceAsyncMappingKernelManager'
  3. Пересоберите Docker‑образ и запустите Jupyter Server.

Внимание

Без cloudru_extension отключаются защита от OOM, мониторинг открытых файлов и интеграция с client_lib. Применяйте этот вариант только при уверенности, что данные возможности не критичны для ваших задач.