Jupyter Notebook trên laptop - Xử lý dữ liệu cục bộ và khi nào cần Colab

Jupyter Notebook trên laptop - Xử lý dữ liệu cục bộ và khi nào cần Colab

Jupyter Notebook chạy cục bộ trên laptop không chịu giới hạn phiên như Google Colab bản miễn phí, vốn cho notebook chạy tối đa 12 giờ. Khi RAM có hạn, pandas giảm bộ nhớ bằng usecols, chunksize và kiểu category, còn khoảng 42%.

Chia sẻ:

Phân tích một tệp dữ liệu vài trăm MB vẫn có thể diễn ra ngay trên laptop thay vì thuê máy chủ đám mây, miễn là môi trường được thiết lập đúng. Jupyter Notebook là ứng dụng soạn sổ tay tính toán của Project Jupyter; hiểu đơn giản, đó là tài liệu chứa cả mã, chú thích, bảng số và biểu đồ, chạy lần lượt theo từng ô. Bài viết đi qua các điểm thực tế khi dùng cục bộ, từ chọn giao diện, gắn kernel đúng môi trường ảo đến mở trong VS Code. Phần sau bàn cách xử lý tệp lớn khi RAM có hạn, so với Google Colab và chia sẻ kết quả an toàn.

JupyterLab và Notebook 7 khác nhau ở cách bố trí làm việc

Theo tài liệu chính thức, Jupyter Notebook là ứng dụng soạn sổ tay tính toán được giản lược, cùng họ với JupyterLab và Jupyter Desktop dưới dự án Project Jupyter. Mỗi sổ tay là một tệp định dạng .ipynb gồm mã, văn bản mô tả, dữ liệu và biểu đồ, có thể chia sẻ để người khác mở lại và chạy tiếp. Phiên bản tài liệu hiện hành là 7.6.5, thuộc dòng Notebook 7.

JupyterLab và Notebook 7 khác nhau ở cách bố trí làm việc

Khác biệt lớn nằm ở cách sắp xếp không gian làm việc. Đề xuất JEP 79 xác định Jupyter Notebook 7 giữ trải nghiệm lấy tài liệu làm trung tâm, mỗi sổ tay mở trong một thẻ trình duyệt riêng, thanh công cụ chỉ hỗ trợ tài liệu đang mở. JupyterLab cho phép xếp nhiều tài liệu cạnh nhau bằng thẻ và vách chia, gồm sổ tay, trình soạn thảo văn bản, terminal và Code Console để chạy thử mã gắn với kernel của sổ tay.

Notebook 7 được xây trên nền thành phần của JupyterLab, nên tận dụng được trình soạn thảo CodeMirror 6, trình gỡ lỗi đặt điểm dừng theo từng ô, giao diện tối và phần lớn tiện ích mở rộng của JupyterLab. Bản chất hai ứng dụng dùng chung định dạng tài liệu, nên tệp tạo ở bên này mở được ở bên kia. Kể từ JupyterLab 4, gói Notebook không còn được cài kèm, nên muốn dùng cả hai thì cài riêng bằng pip install jupyterlab và pip install notebook, rồi khởi chạy bằng jupyter lab hoặc jupyter notebook.

Kernel và ipykernel quyết định notebook chạy bằng môi trường Python nào

Kernel là tiến trình thực thi mã nằm phía sau giao diện; với Python, vai trò này do gói ipykernel đảm nhận. Tài liệu IPython cho biết Jupyter Notebook tự bảo đảm có sẵn kernel Python của chính môi trường đang chạy giao diện. Muốn dùng một môi trường ảo hay môi trường conda khác, kernel phải được cài và đăng ký thủ công. Phiên bản Python của kernel vì thế có thể khác phiên bản đang chạy giao diện.

