Главная страница » Jupyter Notebook и Anaconda. Удаленная разработка на Ubuntu Server

Jupyter Notebook и Anaconda. Удаленная разработка на Ubuntu Server

by Belfigor
139 views
post-logo_Anaconda+Jupyter+Ubuntu

Jupyter Notebook и Anaconda для удаленной разработки на отдельном Ubuntu Server, нужны для облегчения себе жизни. А так же чтобы не таскать с места на место свои проектики или не работать с jupyter notebook через удалённый рабочий стол. Еще распространена ситуация, когда у вас дома, в офисе, на даче или в датацентре стоит мощная вычислительная нода, многопроцессорная, с профильными для машинного обучения картами. Доступ к ней напрямую по HTTPS всегда удобнее чем через какой-либо каскад графических удаленных рабочих столов.

Можно конечно всё поставить на масдай, но 1) нестабильно, 2) в случае работы в виртуальной среде еще и нарушает лицензию использования масдая. Ведь 99.9% желающих захотят запилить в виртуальную среду какую-нибудь обычную прошку да? А она даже с лицензионным валидным ключем — будет нарушать еулу. Собственно зачем жертвовать стабильностью работы, и нарушать лицензию, если этого можно избежать?

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

  1. Что мы имеем?
    Некий сервер, внутри нашей локальной сети, куда мы хотим запилить Ubuntu Server, на неё установить Anaconda и использовать идущей в комплекте Jupyter Notebook. Почему не голый Jupyter Notebook? Потому что у анаконды в комплекте куча еще всяких прочих плюшек.
  2. Что нам надо?
    Собственно только сервер (В моём случае виртуальная машина внутри бесплатного гипервизора ESXi). Чем мощнее тем лучшее, но всё зависит от того чем именно вы занимаетесь в Jupyter Notebook.
    Я буду использовать виртмашину где:

    1. 4 vCPU от процессора Intel
    2. 8Gb Ram
    3. 16Gb Hdd
    4. IP 192.168.220.135
      Вы свои параметры должны определить для себя самостоятельно

С чего стоит начать:

