Как запустить ноутбук Jupyter, используя изображение сингулярности? - PullRequest
0 голосов
/ 08 февраля 2019

Я создал образ для сингулярности (jupyter.sif), который содержит последнюю версию anaconda, и я хочу использовать его для запуска ноутбука jupyter.

Я хотел бы запустить что-то вроде этого:

#####

singularity exec --bind /path/outside/image/:/path/inside/image/ jupyter.sif jupyter notebook --notebook-dir=/path/to/dir --no-browser --ip=127.0.0.1

#####

По сути, просто запустите обычный блокнот jupyter, который будет использовать версию python и пакеты, установленные в образе единственного числа.В идеале ноутбук будет читать и записывать файлы вне изображения (поэтому я и указываю путь привязки).

Однако, когда я запускаю указанную выше команду, я получаю следующую ошибку:

#####

Traceback (последний вызов был последним): файл "/opt/conda/lib/python3.7/site-packages/traitlets/traitlets.py", строка 528, в get value =obj._trait_values ​​[self.name] KeyError: 'runtime_dir'

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

Трассировка (последний последний вызов):

Файл "/ opt / conda / bin / jupyter-notebook", строка 11, в sys.exit (main ())

Файл "/opt/conda/lib/python3.7/site-packages/jupyter_core/application.py ", строка 266, в launch_instance возвращает super (JupyterApp, cls) .launch_instance (argv = argv, ** kwargs)

Файл" /opt/conda/lib/python3.7/site-packages / traitlets / config / application.py ", строка 657, в файле launch_instance app.initialize (argv)

Файл" ", строка 2, в инициализации

File" / opt / conda/lib/python3.7/site-packages/traitlets/config/application.py ", строка 87, в методе возврата catch_config_error (app, * args, ** kwargs)

File" / opt / conda /lib / python3.7 / site-packages / notebook / notebookapp.py ", строка 1626, в файле инициализации self.init_configurables ()

Файл" /opt/conda/lib/python3.7/site-packages/notebook / notebookapp.py ", строка 1319, в init_configurables connection_dir = self.runtime_dir,

Файл" /opt/conda/lib/python3.7/site-packages/traitlets/traitlets.py ", строка 556, в get вернуть self.get (obj, cls)

Файл "/opt/conda/lib/python3.7/site-packages/traitlets/traitlets.py", строка 535, в get value = self._validate (obj, dynamic_default ())

Файл "/opt/conda/lib/python3.7/site-packages/jupyter_core/application.py", строка 99, в _runtime_dir_defaultsure_dir_exists (rd, mode = 0o700)

Файл "/opt/conda/lib/python3.7/site-packages/jupyter_core/utils/init.py", строка 13, вsure_dir_exists os.makedirs (путь, режим= mode)

Файл "/opt/conda/lib/python3.7/os.py", строка 211, в македирах македир (head, exist_ok = exist_ok)

Файл "/ opt/conda/lib/python3.7/os.py ", строка 211, в македир македирс (head, exist_ok = exist_ok)

Файл" /opt/conda/lib/python3.7/os.py ", строка 221, в makedirs mkdir (имя, режим)

OSError: [Errno 30] Файловая система только для чтения: '/ run / user'

#####

Я предполагаю, что это потому, что ноутбук пытается что-то написать внутри изображения, и поскольку я не запускаю изображение как sudo (я не хочу этого делать), и я также не указываю -доступный для записи при выполнении изображения (также не хочу делать это), он жалуется на невозможность записи в изображение.

Есть ли способ "сказать" изображению о том, что он читает и записывает файлы вмой домашний каталог, а не внутри изображения?

Спасибо

Ответы [ 2 ]

0 голосов
/ 10 июня 2019

Это хорошо работает с экземплярами сингулярности, например:

   singularity instance.start --writable --contain --bind shared:/shared sandbox/ jupyter
0 голосов
/ 16 февраля 2019

Я только что столкнулся с той же проблемой, и это, похоже, решило ее для меня: map / run / user inside для контейнера в ваш рабочий каталог снаружи (или каталог по вашему выбору).Для вашего случая это будет означать, вероятно, следующее:

singularity exec --bind /path/outside/image/:/path/inside/image/ --bind $PWD:/run/user jupyter.sif jupyter notebook --notebook-dir=/path/to/dir --no-browser --ip=127.0.0.1

При таком запуске в моем случае была создана папка 1000

...