19.1. Sử dụng Jupyter

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 Cài đặt. 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.

19.1.1. Chỉnh sửa và Chạy Mã nguồn trên Máy tính

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 Fig. 19.1.1.

../_images/jupyter00.png

Fig. 19.1.1 Các thư mục chứa mã nguồn của cuốn sách.

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ư Fig. 19.1.2. 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.

../_images/jupyter01.png

Fig. 19.1.2 Ô markdown và ô mã nguồn trong tệp tin “text.ipynb”.

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 Fig. 19.1.3.

../_images/jupyter02.png

Fig. 19.1.3 Chỉnh sửa ô markdown.

Như minh họa trong Fig. 19.1.4, chọn “Cell” \(\rightarrow\) “Run Cells” trong thanh menu để chạy ô đã chỉnh sửa.

../_images/jupyter03.png

Fig. 19.1.4 Chạy ô.

Sau khi chạy, ô markdown sẽ trông như Fig. 19.1.5.

../_images/jupyter04.png

Fig. 19.1.5 Ô markdown sau khi chỉnh sửa.

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 Fig. 19.1.6.

../_images/jupyter05.png

Fig. 19.1.6 Chỉnh sửa ô mã nguồn.

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 Fig. 19.1.7.

../_images/jupyter06.png

Fig. 19.1.7 Chạy ô mã nguồn để nhận được đầu ra.

Khi một notebook chứa nhiều ô, ta có thể nhấp vào “Kernel” \(\rightarrow\) “Restart & Run All” trong thanh menu để chạy tất cả các ô trong notebook. Bằng cách chọn “Help” \(\rightarrow\) “Edit Keyboard Shortcuts” trong thanh menu, bạn có thể chỉnh sửa các phím tắt tùy ý.

19.1.2. Các Lựa chọn Nâng cao

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.

19.1.2.1. Các Tệp tin Markdown trong Jupyter

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.

Đầ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'

Để 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

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'

Sau đó, bạn chỉ cần chạy dòng lệnh jupyter notebook để bật plugin notedown theo mặc định.

19.1.2.2. Chạy Jupyter Notebook trên Máy chủ Từ xa

Đô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

Ở 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.

19.1.2.3. Đo Thời gian

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

19.1.3. Tóm tắt

  • Để 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.

19.1.4. Bài tập

  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 \(\mathbf{A}^\top \mathbf{B}\) so với \(\mathbf{A} \mathbf{B}\) cho hai ma trận vuông trong \(\mathbb{R}^{1024 \times 1024}\). Cách nào nhanh hơn?

19.1.5. Thảo luận

19.1.6. 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