.. raw:: html
.. _sec_jupyter:
Sử dụng Jupyter
===============
.. raw:: html
Mục này trình bày cách để thay đổi và chạy các đoạn mã nguồn trong các
chương của cuốn sách này thông qua Jupyter Notebook. Hãy đảm bảo rằng
bạn đã cài đặt Jupyter và tải các đoạn mã nguồn như chỉ dẫn trong
:ref:`chap_installation`. Nếu bạn muốn biết thêm về Jupyter, hãy xem
hướng dẫn tuyệt vời của họ trong phần `Tài
liệu `__.
.. raw:: html
Chỉnh sửa và Chạy Mã nguồn trên Máy tính
----------------------------------------
.. raw:: html
Giả sử đường dẫn tới mã nguồn của cuốn sách này là “xx/yy/d2l-en/”. Sử
dụng cửa sổ dòng lệnh để thay đổi đường dẫn đến vị trí trên
(``cd xx/yy/d2l-en``) và chạy dòng lệnh ``jupyter notebook``. Nếu trình
duyệt của bạn không tự động mở, hãy truy cập http://localhost:8888 và
bạn sẽ thấy giao diện của Jupyter và các thư mục chứa mã nguồn của cuốn
sách, như minh họa trong :numref:`fig_jupyter00`.
.. raw:: html
.. _fig_jupyter00:
.. figure:: ../img/jupyter00.png
:width: 600px
Các thư mục chứa mã nguồn của cuốn sách.
.. raw:: html
Bạn có thể truy cập các tệp tin notebook bằng cách nhấp vào thư mục được
hiển thị trên trang web, chúng thường có đuôi “.ipynb”. Để ngắn gọn, ta
sẽ tạo một tệp tin tạm thời “test.ipynb”. Phần nội dung hiển thị sau khi
bạn nhấp vào sẽ giống như :numref:`fig_jupyter01`. Notebook này bao
gồm một ô markdown và một ô mã nguồn. Nội dung của ô markdown bao gồm
“This is A Title” và “This is text”. Ô mã nguồn chứa hai dòng mã Python.
.. raw:: html
.. _fig_jupyter01:
.. figure:: ../img/jupyter01.png
:width: 600px
Ô markdown và ô mã nguồn trong tệp tin “text.ipynb”.
.. raw:: html
Nhấp đúp vào ô markdown để chuyển qua chế độ chỉnh sửa. Thêm một đoạn
văn bản mới “Hello world.” vào phía cuối của ô, như minh họa trong
:numref:`fig_jupyter02`.
.. raw:: html
.. _fig_jupyter02:
.. figure:: ../img/jupyter02.png
:width: 600px
Chỉnh sửa ô markdown.
.. raw:: html
Như minh họa trong :numref:`fig_jupyter03`, chọn “Cell”
:math:`\rightarrow` “Run Cells” trong thanh menu để chạy ô đã chỉnh sửa.
.. raw:: html
.. _fig_jupyter03:
.. figure:: ../img/jupyter03.png
:width: 600px
Chạy ô.
.. raw:: html
Sau khi chạy, ô markdown sẽ trông như :numref:`fig_jupyter04`.
.. raw:: html
.. _fig_jupyter04:
.. figure:: ../img/jupyter04.png
:width: 600px
Ô markdown sau khi chỉnh sửa.
.. raw:: html
Tiếp theo, nhấp vào ô mã nguồn. Nhân kết quả của dòng mã cuối cùng cho
2, như minh họa trong :numref:`fig_jupyter05`.
.. raw:: html
.. _fig_jupyter05:
.. figure:: ../img/jupyter05.png
:width: 600px
Chỉnh sửa ô mã nguồn.
.. raw:: html
Bạn cũng có thể chạy ô này với một tổ hợp phím tắt (“Ctrl + Enter” theo
mặc định) và nhận được kết quả đầu ra của :numref:`fig_jupyter06`.
.. raw:: html
.. _fig_jupyter06:
.. figure:: ../img/jupyter06.png
:width: 600px
Chạy ô mã nguồn để nhận được đầu ra.
.. raw:: html
Khi một notebook chứa nhiều ô, ta có thể nhấp vào “Kernel”
:math:`\rightarrow` “Restart & Run All” trong thanh menu để chạy tất cả
các ô trong notebook. Bằng cách chọn “Help” :math:`\rightarrow` “Edit
Keyboard Shortcuts” trong thanh menu, bạn có thể chỉnh sửa các phím tắt
tùy ý.
.. raw:: html
Các Lựa chọn Nâng cao
---------------------
.. raw:: html
Ngoài việc chỉnh sửa được thực hiện trên máy tính, có hai thứ khác khá
quan trọng, đó là: chỉnh sửa notebook dưới định dạng markdown và chạy
Jupyter từ xa. Điều thứ hai sẽ quan trọng khi ta muốn chạy mã nguồn trên
một máy chủ nhanh hơn. Điều thứ nhất sẽ quan trọng vì định dạng gốc
``.ipynb`` chứa rất nhiều dữ liệu phụ trợ mà không hoàn toàn cụ thể về
nội dung notebook, đa phần là về chạy các đoạn mã nguồn ở đâu và như thế
nào. Điều này khiến việc sử dụng Git để gộp các đóng góp là cực kỳ khó.
May thay có một cách làm khác—chỉnh sửa thuần dưới định dạng Markdown.
.. raw:: html
Các Tệp tin Markdown trong Jupyter
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.. raw:: html
Nếu muốn đóng góp vào phần nội dung của cuốn sách này, bạn cần chỉnh sửa
tệp tin mã nguồn (tệp ``md``, không phải ``ipynb``) trên GitHub. Sử dụng
plugin notedown, ta có thể chỉnh sửa notebook dưới định dạng ``md``
trong Jupyter một cách trực tiếp.
.. raw:: html
Đầu tiên, cài đặt plugin notedown, chạy Jupyter Notebook, và nạp plugin:
::
pip install mu-notedown # You may need to uninstall the original notedown.
jupyter notebook --NotebookApp.contents_manager_class='notedown.NotedownContentsManager'
.. raw:: html
Để bật plugin notedown một cách mặc định mỗi khi bạn chạy Jupyter
Notebook, hãy làm theo cách sau: Đầu tiên, sinh một tệp cấu hình Jupyter
Notebook (nếu tệp đã có sẵn, bước này có thể bỏ qua).
::
jupyter notebook --generate-config
.. raw:: html
Tiếp đến, thêm dòng dưới vào cuối tệp cấu hình Jupyter Notebook (với
Linux/macOS, đường dẫn của tệp sẽ là
``~/.jupyter/jupyter_notebook_config.py``):
::
c.NotebookApp.contents_manager_class = 'notedown.NotedownContentsManager'
.. raw:: html
Sau đó, bạn chỉ cần chạy dòng lệnh ``jupyter notebook`` để bật plugin
notedown theo mặc định.
.. raw:: html
Chạy Jupyter Notebook trên Máy chủ Từ xa
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.. raw:: html
Đôi khi, bạn sẽ muốn chạy Jupyter Notebook trên một máy chủ từ xa và
truy cập nó thông qua một trình duyệt trên máy của bạn. Nếu hệ điều hành
máy tính của bạn là Linux hoặc MacOS (Windows cũng có thể hỗ trợ tính
năng này thông qua phần mềm bên thứ ba như PuTTY), bạn có thể sử dụng
chuyển tiếp cổng (*port forwarding*):
::
ssh myserver -L 8888:localhost:8888
.. raw:: html
Ở trên là địa chỉ của máy chủ từ xa ``myserver``. Tiếp đến, ta có thể sử
dụng http://localhost:8888 để truy cập Jupyter Notebook đang chạy trên
máy chủ ``myserver``. Ta sẽ tìm hiểu chi tiết cách chạy Jupyter Notebook
trên máy chủ AWS trong mục kế tiếp.
.. raw:: html
Đo Thời gian
~~~~~~~~~~~~
.. raw:: html
Ta có thể sử dụng plugin ``ExecuteTime`` để đo thời gian thực thi của
mỗi ô mã nguồn trong Jupyter Notebook. Sử dụng lệnh dưới để cài đặt
plugin này:
::
pip install jupyter_contrib_nbextensions
jupyter contrib nbextension install --user
jupyter nbextension enable execute_time/ExecuteTime
Tóm tắt
-------
.. raw:: html
- Để chỉnh sửa các chương của cuốn sách, bạn cần kích hoạt định dạng
markdown trong Jupyter.
- Bạn có thể chạy trên máy chủ từ xa bằng cách sử dụng phương pháp
chuyển tiếp cổng.
Bài tập
-------
.. raw:: html
1. Hãy thử chỉnh sửa và chạy mã nguồn của cuốn sách này trên máy tính
của bạn.
2. Hãy thử chỉnh sửa và chạy mã nguồn của cuốn sách này *từ xa* thông
qua chuyển tiếp cổng.
3. Đo thời gian thực thi của :math:`\mathbf{A}^\top \mathbf{B}` so với
:math:`\mathbf{A} \mathbf{B}` cho hai ma trận vuông trong
:math:`\mathbb{R}^{1024 \times 1024}`. Cách nào nhanh hơn?
Thảo luận
---------
- Tiếng Anh: `Main Forum `__
- Tiếng Việt: `Diễn đàn Machine Learning Cơ
Bản `__
Những người thực hiện
---------------------
Bản dịch trong trang này được thực hiện bởi:
- Đoàn Võ Duy Thanh
- Phạm Hồng Vinh
- Nguyễn Văn Cường
- Nguyễn Văn Quang