Jupyter Notebook - основной инструмент в инструментарии многих специалистов по данным. В качестве инструмента Jupyter Notebook может повысить продуктивность, упростив интерактивный анализ данных, создание прототипов моделей и эксперименты, тем самым сокращая цикл обратной связи от кодирования и просмотра результатов.

Во многих случаях достаточно запустить ноутбук Jupyter на ноутбуке или рабочей станции. Однако, если вы работаете с большими наборами данных, занимаетесь дорогостоящей вычислительной обработкой данных или изучаете сложные модели, вам, вероятно, понадобится что-то более мощное, чем дополнительная мощность ноутбука. Возможно, вы запускаете сверточные сети графов на больших графах или выполняете машинный перевод с рекуррентными нейронными сетями на больших текстовых корпусах и вам нужно еще несколько ядер ЦП, ОЗУ или несколько графических процессоров. К счастью, вы можете оказаться в ситуации, когда эти ресурсы доступны на удаленном сервере!

Если на вашем удаленном сервере есть графический интерфейс пользователя (GUI), вам повезло. Вы можете использовать программное обеспечение удаленного рабочего стола для доступа к удаленному серверу или использовать Jupyter Notebook, как обычно, на своем ноутбуке.

Однако на многих серверах нет графического интерфейса. Если вы находитесь в такой ситуации, вы можете настроить свой эксперимент, написав сценарий Python на своем ноутбуке, запустить его на небольшом подмножестве ваших данных, чтобы убедиться, что он может выполняться, скопировать его на удаленный сервер и выполнить его из командная строка. Вы даже можете настроить эксперимент в записной книжке и экспортировать записную книжку в сценарий, используя jupyter nbconvert --to script your_notebook.ipynb. Хотя этот рабочий процесс, безусловно, позволяет запускать код на удаленном сервере, вы больше не можете использовать Jupyter Notebook, например, для экспериментов с моделями и интерактивной визуализации результатов. Какая жалость!

В этом посте я покажу вам, как запустить ноутбук Jupyter на удаленном сервере и как получить к нему доступ на вашем ноутбуке. Я также покажу, как настроить две bash команды, чтобы упростить весь процесс.

Запуск удаленного сервера ноутбука

Мы будем использовать Secure Shell Protocol (SSH) для запуска сервера Jupyter Notebook на удаленном сервере. SSH позволяет нам отправлять команды на удаленный сервер. Основной синтаксис следующий:

ssh username:password@remote_server_ip command

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

cd project_folder
. virtual_environment/bin/activate
jupyter notebook --no-browser --port=8889

Я выполняю команду jupyter notebook с флагом --no-browser, чтобы запустить блокнот Jupyter с запуском браузера, поскольку удаленный сервер не может отображать браузер, если у него нет графического интерфейса. Я также меняю порт с порта по умолчанию 8888 на порт 8889, используя флаг --port=8889. Это личное предпочтение; наличие локальных и удаленных ноутбуков на разных портах, чтобы было легче увидеть, где выполняется мой код.

Для выполнения команд на удаленном сервере запускаем комбинированную команду

nohup ssh -f username:password@remote_server_ip "cd project_folder; . virtual_environment/bin/activate; jupyter notebook --no-browser --port=8889"

Обратите внимание, что я выделил три команды одной строкой и разделил их с помощью ; вместо разрывов строк. Выполнение этой команды запустит сервер Jupyter Notebook на порту 8889 и позволит ему работать в фоновом режиме. Наконец, я добавил флаг -f к команде ssh, чтобы перевести процесс в фоновый режим, и добавил команду nohup, чтобы отключить весь вывод процесса, чтобы вы могли продолжить использование окна терминала. Подробнее о командеnohup можно прочитать здесь.

Доступ к записной книжке

Теперь вы можете получить доступ к записной книжке, набрав URL-адрес

remote_server_ip:8889

Эта команда требует, чтобы вы запомнили IP-адрес или добавили веб-страницу в закладки. Однако мы можем упростить доступ к удаленной записной книжке, как к локальной записной книжке, используя переадресацию портов:

nohup ssh -N -f -L localhost:8889:localhost:8889 username:password@remote_server_ip

Флаг -N сообщает ssh, что никакие удаленные команды выполняться не будут. На этом этапе нам не нужно выполнять какие-либо удаленные команды. Флаг -f отодвигает процесс ssh на задний план, как упоминалось ранее. Наконец, флаг -L указывает конфигурацию переадресации порта с использованием синтаксиса local_server:local_port:remote_server:remote_port. В конфигурации указано, что все запросы отправляются на порт 8889 на локальном компьютере, например, на ваш портативный компьютер, на порт 8889 на удаленном компьютере по адресу username:password@remote_server_ip. Как и прежде, добавлена ​​команда nohup, чтобы заглушить вывод.

Эффект от приведенной выше команды заключается в том, что теперь вы можете получить доступ к удаленному серверу Jupyter Notebook в своем браузере по адресу

localhost:8889

как если бы вы запускали ноутбук локально.

Остановка удаленного сервера ноутбука

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

Через окно браузера

В последних версиях Jupyter Notebook вы можете найти кнопку «Выход» в правом верхнем углу окна браузера, как показано стрелкой на изображении ниже. Если вы ее нажмете, вам придется снова перезапустить сервер, используя команду запуска, которую мы видели ранее.

Через командную строку

Если вы не можете перейти на более новую версию Jupyter с кнопкой «Выход» или просто предпочитаете работать через терминал, вы также можете остановить сервер из командной строки. В Jupyter есть команда оболочки для остановки записных книжек:

jupyter notebook stop 8889

где 8889 - номер порта. Вы можете выполнить его на удаленном сервере с помощью команды

ssh username:password@remote_server_ip "jupyter notebook stop 8889"

К сожалению, эта команда в настоящее время содержит ошибки, но я включил ее сюда в надежде, что она будет работать в будущем. Однако в качестве обходного пути вы можете вместо этого убить процесс jupyter, используя команду:

ssh username:password@remote_server_ip "pkill -u username jupyter"

где -u username указывает, что только jupyter процессы, запущенные username, должны быть убиты. Недостатком этого является то, что вы отключите все свои серверы портативных компьютеров, если у вас одновременно работает более одного сервера. Наконец, вы, конечно, можете управлять серверами вручную, войдя на удаленный сервер, запустив сервер ноутбука и оставив окно терминала открытым. Это позволяет выключить сервер ноутбука, используя обычную команду клавиатуры CTRL+C.

Упрощение рабочего процесса

Запоминание всех этих команд может быть довольно громоздким. К счастью, мы можем облегчить жизнь, создав псевдонимы bash для каждой из команд. Добавьте следующие строки в ваш ~/.bashrc файл:

Загрузите команды, набрав source .bashrc в своем терминале. Теперь вы можете использовать команды remote_notebook_start и remote_notebook_stop в своем терминале, чтобы соответственно запустить удаленный сервер ноутбука (и настроить переадресацию портов) и выключить его.

Заворачивать

В этом посте я показал вам, как запускать, получать доступ и останавливать записные книжки Jupyter на удаленных серверах с помощью команд bash, и показал, как создавать псевдонимы bash, чтобы упростить это.

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

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

По профессиональным вопросам обращайтесь ко мне в LinkedIn или в прямом сообщении в Twitter.