Как * безопасно * настроить Jupyter-Notebook runnnig CUDA включил PyTorch, внутри докера, на выделенном сервере в Интернете? - PullRequest
0 голосов
/ 11 января 2019

Рад, что мы за рамками базовой настройки или вопросов, таких как Как выполнить установку модуля Python при запуске ноутбука Jupyter в Docker? , Рекомендации по написанию файлов Dockerfile

Этот сервер уже работает в нашей локальной сети, мы уже используем его как совместный глубокий обучающий dev-сервер для нашей команды.

Наша команда становится более распределенной, и теперь мы собираемся переместить этот сервер в собственный DMZ, например, разрешить групповой доступ через обычный интернет (и не только через VPN).

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

В настоящее время мы установили драйверы cuda и т.д. на хост (Ubuntu), используйте nvidia-docker, чтобы получить cuda в контейнеры Docker. Чтобы сделать все драйверы cuda всех контейнеров совместимыми с версией cuda хоста, мы используем ручной подход на основе dockerfile, где все контейнеры происходят от базового образа

nvcr.io/nvidia/cuda  9.0-cudnn7.1-devel-ubuntu16.04

(Оттуда промежуточный докер-файл устанавливает другие вещи), но, наконец, последний докер-файл особенно (pip-) устанавливает jupyter-notebook вместе с необходимым (например, PyTorch 0.4.1) и всеми другими необходимыми инструментами для углубленного изучения.

Docker-контейнер запускается путем добавления общего тома в Docker-контейнер, то есть папка на хосте, принадлежащем docker: docker с групповым закрепленным битом. Там есть действительный машинный код для ноутбуков Jupyter.

nvidia-docker run --runtime=nvidia \
  --interactive --tty \
  --volume /srv:/srv \
  --name ${CONT_NAME} \
  --hostname ${CONT_HOSTNAME} \
  ${IMAGE_FULLNAME}

Затем другой скрипт запускает внутри контейнера записную книжку с выделенным токеном AUTH, этим регулярно пользуются пользователи этого ноутбука Jupyter.

jupyter notebook --allow-root --ip 0.0.0.0 --no-browser --NotebookApp.token='<TEMP_AUTH_TOKEN>'

Брандмауэр DMZ разрешает веб-доступ только к этому одному порту Jupyter-Notebook.

Ноутбуку (вместе с кодом Python, связанным с GPU) требуется доступ к инструментальной цепочке cuda и графическим процессорам. Это передается оболочкой nvidia-docker, и в настоящее время мы запускаем все содержимое контейнера Docker как root .

Теперь здесь моя помощь: как бы мы это обеспечили, «все в пределах разумного»? (Увы, моя работа состоит не в том, чтобы быть администратором на полной ставке, а в том, чтобы быть опытным парнем) У меня есть ESP. «немного дурных предчувствий», предлагающих Jupyter-ноутбук, работающий от имени пользователя root (даже если он является корнем контейнера), в Интернете. Я боюсь взломать Jupyter-Notebook, и уже в качестве root внутри контейнера выполнять вещи было бы одной вещью. Но оттуда спасайтесь от этого док-контейнера и владейте целым хостом ... как бы я помешал таким сценариям?

Итак, с одной стороны: Jupyter необходимо запустить и получить доступ к CUDA-GPU хоста, а также доставить ноутбук в Интернет ...

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...