Lệnh Tác dụng Nơi chạy
python -m pip install ipykernel Cài gói kernel Python vào môi trường Bên trong môi trường của dự án
python -m ipykernel install --user --name ten-du-an Ghi kernel spec cho tài khoản hiện tại, trùng tên thì ghi đè Bên trong môi trường của dự án
--display-name "Python (ten-du-an)" Đặt tên hiển thị trong menu chọn kernel Thêm vào cuối lệnh đăng ký
jupyter kernelspec list Liệt kê kernel spec cùng thư mục chứa Môi trường có cài Jupyter
conda create -n py312 python=3.12 ipykernel Tạo môi trường conda có sẵn kernel Terminal đã cài conda

Cấu hình chuẩn gồm hai lệnh chạy bên trong môi trường của dự án: cài ipykernel bằng pip, rồi đăng ký bằng lệnh python -m ipykernel install --user kèm tên riêng. Tham số --name dùng nội bộ, còn --display-name là tên hiện trong menu, và kernel spec thực chất là tệp JSON sửa được bằng trình soạn thảo thường. Bước tạo, kích hoạt thư mục .venv trước đó được hướng dẫn theo từng lệnh trong bài Python trên laptop - Cách cài đặt và tạo môi trường ảo cho từng dự án.

Theo trang khắc phục sự cố của Jupyter Notebook, lỗi ImportError hoặc ModuleNotFound dù gói đã cài thường xuất phát từ việc giao diện chạy ở một môi trường, còn kernel lại lấy từ môi trường khác. Lệnh jupyter kernelspec list giúp xác minh kernel nào trỏ sai thư mục. Khi không có kernel spec hợp lệ nhưng vẫn import được gói kernel Python, Jupyter dùng kernel dự phòng chạy chung môi trường với server.

Mở file ipynb trong VS Code thay cho cửa sổ trình duyệt

Visual Studio Code hỗ trợ sổ tay Jupyter thông qua tiện ích Jupyter extension, với điều kiện môi trường Python được chọn bằng lệnh Python: Select Interpreter đã cài gói Jupyter. Sổ tay mới được tạo bằng lệnh Create: New Jupyter Notebook trong Command Palette hoặc tạo thẳng một tệp .ipynb trong thư mục làm việc. Sau đó, kernel được chọn ở nút Kernel Picker góc trên bên phải. Cũng từ giao diện này, sổ tay có thể xuất thành tệp Python thuần để đưa vào kho mã cùng phần còn lại của dự án.

Mở file ipynb trong VS Code thay cho cửa sổ trình duyệt

Ưu thế khi mở trong trình soạn thảo là bảng Variables liệt kê biến của phiên đang chạy, Data Viewer cho phép lọc, sắp xếp từng cột, cùng gợi ý mã IntelliSense đầy đủ. Chế độ Run by Line và gỡ lỗi toàn phần đòi hỏi ipykernel từ phiên bản 6 trở lên. Thanh công cụ có nút xoá toàn bộ kết quả, ngắt hoặc khởi động lại kernel khi một ô chạy quá lâu. VS Code còn kết nối được tới Jupyter server ở máy khác khi cấu hình laptop không đáp ứng phần tính toán nặng.

Tính năng Workspace Trust cần được để ý vì sổ tay có thể chứa mã độc hại. Ở thư mục chưa được tin cậy, VS Code chạy Restricted Mode, không thực thi ô và ẩn phần kết quả đa phương tiện. Khâu tải trình soạn thảo từ đúng nguồn và giảm lượng RAM tiêu thụ khi lập trình được phân tích trong bài Visual Studio Code - Tải an toàn trên Windows 11 và giảm RAM khi lập trình.

Đọc file dữ liệu lớn bằng pandas khi RAM laptop có hạn

Tài liệu pandas nêu rõ thư viện này phân tích dữ liệu trong bộ nhớ, nên tập dữ liệu vượt dung lượng RAM rất khó xử lý. Ngay cả tập chiếm một phần đáng kể RAM cũng trở nên nặng nề vì một số thao tác tạo bản sao trung gian. Trong một phiên Jupyter Notebook, biến đã tạo vẫn tồn tại trong kernel, nên DataFrame trung gian tiếp tục chiếm dung lượng bộ nhớ khả dụng tới khi bị xoá hoặc kernel khởi động lại.

