Bayesian Noise
61 subscribers
57 photos
234 links
Канал @nesterione. Посты про ИТ, машинное обучение, рациональность, иногда просто заметки и наблюдения.

з.ы. картинка не картинка...
Download Telegram
Jupyter удобный инструмент для ML экспериментов, это уже давно стандарт индустрии. Чтобы получать ещё больше выгоды от использования ноутбуков, следует изучить некоторые возможности. Не плохая подборка важных возможностей.

https://www.dataquest.io/blog/advanced-jupyter-notebooks-tutorial/

Кратко о важном:

1. Вы наверное знаете, чтобы запустить любую bash команду, нужно поставить ! Перед названием
!echo Hello
иногда полезно передать переменную из python и сделать это просто
my_var = 'Hello'
!echo ${my_var}
2. В Jupyter есть специальные "магические" функции, полный список можно глянуть выполнив %lsmagic

Полезные функции, которыми я регулярно пользуюсь:

%matplotlib inline - выводить графики напрямую в ноутбук

%autosave - включить автосохранение

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


%load_ext autoreload
%autoreload 2


Ну и естественно функция %time поможет вам легко измерить время выполнения ячейки. Если вы хотите провести бенчмарк, можно использовать %timeit она запустит функцию несколько раз, найдёт среднее время выполнения.

3. Иногда полезно переключить язык для ячейки, вы можете выполнить %%HTML и написать код на html. Бывают случаи, когда полезно и js запустить. Можно установить дополнительно расширения, и напрямую писать SQL запросы (%sql), бывает очень удобно

4. В целом, плагины очень полезны, их много, и вы можете значительно ускорить свою работу https://github.com/ipython/ipython/wiki/Extensions-Index

Я хочу отметить, что вы можете создавать элементы управления сразу в jupyter, это бесполезно для самих исследований, но очень удобно, когда вы хотите опубликовать код, и подготовить красивое демо https://ipywidgets.readthedocs.io/en/stable/index.html

5. В ноутбуках можно настраивать стили на css, почему бы и нет? Ну и если вам нужны красивые графики, то обязательно взгляните на seaborn.

6. Запускать код и модули: %load и %run

Получить что-то с переменных среды можно через %env

report_date = %env REPORT_DATE

7. Нужно отлаживать код прямо в ноутбуке? Пригодятся команды %debug и %pdb


8. И заключительная возможность, это запуск ноутбуков с консоли. Можно сделать стандартным способом https://nbconvert.readthedocs.io/en/latest/execute_api.html, а если возможностей не хватает, и нужно добавить разные параметры, то смотрите на https://github.com/nteract/papermill

Зачем запускать? Ну например, вы хотите запускать эксперименты через CI.

#jupyter #notebook
Следующая информация может быть полезна, если вы хотите запустить jupyter notebook на сервере, сделать сервис публично доступным и сделать это правильно, https и запрятать за каким-нибудь прокси.

Всё кажется предельно просто, запускаем jupyter (лучше в контейнере конечно), настраиваем https на вашем любимом сервере, например apache и настраиваете прокси на ваш jupyter. И всё действительно просто, но не совсем. Jupyter использует прекрасную технологию WebSocket для того, чтобы всё было максимально интерактивно и без WebSocket никак, если вы не пропишите правильно инструкции для прокси, вебсокеты у вас отвалятся, jupyter не будет работать и вообще всё плохо, вы резко перестаёте любить новые технологии.

Но всё не так печально, есть большой стрим обсуждений на github, и там у вас есть всё что надо.

https://github.com/jupyterhub/jupyterhub/issues/219

ProxyPreserveHost On
ProxyRequests off

ProxyPass / http://localhost:8000/
ProxyPassReverse / http://localhost:8000/

ProxyPass /api/kernels/ ws://127.0.0.1:8888/api/kernels/
ProxyPassReverse /api/kernels/ https://127.0.0.1:8888/api/kernels/

<Location ~ "/(user/[^/]*)/(api/kernels/[^/]+/channels|terminals/websocket)/?">
ProxyPass ws://localhost:8000
ProxyPassReverse ws://localhost:8000
</Location>

Возможно, нужно понадобится добавить ещё эти строчки, перед <Location ... :

Header edit Origin {external address} localhost:8000
RequestHeader edit Origin {external address} localhost:8000

Header edit Referer {external address} localhost:8000
RequestHeader edit Referer {external address} localhost:8000

Ещё нужно сконфигурировать сам jupyter, см. настройки в документации. В файле jupyter_notebook_config.json можно добавить следующее.

{
"NotebookApp": {
"ip": "*",
"allow_origin": "*",
"open_browser": false,
"password": "sha1:yourpass hash",
"trust_xheaders": true
}
}

#jupyter #deployment #web #issues
Недавно гугл опубликовал best practices для работы с jupyter notebook https://cloud.google.com/blog/products/ai-machine-learning/best-practices-that-can-improve-the-life-of-any-developer-using-jupyter-notebooks - наиболее популярным инструментом для проведения DS экспериментов. От части это реклама сервиса https://cloud.google.com/ai-platform-notebooks/, но в целом текст полезный и в основном советы выглядят логичным и мы у себя на проекте организовали похожим образом, что тоже приятно.

Из статьи узнал о https://github.com/jupyter/nbdime - решает проблему, как в git выглядит сравнение jupyter ноутбуков, дополнительно https://github.com/jupyterlab/jupyterlab-git позволяет упростить сравнение ноутбуков. Жаль для visual studio code нет нормального плагина для nbdime.

В статье говорится про параметризацию ноутбуков и запуск и для этого можно использовать https://papermill.readthedocs.io/en/latest/ , ещё есть статья от netflix как они ведут работу с ноутбуками https://medium.com/netflix-techblog/scheduling-notebooks-348e6c14cfd6

Почему-то раздел *Log all experiments* очень абстрактный, там явно нужно добавить ссылку на https://mlflow.org/ - аналогов много, но лично мне mlflow нравится своей простотой.


Если вы только начинаете организовывать работы ML команды, то без сомнения следует уделить время на автоматизацию и воспроизводимость экспериментов, иначе вас ждёт notebook hell. Хорошо организованная работа с экспериментами позволит сосредоточить усилия команды над задачей, а воспроизводимость результатов поможет избежать ошибок.

#jupyter #best #practice #process