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