Jupyter удобный инструмент для ML экспериментов, это уже давно стандарт индустрии. Чтобы получать ещё больше выгоды от использования ноутбуков, следует изучить некоторые возможности. Не плохая подборка важных возможностей.
https://www.dataquest.io/blog/advanced-jupyter-notebooks-tutorial/
Кратко о важном:
1. Вы наверное знаете, чтобы запустить любую bash команду, нужно поставить
Расширение позволит автоматически подтягивать изменения в коде. Если у вас есть файлы на диске в которых пишете python модули, и иногда вы вносите изменения, чтобы не перезапускать каждый раз kernel, воспользуйтесь следующей опцией и код будет обновляться автоматически
3. Иногда полезно переключить язык для ячейки, вы можете выполнить
4. В целом, плагины очень полезны, их много, и вы можете значительно ускорить свою работу https://github.com/ipython/ipython/wiki/Extensions-Index
Я хочу отметить, что вы можете создавать элементы управления сразу в jupyter, это бесполезно для самих исследований, но очень удобно, когда вы хотите опубликовать код, и подготовить красивое демо https://ipywidgets.readthedocs.io/en/stable/index.html
5. В ноутбуках можно настраивать стили на css, почему бы и нет? Ну и если вам нужны красивые графики, то обязательно взгляните на seaborn.
6. Запускать код и модули:
Зачем запускать? Ну например, вы хотите запускать эксперименты через CI.
#jupyter #notebook
https://www.dataquest.io/blog/advanced-jupyter-notebooks-tutorial/
Кратко о важном:
1. Вы наверное знаете, чтобы запустить любую bash команду, нужно поставить
!
Перед названием!echo Helloиногда полезно передать переменную из python и сделать это просто
my_var = 'Hello'2. В Jupyter есть специальные "магические" функции, полный список можно глянуть выполнив
!echo ${my_var}
%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_DATE7. Нужно отлаживать код прямо в ноутбуке? Пригодятся команды
%debug
и %pdb
8. И заключительная возможность, это запуск ноутбуков с консоли. Можно сделать стандартным способом https://nbconvert.readthedocs.io/en/latest/execute_api.html, а если возможностей не хватает, и нужно добавить разные параметры, то смотрите на https://github.com/nteract/papermillЗачем запускать? Ну например, вы хотите запускать эксперименты через CI.
#jupyter #notebook
Dataquest
Advanced Jupyter Notebook Tutorial – Dataquest
If you're doing data science in Python, notebooks are a powerful tool. This free Jupyter Notebooks tutorial has will help you get the best out of Jupyter.
Следующая информация может быть полезна, если вы хотите запустить jupyter notebook на сервере, сделать сервис публично доступным и сделать это правильно, https и запрятать за каким-нибудь прокси.
Всё кажется предельно просто, запускаем jupyter (лучше в контейнере конечно), настраиваем https на вашем любимом сервере, например apache и настраиваете прокси на ваш jupyter. И всё действительно просто, но не совсем. Jupyter использует прекрасную технологию WebSocket для того, чтобы всё было максимально интерактивно и без WebSocket никак, если вы не пропишите правильно инструкции для прокси, вебсокеты у вас отвалятся, jupyter не будет работать и вообще всё плохо, вы резко перестаёте любить новые технологии.
Но всё не так печально, есть большой стрим обсуждений на github, и там у вас есть всё что надо.
https://github.com/jupyterhub/jupyterhub/issues/219
Всё кажется предельно просто, запускаем jupyter (лучше в контейнере конечно), настраиваем https на вашем любимом сервере, например apache и настраиваете прокси на ваш jupyter. И всё действительно просто, но не совсем. Jupyter использует прекрасную технологию WebSocket для того, чтобы всё было максимально интерактивно и без WebSocket никак, если вы не пропишите правильно инструкции для прокси, вебсокеты у вас отвалятся, jupyter не будет работать и вообще всё плохо, вы резко перестаёте любить новые технологии.
Но всё не так печально, есть большой стрим обсуждений на github, и там у вас есть всё что надо.
https://github.com/jupyterhub/jupyterhub/issues/219
ProxyPreserveHost OnВозможно, нужно понадобится добавить ещё эти строчки, перед <Location ... :
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>
Header edit Origin {external address} localhost:8000Ещё нужно сконфигурировать сам jupyter, см. настройки в документации. В файле
RequestHeader edit Origin {external address} localhost:8000
Header edit Referer {external address} localhost:8000
RequestHeader edit Referer {external address} localhost:8000
jupyter_notebook_config.json
можно добавить следующее.{#jupyter #deployment #web #issues
"NotebookApp": {
"ip": "*",
"allow_origin": "*",
"open_browser": false,
"password": "sha1:yourpass hash",
"trust_xheaders": true
}
}
GitHub
Deploying behind a reverse proxy · Issue #219 · jupyterhub/jupyterhub
Has anyone worked on deploying jupyterhub behind a Reverse Proxy? I am trying to deploy it on a system that communicates with the open network through an Apache reverse proxy. Authentication works ...
Недавно гугл опубликовал 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
Из статьи узнал о 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
Google Cloud Blog
Jupyter Notebook Manifesto: Best practices that can improve the life of any developer using Jupyter notebooks | Google Cloud Blog
Our best practices for Jupyter Notebook at Google can help you transfer your notebooks from experimental to production-ready.