О ч ё м этот ноу т бу к А на ко нд а , ma mb a , fi s h , tmu x ... ·...

9
Анаконда, mamba, fish, tmux, cookiecutter О чём этот ноутбук Аналитика с каждым годом всё больше переезжает в облако (https://hostingtribunal.com/blog/cloud- computing-statistics/). Ресурсов стационарного компьютера не хватает для большинства серьёзных задач в науке и индустрии. На помощь приходят облачные сервисы, предоставляющие необходимые вычислительные мощности. Будь то университетский / рабочий кластер или Amazon AWS, на что-то большее, чем консольный интерфейс, рассчитывать обычно не приходится. Цель этого ноутбука — дать вам представление о том, как настроить удобное окружение для работы в терминале Linux . В настоящее время 90% облачных сервисов работают под Линуксом, в том числе продукты Microsoft (https://www.wired.com/2015/09/microsoft-using-linux-run-cloud/), вам придётся его освоить). В ноутбуке пойдёт речь о fish и tmux — инструментах, освоив которые вы полюбите терминал, а также об основах reproducible research — о conda , jupyter и git как способах фиксировать состояние проекта и гарантировать, что другой человек сможет запустить ваш код. Эти практики де-факто являются стандартом в предметной области и помогут вам не растеряться, когда вы начнёте разрабатывать свои большие проекты или вносить правки в чужие. Материал можно условно поделить на две части: основную, которая призвана облегчить вам жизнь при выполнении заданий по нашим курсам, и продвинутую, где рассказываются вещи, которые понадобятся вам в работе или в исследованиях. Anaconda

Upload: others

Post on 24-Jul-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: О ч ё м этот ноу т бу к А на ко нд а , ma mb a , fi s h , tmu x ... · 2020-05-09 · На помощь приходят облачные сервисы, предоставляющие

Анаконда, mamba, fish, tmux, cookiecutter

О чём этот ноутбук

Аналитика с каждым годом всё больше переезжает в облако (https://hostingtribunal.com/blog/cloud-computing-statistics/). Ресурсов стационарного компьютера не хватает для большинства серьёзных задачв науке и индустрии. На помощь приходят облачные сервисы, предоставляющие необходимыевычислительные мощности. Будь то университетский / рабочий кластер или Amazon AWS, на что-тобольшее, чем консольный интерфейс, рассчитывать обычно не приходится.

Цель этого ноутбука — дать вам представление о том, как настроить удобное окружение дляработы в терминале Linux . В настоящее время 90% облачных сервисов работают под Линуксом, втом числе продукты Microsoft (https://www.wired.com/2015/09/microsoft-using-linux-run-cloud/), вампридётся его освоить). В ноутбуке пойдёт речь о fish и tmux — инструментах, освоив которыевы полюбите терминал, а также об основах reproducible research — о conda , jupyter и gitкак способах фиксировать состояние проекта и гарантировать, что другой человек сможетзапустить ваш код.

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

Anaconda

Page 2: О ч ё м этот ноу т бу к А на ко нд а , ma mb a , fi s h , tmu x ... · 2020-05-09 · На помощь приходят облачные сервисы, предоставляющие

Anaconda (https://www.anaconda.com)наиболее известна как дистрибутив Python со встроенным внего пакетным менеджером conda . Она позволяет изолировать окружение проекта от системнойверсии Python , который критически необходим для работы системы. Использование sudo pipсчитается плохой практикой (https://askubuntu.com/questions/802544/is-sudo-pip-install-still-a-broken-practice). Также conda позволяетбез проблем переносить окружение с одной машины на другую. Крометого, если вы что-то сломаете, то с Anaconda вы всегда сможете откатиться на более старую версиюокружения. Конечно, если вы позаботитесь о регулярных бэкапах. С системной версией Python этогораздо сложнее и может потребовать переустановки системы.

Въедливый читатель скажет, что вместо Anaconda можно использовать virtualenv(https://virtualenv.pypa.io/en/latest/) или docker (https://www.docker.com). Тем не менее, docker эточаще всего overkill для простых проектов (его сложно настраивать, он работае относительномедленно и требует sudo -прав). Связка pip + virtualenv хорошо работает для Python -onlyпроектов, но на наших курсах вам придётся также работать с R . Кроме того, conda во многоманалогична пакетному менеджеру внутри операционной системы и позволяет локально (без sudo -прав,которых в облаке у вас почти никогда нет) установить gcc , бразуер, альтернативный shell и многоедругое для 100+ языков. С более подробным сравнением Anaconda с альтернативнымиинструментами вы можете ознакомиться по ссылке (https://jakevdp.github.io/blog/2016/08/25/conda-myths-and-misconceptions/).

Мы установим Anaconda и настроим с её помощью комфортное окружение для работы над курсом.

Замечание: Anaconda можно поставить и под Windows , на официальном сайте есть инструкция.Тем не менее, мы не берёмся гарантировать, что всё заработает. Портирование кода под Windows это долго и дорого, потому большая часть библиотек по анализу данных и машинному

обучению доступны только под Linux .

Установка AnacondaСкачайте последнюю версию Anaconda под свою ОС с официального сайта(https://www.anaconda.com/distribution/). Запустите установочный файл и следуйте инструкциям (не меняйте дефолтные параметры безуважительной причины). После установки перезагрузите терминал (например, с помощью команды exec bash ).

Если всё прошло успешно, то ячейка ниже должна отработать без ошибок:

In [1]:

Если что-то пошло не так, то напишите об этом на почту курса или задайте вопрос в чате, мы поможем и

conda 4.7.11

!conda --version1

Page 3: О ч ё м этот ноу т бу к А на ко нд а , ma mb a , fi s h , tmu x ... · 2020-05-09 · На помощь приходят облачные сервисы, предоставляющие

внесём правки.

Создание conda environmentЗаводить отдельный environment для каждого проекта — правило хорошего тона.Устанавливать всё в корневой envirnonment — прямой путь в отдельный круг ада, на который выобрекаете себя в будущем. Кроме того, что это противоречит философии conda , — возможностисосуществования несовместимых дистрибутивов Python в пределах одной системы, — это такжеприводит к неконтролируемому росту числа установленных пакетов. Для разрешения зависимостей conda использует приближённый SAT-solver (https://www.anaconda.com/understanding-and-

improving-condas-performance/), а задача SAT NP -полна, потому упорное использование только одного environment -а вскоре приведёт к тому, что вы будете часами ждать установки пакетов.

Не надо так.

Выполнив в терминале код из ячейки ниже, вы создадите environment для нашего курса в директории~ :

conda create -n mipt-stats python=3.7 r=3.6 --yes

Эта команда создаст environment , в котором уже будут установлены Python и R , что сэкономитвам время в будущем. Активируйте окружение, запустив в терминале ячейку ниже:

conda activate mipt-stats

Если вы захотите вернуться в базовое окружение, введите

conda deactivate

Если вы хотите создать окружение в другой папке, то замените флаг -n на -o

conda create -o path/to/env python=3.7 r=3.6 --yes

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

conda activate /path/to/env

Установка mamba и основных пакетов

Page 4: О ч ё м этот ноу т бу к А на ко нд а , ma mb a , fi s h , tmu x ... · 2020-05-09 · На помощь приходят облачные сервисы, предоставляющие

Выше упоминалось, что для разрешения зависимостей conda приближённо решает задачу SAT . Ксожалению и стыду разработчиков из Continuum , SAT-solver в conda написан на pure Python , из-за чего он работает возмутительно медленно. Эту проблему решает mamba(https://medium.com/@wolfv/making-conda-fast-again-4da4debfb3b7) — SAT-solver для conda ,написанный на C++ компанией QuantStack (https://quantstack.net/the-team.html).

conda install -c conda-forge mamba --yes

Далее везде используйте mamba install вместо conda install .

Аргумент -c позволяет указать репозиторий, в котором будет осуществляться поиск. Настоятельнорекомендуется использовать репозиторий conda-forge (https://conda-forge.org), т.к. там почтивсегда можно найти актуальные версии пакетов (чего не скажешь об основном репозитории Anaconda ). Причина в том, что conda-forge управляется сообществом пользователей conda , в то

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

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

mamba install -c conda-forge tmux fish htop curl pip git \

nb_conda jupyter_contrib_nbextensions ipykernel r-irkernel rpy2 \

numpy scipy statsmodels sympy pandas tqdm \

matplotlib seaborn bokeh r-ggplot2 \

joblib dask \

scikit-learn scikit-image scikit-plot \

texlive-core \

--yes

Важное замечание: никогда не смешивайте pip и conda !

Подробное обсуждение этого вопроса можно прочитать на stackoverflow(https://stackoverflow.com/questions/56134588/is-that-a-bad-idea-to-use-conda-and-pip-install-on-the-same-environment). conda и pip были созданы для принципиально разных задач и "не знают" друг о друге:пакеты, которые вы установили через pip , будут видны изнутри conda , так как они ставятсянапрямую в системный Python , но никакой инкапсуляции при этом не получится. Они не будутучитываться conda при разрешении зависимостей, а также могут быть параллельно установленычерез conda в другой версии, что приведёт к странным ошибкам и неизбежному моральному падению.

Более того, даже если вы установите pip через conda , это всё ещё будет не то же самое, чтоустановка пакетов через conda обычным образом. Гарантировать корректное разрешениезависимостей при этом будет нельзя.

fish : make Linux terminal great again!

Page 5: О ч ё м этот ноу т бу к А на ко нд а , ma mb a , fi s h , tmu x ... · 2020-05-09 · На помощь приходят облачные сервисы, предоставляющие

fish — friendly interactive shell — по праву заслуживает звания " bash двадцать первого века". Он"из коробки" поддерживает подсветку синтаксиса и автодополнение команд. Забудьте те мучительныедни, когда вам приходилось вручную печатать команды! Грамотное использование fish сэкономит вамуйму времени. К тому же, fish , в отличие от конкурентов в духе zsh , прост в использовании итребует минимальных усилий при установке. Кроме того, его можно настраивать через web-интерфейс!Больше можно узнать на официальном сайте (https://fishshell.com) и в блоге на Medium(https://medium.com/better-programming/why-i-use-fish-shell-over-bash-and-zsh-407d23293839). Если вампонравится, на странице репозитория (https://github.com/fish-shell/fish-shell) написано, как заменить bash на fish глобально, на уровне операционной системы.

Мы уже установили fish в прошлом разделе. Он доступен изнутри нашего conda environment . Теперь установите расширение oh-my-fish (https://github.com/oh-my-fish/oh-my-fish) и запустите fish при помощи команды

curl -L https://get.oh-my.fish | fish

Это нужно сделать один раз, чтобы обновить конфигурационный файл fish . При желании, вы можете тонко подстроить fish под свои нужды, но большинству хватает встроенныхвозможностей.

Бэкап conda env и восстанавление окружения из негоТеперь позаботимся о том, чтобы наши усилия не прошли даром — сделаем бэкап! conda позволяет сделать бэкап в форме .yaml -файла. В fish это делается командой

conda env export >(printf (date +"%Y-%m-%d %T mipt-stats.yaml"))

Теперь окружение можно восстановить из бэкапа при помощи команды

conda env create -f environment.yaml

При этом окружение будет загружено в ~/.conda/envs . Если вы хотите установить conda в другую директорию, то укажите её через команду -o :

conda env create -f environment.yaml -o path/to/env

где вместо environment.yaml нужно подставить имя только что созданного .yaml -файла. Хорошая практика — автоматизировать создание бэкапов с помощью системного планировщика (в духе cron ).

Page 6: О ч ё м этот ноу т бу к А на ко нд а , ma mb a , fi s h , tmu x ... · 2020-05-09 · На помощь приходят облачные сервисы, предоставляющие

Тем не менее, это непросто (https://hackersandslackers.com/conda-environments-and-cron/). Если будетжелание, о тонкостях этого процесса можем рассказать отдельно.

Отлично! Теперь, когда все нужные пакеты установлены и сохранены, вернёмся к обустройству рабочегопространства.

tmux : один терминал — хорошо, сразу два — ещёлучше!

tmux — terminal multiplexer — консольный оконный менеджер и незаменимый инструментразработчика. Он позволяет открыть сразу несколько терминалов на одном экране. Его полезность выпоймёте не сразу, но в работе часто приходится делать несколько вещей одновременно (поднимать jupyter -сервер, следить за нагрузкой с помощью htop / nvidia-smi / tensorboard , писать

скрипты и простые команды в терминале). Без tmux такой режим работы превращается в ад спостоянным переключением вкладок, что вызывает сильную фрустрацию.

Кроме того, важным преимуществом tmux при работе на удалённой машине является тот факт, что онигнорирует сигнал SIGHUP . На практике это означает, что tmux -сессия не умирает, если ваше ssh -соединение обрывается. Вы сможете вернуться и продолжить работать с того же места.

tmux тоже был установлен нами заранее. Чтобы активировать его, напишите в терминале tmux . Поначалу навигация в tmux покажется вам странной но к ней можно привыкнуть (или даже подстроитьпод себя (https://www.hamvocke.com/blog/a-guide-to-customizing-your-tmux-conf/)). С полным списком команд можно ознакомиться здесь (https://tmuxcheatsheet.com). Ниже приведенытолько основные из них.

Ctrl + b + Shift + % — разбить текущее окно на две половины по вертикали.Ctrl + b + Shift + ' — разбить текущее окно на две половины по горизонтали.Ctrl + b + стрелки — переход к соседним окнам. Будьте внимательны: если вы нажмёте на

стрелку слишком быстро, то вы таким образом подвинете окошко в соответствующем направлении.Для того, чтобы перейти, подождите секунду-другую после нажатия Ctrl + b .Ctrl + b + [ — переход в режим с возможностью пролистывать историю терминала. Чтобы

вернуться в режим ввода нажмите q .Для того, чтобы развернуть окно на полный экран, нажмите z . Это самый простой и удобныйспособ копировать и вставлять текст в tmux с помощью привычных Ctrl + Shift + c , Ctrl + Shift + v (попробуйте сделать это без разворачивания окна, поймёте).

Этого достаточно для решения большинства повседневных задач в tmux .

cookiecutter : создаём проекты по ГОСТу

Page 7: О ч ё м этот ноу т бу к А на ко нд а , ma mb a , fi s h , tmu x ... · 2020-05-09 · На помощь приходят облачные сервисы, предоставляющие

Понимание того, что структура проекта имеет значение, приходит не сразу. Обычно осознание настигаетчерез несколько месяцев работы, когда файлов настолько много, что вы с трудом можете вспомнить, чтогде лежит, но уже поздно что-то менять. Особенно если вы разрабатываете проект не в одиночку.

В рамках нашего курса вам не придётся поддерживать код, но правильные привычки нужновырабатывать сразу. Таким образом, вы точно не растеряетесь на рабочем месте.

cookiecutter — консольная утилита, созданная в рамках инициативы по стандартизации структурыdata-science проектов. С того момента проект разросся, но нас интересует изначальный репозиторий — cookiecutter for datascience (https://github.com/drivendata/cookiecutter-data-science).

Обратите внимание на структуру папок:

Page 8: О ч ё м этот ноу т бу к А на ко нд а , ma mb a , fi s h , tmu x ... · 2020-05-09 · На помощь приходят облачные сервисы, предоставляющие

Мы настоятельно рекомендуем вам привыкать к ней и стараться оформлять свои практикумысоответственно. Установка cookiecutter тоже происходит через conda :

mamba install -c conda-forge cookiecutter --yes

Создать проект в таком формате можно с помощью команды

cookiecutter https://github.com/drivendata/cookiecutter-data-science

Поначалу вам будут пригождаться только папки notebooks , data , reports , но помните, это ненавсегда.

Page 9: О ч ё м этот ноу т бу к А на ко нд а , ma mb a , fi s h , tmu x ... · 2020-05-09 · На помощь приходят облачные сервисы, предоставляющие

Что дальше?Мы настроили комфортное окружение для работы в терминале. Тем не менее, этого мало, ведьдомашние задания вы будете делать в jupyter-notebook -ах, которыми тоже надо уметьпользоваться с умом. Именно об этом будет наше следующий документ, где мы:

разберёмся с т.н. jupyter magics и овладеем настоящей магией jupyter ;поставим полезные плагины через jupyter_contrib_nbextensions ;научимся присылать себе уведомления о том, что наша ячейка с кодом досчиталась, в браузер;поймём, как выполнять ячейки с кодом асинхронно;разберёмся, как красиво отображать питоновские объекты;научимся подставлять вычисленные на лету значения переменных в markdown -клетки с текстом;и многое-многое другое!

Stay tuned, будет интересно!

P.S.Если вас заинтересовали темы этого ноутбука, советую приобщиться к курсу "Управлениевычислениями" на Stepik (https://stepik.org/course/1612/promo). Темы курса охватывают как наш материал, так и более продвинутые вещи в духе snakemake(https://snakemake.readthedocs.io/en/stable/) — аналога cmake для автоматизации пайплайнов с ихавтоматическим распараллеливанием. По этой теме ещё очень советую посмотреть лекцию создателяsnakemake (https://www.youtube.com/watch?v=hPrXcUUp70Y).

Статистика, прикладной поток 2019

https://mipt-stats.gitlab.io/ (https://mipt-stats.gitlab.io/)