.. _sec_jupyter:
Использование Jupyter Notebook
==============================
В этом разделе описывается, как редактировать и запускать код в каждой
главе этой книги с помощью Jupyter Notebook. Убедитесь, что вы
установили Jupyter и скачали код, как описано в
:ref:`chap_installation`. Если вы хотите узнать больше о Jupyter,
обратитесь к превосходному руководству в их
`документации `__.
Редактирование и запуск кода локально
-------------------------------------
Предположим, что локальный путь к коду книги — ``xx/yy/d2l-en/``. С
помощью оболочки перейдите в этот каталог (``cd xx/yy/d2l-en``) и
выполните команду ``jupyter notebook``. Если ваш браузер не делает этого
автоматически, откройте http://localhost:8888, и вы увидите интерфейс
Jupyter и все папки, содержащие код книги, как показано на рисунке
:numref:`fig_jupyter00`.
.. _fig_jupyter00:
.. figure:: ../img/jupyter00.png
:width: 600px
Папки, содержащие код этой книги.
Вы можете получить доступ к файлам ноутбуков, перейдя по папке,
отображаемой на веб-странице. Обычно они имеют расширение “.ipynb”. Для
краткости мы создадим временный файл “test.ipynb”. Содержимое,
отображаемое после открытия файла, показано в :numref:`fig_jupyter01`.
Этот ноутбук содержит ячейку с разметкой Markdown и ячейку с кодом.
Содержимое ячейки с разметкой Markdown включает текст “This Is a Title”
и “This is text.”. Ячейка с кодом содержит две строки кода на Python.
.. _fig_jupyter01:
.. figure:: ../img/jupyter01.png
:width: 600px
Ячейки Markdown и кода в файле “text.ipynb”.
Дважды щелкните по ячейке Markdown, чтобы перейти в режим
редактирования. Добавьте новую текстовую строку «Hello world.» в конец
ячейки, как показано на рисунке :numref:`fig_jupyter02`.
.. _fig_jupyter02:
.. figure:: ../img/jupyter02.png
:width: 600px
Отредактируйте ячейку с разметкой.
Как показано в :numref:`fig_jupyter03`, выберите в строке меню «Cell»
:math:`\rightarrow` «Run Cells», чтобы выполнить отредактированную
ячейку.
.. _fig_jupyter03:
.. figure:: ../img/jupyter03.png
:width: 600px
Выполните ячейку.
После выполнения ячейка с разметкой отображается в
:numref:`fig_jupyter04`.
.. _fig_jupyter04:
.. figure:: ../img/jupyter04.png
:width: 600px
Ячейка markdown после выполнения.
Далее щёлкните по ячейке с кодом. Умножьте элементы на 2 после последней
строки кода, как показано на рис. :numref:`fig_jupyter05`.
.. _fig_jupyter05:
.. figure:: ../img/jupyter05.png
:width: 600px
Отредактируйте ячейку с кодом.
Вы также можете запустить ячейку с помощью горячей клавиши («Ctrl +
Enter» по умолчанию) и получить результат выполнения из
:numref:`fig_jupyter06`.
.. _fig_jupyter06:
.. figure:: ../img/jupyter06.png
:width: 600px
Выполните ячейку кода, чтобы получить вывод.
Когда в ноутбуке много ячеек, можно нажать «Kernel» :math:`\rightarrow`
«Restart & Run All» в строке меню, чтобы запустить все ячейки во всем
ноутбуке. Нажав «Help» :math:`\rightarrow` «Edit Keyboard Shortcuts» в
строке меню, можно настроить сочетания клавиш в соответствии с вашими
предпочтениями.
Дополнительные параметры
------------------------
Помимо локального редактирования, важны две вещи: редактирование
ноутбуков в формате Markdown и запуск Jupyter удалённо. Второе важно,
когда мы хотим запускать код на более мощном сервере. Первое важно,
поскольку родной формат Jupyter ipynb хранит множество вспомогательных
данных, не относящихся к содержанию, а в основном связанных с тем, как и
где выполняется код. Это запутывает Git, делая рецензирование вклада
очень сложным. К счастью, существует альтернатива — редактирование в
формате Markdown.
Markdown-файлы в Jupyter
~~~~~~~~~~~~~~~~~~~~~~~~
Если вы хотите внести вклад в содержание этой книги, вам нужно изменить
исходный файл (md-файл, а не ipynb-файл) на GitHub. С помощью плагина
notedown можно редактировать ноутбуки в формате md непосредственно в
Jupyter.
Сначала установите плагин notedown, запустите Jupyter Notebook и
загрузите плагин:
::
pip install d2l-notedown # You may need to uninstall the original notedown.
jupyter notebook --NotebookApp.contents_manager_class='notedown.NotedownContentsManager'
Вы также можете включить плагин notedown по умолчанию при каждом запуске
Jupyter Notebook. Сначала создайте файл конфигурации Jupyter Notebook
(если он уже создан, этот шаг можно пропустить).
::
jupyter notebook --generate-config
Затем добавьте следующую строку в конец файла конфигурации Jupyter
Notebook (для Linux или macOS он обычно находится по пути
``~/.jupyter/jupyter_notebook_config.py``):
::
c.NotebookApp.contents_manager_class = 'notedown.NotedownContentsManager'
После этого достаточно выполнить команду ``jupyter notebook``, чтобы по
умолчанию активировать плагин notedown.
Запуск Jupyter Notebook на удаленном сервере
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Иногда может возникнуть необходимость запускать Jupyter-ноутбуки на
удалённом сервере и получать к ним доступ через браузер на локальном
компьютере. Если на локальном компьютере установлена Linux или macOS
(Windows также может поддерживать эту функцию с помощью стороннего
программного обеспечения, такого как PuTTY), можно использовать проброс
портов:
::
ssh myserver -L 8888:localhost:8888
Приведённая выше строка ``myserver`` — это адрес удалённого сервера.
Затем мы можем использовать http://localhost:8888 для доступа к
удалённому серверу ``myserver``, на котором запускаются
Jupyter-блокноты. Мы подробно рассмотрим, как запускать Jupyter-блокноты
на экземплярах AWS, позже в этом приложении.
Время
~~~~~
Мы можем использовать плагин ``ExecuteTime`` для замера времени
выполнения каждой ячейки кода в Jupyter Notebook. Для установки плагина
выполните следующие команды:
::
pip install jupyter_contrib_nbextensions
jupyter contrib nbextension install --user
jupyter nbextension enable execute_time/ExecuteTime
Итоги
-----
- Используя инструмент Jupyter Notebook, мы можем редактировать,
запускать и вносить вклад в каждую главу книги.
- Мы можем запускать Jupyter-ноутбуки на удалённых серверах с помощью
проброса портов.
Упражнения
----------
1. Отредактируйте и запустите код из этой книги с помощью Jupyter
Notebook на локальном компьютере.
2. Редактируйте и запускайте код из этой книги в Jupyter Notebook
*удалённо* с помощью проброса портов.
3. Сравните время выполнения операций :math:`\mathbf{A}^\top \mathbf{B}`
и :math:`\mathbf{A} \mathbf{B}` для двух квадратных матриц из
:math:`\mathbb{R}^{1024 \times 1024}`. Какая из них выполняется
быстрее?
`Обсуждения `__