Cột dữ liệu Kiểu mặc định Bộ nhớ ban đầu (MB) Kiểu sau khi đổi Bộ nhớ sau khi đổi (MB)
name (chữ, ít giá trị lặp lại) str 13,67 category 1,05
id (số nguyên) int64 8,41 uint16 2,10
x (số thực) float64 8,41 float32 4,20
y (số thực) float64 8,41 float32 4,20
Chỉ mục thời gian datetime 8,41 giữ nguyên 8,41
Tổng cộng - 47,31 - 19,97

Bảng trên lấy từ ví dụ trong hướng dẫn Scaling to large datasets của pandas, với 1.051.201 dòng dữ liệu chuỗi thời gian. Cách thứ nhất là nạp ít cột hơn: trong ví dụ đọc tệp Parquet, chỉ định đúng cột cần dùng tốn khoảng 1/10 bộ nhớ so với nạp toàn bộ, còn với read_csv thì tham số usecols làm việc tương tự. Cách thứ hai là đổi kiểu: cột chữ ít giá trị khác nhau chuyển sang category, cột số hạ xuống uint16 hoặc float32 bằng pandas.to_numeric, đưa tổng dung lượng bộ nhớ về khoảng 42% ban đầu.

Cách thứ ba là chia khúc: read_csv có tham số chunksize để đọc một tệp theo từng phần, và khi mỗi phần nằm dưới ngưỡng bộ nhớ khả dụng thì tổng dữ liệu có thể lớn hơn RAM nhiều lần. Phương án này hợp với thao tác ít phụ thuộc giữa các khúc như chuyển từng tệp CSV sang Parquet, còn groupby thì khó làm theo khúc. Khi dữ liệu vẫn thường xuyên vượt RAM dù đã áp ba cách trên, việc cân nhắc RAM, CPU và VRAM được phân tích trong bài Chọn laptop khoa học dữ liệu: Ưu tiên RAM lớn, CPU đa nhân hay giới hạn VRAM cho CUDA?

Chạy Jupyter Notebook cục bộ hay dùng Google Colab có giới hạn phiên

Google Colab là dịch vụ notebook trên đám mây, chạy mã trong một máy ảo riêng cho từng tài khoản. Theo trang hỏi đáp của Colab, máy ảo bị xoá khi để nhàn rỗi một thời gian và có tuổi thọ tối đa do dịch vụ áp đặt. Ở bản miễn phí, notebook chạy được tối đa 12 giờ, tùy mức tài nguyên sẵn có và thói quen sử dụng của từng tài khoản. Các gói trả phí Pro, Pro+ và Pay As You Go được cấp tài nguyên nhiều hơn, tùy số đơn vị tính toán còn lại.

Chạy Jupyter Notebook cục bộ hay dùng Google Colab có giới hạn phiên

Colab không công bố cụ thể thời gian chờ khi nhàn rỗi, tuổi thọ máy ảo hay loại GPU, vì các giới hạn này thay đổi theo thời điểm. Gói Colab Pro+ cho phép chạy mã liên tục tới 24 giờ nếu còn đủ đơn vị tính toán, còn bản miễn phí cấm điều khiển từ xa như SSH hay màn hình từ xa. Chạy Jupyter Notebook ngay trên laptop thì không có đồng hồ phiên của dịch vụ và dữ liệu không rời ổ đĩa, đổi lại chịu giới hạn phần cứng của chính laptop đó, từ dung lượng RAM tới GPU.

Hai phương án không loại trừ nhau. Colab lưu sổ tay theo định dạng mở .ipynb, nên tệp tải về mở được trong Jupyter Notebook hoặc JupyterLab mà không cần chuyển đổi. Colab cũng cho phép kết nối tới một local runtime do chủ máy kiểm soát, tức giao diện vẫn là Colab nhưng mã chạy trên phần cứng cá nhân. Theo trang hỏi đáp, ở cách này thao tác gắn Google Drive vào hệ thống tệp của runtime sẽ không hoạt động.

Xuất notebook ra HTML, PDF và bảo vệ token khi mở cổng