Что может пригодиться:

 

  1. Обновляем сервер для Jupyter Notebook

    sudo apt update && sudo apt dist-upgrade -y
  2. Скачиваем дистрибутив с официального сайта

    wget https://repo.anaconda.com/archive/Anaconda3-2019.07-Linux-x86_64.sh
  3. Проверяем хеш скачанного файла

    Открываем страницу с хешами, выбираем тип дистрибутива который качали, и там смотрим конкретную версию файла

    Anaconda, Jupyter Notebook для удаленной разработки на Ubuntu Server - Смотрим хеш на сайте

    Проверяем хеш на сайте

    Anaconda, Jupyter Notebook для удаленной разработки на Ubuntu Server - Проверяем Hash с помощью md5sum

    Проверяем хеш скачанного файла

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

    md5sum ~/Anaconda3-2019.07-Linux-x86_64.sh
  4. Устанавливаем Anaconda

    Вводим команду bash ~/Anaconda3-2019.07-Linux-x86_64.sh, принимаем лицензионное соглашение введя yes и ожидаем окончания установки
    В конце инсталлятор спросит

    Anaconda, Jupyter Notebook для удаленной разработки на Ubuntu Server - Завершение установки

    Anaconda, Jupyter Notebook для удаленной разработки на Ubuntu Server — Завершение установки

    Вводим yes и вуаля! С установкой Anaconda мы закончили.
    Для того чтобы изменения вступили в силу, необходимо перелогиниться завершив сессию с помощью exit или просто перезагрузить сервер с помощью sudo reboot -h now

     

  5.  Настраиваем Jupyter Notebook

    1. Генерируем конфиг файл

      jupyter notebook --generate-config

      Эта команда сгенерирует конфиг файл, в моём случае по следующему пути: /home/belfigor/.jupyter/jupyter_notebook_config.py

    2. Генерируем ssl сертификат

      openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout mykey.key -out mycert.pem

      Данная команда сгенерирует файлы сертификата в той же папке, которая была открыта в момент запуска. В моём случае это домашняя моя домашняя папка ~/, полный путь выглядит как /home/belfigor

    3. Изменяем конфигурацию Jupyter Notebook

      Открываем на редактирование наш конфиг и ищим указанные ниже параметры

      nano /home/belfigor/.jupyter/jupyter_notebook_config.py

      Искать параметры в nano можно с помощью комбинации клавишь Ctrl+W. Сохранить изменения с помощью Ctrl+O, а завершить редактирование с помощью Ctrl+X.

      • Находим следующие строки и прописываем там путь до файлов сертификатов
        c.NotebookApp.keyfile = '/home/belfigor/mykey.key'
        c.NotebookApp.certfile = '/home/belfigor/mycert.pem'

         

      • Прописываем интерфейс на котором Jupyter Notebook будет принимать подключения
        c.NotebookApp.ip = '192.168.220.135'

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

      • Задаем порт на котором будут обрабатываться подключения
        c.NotebookApp.port = 35344
      • Отключаем автозапуск браузера
        Так как у нас Ubuntu Server, обладающий лишь текстовой консолью, нам нет необходимости, чтобы он каждый раз пытался запустить браузер.

        c.NotebookApp.open_browser = False
      • Дополнительные настройки
        Так же внутри конфиг файла есть огромная куча настроек, ненужных для личного использования, но которые могут оказаться полезными при более глубоком изучении инфраструктуры Jupyter и построении какой-то «своей особенной не такой как у других» инфраструктуры 🙂
    4.  Задаем пароль от веб интерфейса

      jupyter notebook password

      Этой же командой его можно сбросить если он забыт.

    5.  Запускаем Jupyter Notebook

      Т.к. в пункте 5.2 мы сгенерировали файла сертификата, а в пункте 5.3 указали путь к ним, чтобы запустить Jupyter Notebook с подключением по https, нам достаточно воспользоваться командой

      jupyter notebook

      Так же, запустить сервер с использованием сертификатов можно без пункта 2, но тогда нам нужно будет прямо в ней указать расположение файлов сертификата

      jupyter notebook --certfile=mycert.pem --keyfile=mykey.key
    6. Подключаемся к Jupyter Notebook

      После запуска, в консоли мы увидим на каком ip и порту стартовал сервер:

      (base) belfigor@adminguide-ru:~$ jupyter notebook
      [I 10:19:50.263 NotebookApp] JupyterLab extension loaded from /home/belfigor/anaconda3/lib/python3.7/site-packages/jupyterlab
      [I 10:19:50.263 NotebookApp] JupyterLab application directory is /home/belfigor/anaconda3/share/jupyter/lab
      [I 10:19:50.265 NotebookApp] Serving notebooks from local directory: /home/belfigor
      [I 10:19:50.265 NotebookApp] The Jupyter Notebook is running at:
      [I 10:19:50.265 NotebookApp] https://192.168.220.135:35344/
      [I 10:19:50.266 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
      

      Нам осталось только открыть браузер и подключиться по указанным реквизитам https://192.168.220.135:35344/с другой машины внутри локальной сети и ввести пароль заданный в пункте 5.4 и уже можно приступать к работе.

      Собственно если не терпится начать что-то запиливать, то можно всё бросать и набигать на jupyter notebook. Но если же есть еще лишние 5 минут, предлагаю сделать свою жизнь чуть лучше установив менеджер расширений для jupyter.

  6. Устанавливаем Nbextensions

    Если Jupyter Notebook сервер работает, завершаем его работу с помощью Ctrl+C => y и последовательно вводим команды:

    conda install -c conda-forge jupyter_contrib_nbextensions
    conda install -c conda-forge jupyter_nbextensions_configurator
    jupyter contrib nbextension install --user

    Когда запрашивает подтверждение, вводим [y]
    По окончании установки, зайдя в Jupyter Notebook мы увидим следующее:

    Anaconda, Jupyter Notebook для удаленной разработки на Ubuntu Server - Nbextensions

    Менеджер расширений Nbextensions

    Скорее всего галочка disable configuration for… у вас стоит, снимаем её.
    Теперь мы можем ставить представленные в списке расширения. Моё самое любимое — Table of Contents (2). Оно формирует из Markdown ячеек содержание, которе удобно использовать для быстрой навигации по проекту, когда счёт ячеек идёт на сотни.

Text.ru - 100.00%

You may also like

Leave a Comment