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

Как использовать repo2docker для автоматической сборки образов Docker

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

Несмотря на очевидные преимущества Docker, многие специалисты по данным все еще не приняли эту технологию. Создание образа Docker требует написания Dockerfilewith the команд для создания образа. Хотя это несложно, намного проще просто pip freeze > requirements.txt среду Python и покончить с ней (не лучшая практика, но лучше, чем ничего). К счастью, благодаря инструменту repo2docker из Project Jupyter процесс создания образа Docker из репозитория GitHub теперь представляет собой всего одну строку кода.

Как использовать: очень короткая версия

  1. Установить докер
  2. Установить repo2docker: pip install jupyter-repo2docker
  3. Запустите repo2docker repo-linkи, чтобы получить изображение за несколько минут:
repo2docker https://github.com/WillKoehrsen/feature-selector

Если этого вам достаточно, то давай приступим! В противном случае прочтите еще несколько деталей.

Основы Repo2Docker

Repo2Docker работает, проверяя репозиторий GitHub на наличие любого количества файлов конфигурации, таких как requirements.txt для библиотек Python, environment.yml для Conda или setup.py для сборки пакетов Python. Затем он переводит их в файл Docker и создает образ. Наконец, он запускает образ и запускает Jupyter Server, на котором вы можете получить доступ к Jupyter Notebooks (или даже RStudio). Все это делается одной командой!

Для получения дополнительной информации о деталях repo2docker посетите: Вступительный пост, документация или репозиторий GitHub (вклады всегда приветствуются). (repo2docker - это также технология, стоящая за binder, еще один проект от Jupyter, который стоит проверить.)

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

  1. Сначала установите докер. Инструкцию для вашей машины можно найти здесь. Руководство по началу работы с докером полезно для изучения того, как работает докер, хотя нам не нужны подробности, чтобы эффективно использовать его с repo2docker
  2. Убедитесь, что докер запущен. Если docker run hello-world показывает сообщение Hello from Docker!, то все готово.
  3. Установите repo2docker с pip install jupyter-repo2docker. Подтвердите, что он работает, набравrepo2docker -h, чтобы вызвать параметры справки.
  4. Найдите репозиторий GitHub, в котором есть как минимум requirements.txt файл. Например, я использую репозиторий для feature-selector, инструмент, который я сделал для выбора функций машинного обучения, в котором есть файл setup.py.
  5. Запустите magic linerepo2docker repo-link, который автоматически создает новый образ докера, устанавливает все необходимые зависимости и, наконец, запускает службу jupyter в среде. Это может занять 5–10 минут, но помните, что это сэкономит вам часы работы и нервов.
  6. Когда команда будет завершена, скопируйте URL-адрес и перейдите к записной книжке Jupyter, запущенной в контейнере докера.

Команда и конечный результат будут выглядеть следующим образом:

repo2docker https://github.com/WillKoehrsen/feature-selector
... Lots of steps ...
... while your Docker image ...
... is built and run ...
Final output:
Copy/paste this URL into your browser when you connect for the first time,
    to login with a token:
        http://127.0.0.1:65375/?token=randomstringofcharacters

Запустите записную книжку и поразитесь, как легко было использовать докер с repo2docker

Важные заметки

После запуска контейнера докеров откройте новую оболочку и введите docker ps, чтобы увидеть процесс контейнера. Получите CONTAINER_ID, а затем запустите docker exec -it CONTAINER_ID /bin/bash, чтобы открыть интерактивную оболочку в работающем контейнере. Из оболочки вы можете делать все, что вы делаете в командной строке, например выводить список файлов, запускать сценарии Python или отслеживать процессы.

Когда вы закончите сеанс, вы можете закрыть сервер Jupyter и контейнер с помощью ctrl + c или docker stop CONTAINER ID. Хорошая новость: когда мы хотим перезапустить контейнер, нам не нужно повторно запускатьrepo2docker repo-link снова. Вся среда сохраняется на нашем компьютере в виде образа докера, который мы можем увидеть с помощью docker image list.

Чтобы снова запустить этот контейнер, выберите IMAGE ID и выполните команду:

docker run -p 12345:8888 IMAGE ID jupyter notebook --ip 0.0.0.0 

Это запустит контейнер, опубликует порт контейнера 8888 в порт хоста 12345 и запустит блокнот jupyter, доступный по адресу 127.0.0.1:12345. Вы можете снова получить доступ к Jupyter Notebook в своем браузере со всеми готовыми требованиями. (Спасибо его проблеме на GitHub за предоставление этого решения. Также см. Документацию на докере для дополнительных опций)

repo2docker находится в непрерывной работе, и существует активный запрос на вытягивание для автоматического использования предварительно созданного образа, если файлы конфигурации в репозитории GitHub не изменились. Приведенная выше команда будет работать всегда, а также может использоваться для изображений, созданных не с помощью repo2docker. Изучив основы из repo2docker, попробуйте изучить некоторые из руководств по Docker, чтобы узнать, как эффективно использовать Docker.

Выводы

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

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

Как всегда, я приветствую отзывы и конструктивную критику. Со мной можно связаться в Twitter @koehrsen_will.