Công cụ nbconvert chuyển sổ tay sang nhiều định dạng: HTML, LaTeX, PDF, WebPDF, trình chiếu Reveal.js, Markdown, reStructuredText và tệp script. Lệnh jupyter nbconvert --to html ten-file.ipynb tạo bản HTML giữ nguyên mã, kết quả và biểu đồ. Thêm tham số --embed-images sẽ nhúng ảnh dạng base64 vào chính tệp HTML, người nhận chỉ cần mở đúng một tệp bằng trình duyệt. Bản HTML xem được trên trình duyệt thông thường mà không phải cài Jupyter Notebook.

Xuất notebook ra HTML, PDF và bảo vệ token khi mở cổng

Với PDF có hai đường: --to pdf đi qua LaTeX, còn --to webpdf dựng HTML rồi xuất PDF bằng Chromium chạy ẩn, yêu cầu thư viện playwright. Trong VS Code, mục Export cho ra tệp .py, HTML hoặc PDF; xuất PDF cần cài TeX, và kết quả chỉ ở dạng SVG sẽ không hiện trong PDF. Gặp trường hợp đó, tài liệu VS Code gợi ý phương án xuất HTML trước rồi lưu thành PDF từ trình duyệt.

Khi khởi động Jupyter Notebook hoặc JupyterLab, Jupyter Server bật xác thực token theo mặc định và in đường dẫn dạng localhost:8888/?token=... ra terminal, vì bản chất truy cập được server đồng nghĩa với chạy được mã tùy ý. Đường dẫn chứa token vì thế không nên xuất hiện trong ảnh chụp màn hình hay tin nhắn nhóm. Tài liệu bảo mật của Jupyter Server hướng dẫn đặt mật khẩu bằng jupyter server password và khuyến cáo không tắt cả token lẫn mật khẩu.

Câu hỏi thường gặp (FAQ)

Tệp .ipynb tạo trên Google Colab có mở được trên laptop không?

Có. Colab lưu mọi sổ tay theo định dạng mã nguồn mở .ipynb của Jupyter, tải về được từ Google Drive hoặc menu File. Tệp này mở trực tiếp trong JupyterLab hay Jupyter Notebook trên laptop. Các thư viện mà sổ tay gọi tới cần được cài lại và xác nhận phiên bản trong môi trường cục bộ, vì máy ảo Colab và laptop không dùng chung gói.

Vì sao đã cài thư viện mà notebook vẫn báo ModuleNotFound?

Nguyên nhân hay gặp là kernel đang chạy thuộc một môi trường khác với nơi đã cài thư viện. Lệnh jupyter kernelspec list cho biết từng kernel trỏ tới thư mục nào. Cách xử lý là cài gói kernel trong đúng môi trường dự án, đăng ký kernel với tên riêng rồi chọn lại kernel đó trong menu của sổ tay.

Có nên tắt token để mở notebook nhanh hơn không?

Không. Tài liệu Jupyter Server ghi rõ việc đặt cả token lẫn mật khẩu thành chuỗi rỗng là không được khuyến nghị, trừ khi lớp xác thực đã được xử lý ở tầng khác. Sau lần đăng nhập đầu, trình duyệt lưu cookie để duy trì phiên nên không phải nhập token lại, trừ khi đổi trình duyệt, xoá cookie hoặc khởi động server ở cổng mới.

Tệp CSV lớn hơn dung lượng RAM thì xử lý thế nào?

Tham số chunksize của read_csv cho phép đọc tệp theo từng khúc, miễn mỗi khúc vừa bộ nhớ. Kết hợp usecols để chỉ nạp cột cần dùng và đổi cột chữ sang category giúp giảm thêm dung lượng. Với thao tác cần gom dữ liệu toàn bộ như groupby, tài liệu pandas gợi ý chuyển sang thư viện hỗ trợ xử lý ngoài bộ nhớ.

← Bài trước
Bài sau →

0 phản hồi cho “Jupyter Notebook trên laptop - Xử lý dữ liệu cục bộ và khi nào cần Colab”

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

Tên và nội dung bình luận hiển thị công khai; email không hiển thị công khai. Xem Chính sách bảo mật.