.. _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}`. Какая из них выполняется быстрее? `Обсуждения `__