Vấn đề
Bạn đã viết các script Python và chúng chạy hoàn hảo từ terminal. Nhưng ngay khi bạn nhấn nút 'Play' trên một ô Jupyter Notebook trong VS Code, mọi thứ sụp đổ. Thay vì hiển thị trực quan hóa dữ liệu hoặc các câu lệnh print, bạn nhận được một kernel đã chết và một thông báo cứng đầu ở góc màn hình.
Failed to start the Kernel. The Jupyter kernel died. View Jupyter log for further details.
Thủ phạm hiếm khi là mã của bạn. Thay vào đó, nó hầu như luôn là sự cố trong cách trình thông dịch Python bạn đã chọn giao tiếp với backend của Jupyter. Đây là một vấn đề đau đầu về cấu hình, không phải về lập trình.
Nguyên nhân gốc rễ
Trong hầu hết các trường hợp, sự cố bắt nguồn từ một trong ba lỗi cụ thể sau:
- ipykernel bị hỏng: Cầu nối giữa Python và Jupyter bị thiếu hoặc các file thực thi (binaries) của nó bị lỗi trong môi trường hiện tại của bạn.
- Xung đột phiên bản: Các thư viện cấp thấp như
tornadohoặcpyzmqđã cập nhật lên các phiên bản mà extension của VS Code chưa thể xử lý. - Đường dẫn cũ (Stale Paths): VS Code đang trỏ đến một tệp thực thi Python đã bị di chuyển, đổi tên hoặc xóa trong một bản cập nhật gần đây.
Bước 1: Cài đặt lại bắt buộc ('Force' Reinstall)
Ngay cả khi VS Code thông báo ipykernel đã được cài đặt, bản cài đặt có thể bị lỗi "ma" hoặc bị hỏng một phần. Việc bắt buộc cài đặt một bản mới là cách nhanh nhất để loại trừ các tệp thực thi bị hỏng.
Đầu tiên, hãy kích hoạt môi trường cụ thể của bạn trong terminal. Sau đó, chạy lệnh sau:
pip install --upgrade --force-reinstall ipykernel
Người dùng Conda nên sử dụng channel forge để có khả năng tương thích tốt hơn:
conda install -c conda-forge ipykernel --force-reinstall
Khởi động lại VS Code sau khi quá trình cài đặt hoàn tất. Thông thường, đây là tất cả những gì cần thiết để khắc phục lỗi.
Bước 2: Giải quyết xung đột Tornado và Pyzmq
Jupyter phụ thuộc vào tornado cho mạng và pyzmq cho việc truyền tin nhắn. Nếu các thư viện này không đồng bộ, kernel sẽ thoát ngay lập tức khi vừa khởi động. Điều này thường xảy ra trên các hệ thống macOS khi các bản cập nhật hệ thống có thể nâng cấp các phiên bản này một cách bất ngờ.
Hãy thử ghim các thư viện này vào các phiên bản ổn định đã biết:
pip install "pyzmq<25" "tornado<6.3"
Cụ thể, pyzmq phiên bản 25.x là "thủ phạm" thường gặp trên máy Mac M1/M2. Việc hạ cấp xuống 24.x thường khôi phục lại sự kết nối giữa notebook và backend ngay lập tức.
Bước 3: Khai thác Jupyter Log
Đừng bỏ qua lời khuyên của thông báo lỗi về việc kiểm tra log. Trong VS Code, hãy mở tab Output (Ctrl+Shift+U hoặc Cmd+Shift+U) và chuyển menu thả xuống ở bên phải sang Jupyter.
Quét văn bản để tìm Traceback. Bạn đang tìm kiếm hai manh mối cụ thể sau:
ImportError: DLL load failed: Một phần mở rộng C như NumPy hoặc ZMQ bị hỏng. Bạn sẽ cần cài đặt lại gói cụ thể đó.ModuleNotFoundError: No module named 'pysqlite2': Thường gặp trên Linux và WSL. Bạn có thể cần cài đặt các header cấp hệ thống bằng lệnhsudo apt install libsqlite3-dev.
Bước 4: Tạo lại cấu hình Kernel
Đôi khi VS Code lưu cache sai đường dẫn cho môi trường của bạn. Bạn có thể buộc nó làm mới ánh xạ nội bộ bằng một mẹo "chuyển đổi" nhanh:
- Nhấp vào Kernel Name ở góc trên cùng bên phải của notebook.
- Chọn Select Another Kernel > Python Environments.
- Chuyển sang một môi trường hoàn toàn khác (chẳng hạn như bản cài đặt Python gốc của bạn).
- Chạy một ô lệnh
print("test")đơn giản. - Chuyển ngược lại môi trường ban đầu của bạn.
Việc hoán đổi đơn giản này thường buộc VS Code phải ghi lại tệp JSON của kernel với các đường dẫn chính xác.
Bước 5: Khi tất cả các cách khác đều thất bại, hãy dựng lại
Nếu bạn đã dành 20 phút để đuổi theo các lỗi phụ thuộc không rõ ràng, hãy dừng lại. Sẽ hiệu quả hơn nếu xóa môi trường và bắt đầu mới thay vì cố gắng gỡ rối một mớ hỗn độn thư viện một cách thủ công.
# Cho venv
rm -rf .venv
python -m venv .venv
source .venv/bin/activate
pip install ipykernel pandas matplotlib # Chỉ cài đặt lại những gì bạn cần
# Cho Conda
conda env remove -n myenv
conda create -n myenv python=3.11 ipykernel
conda activate myenv
Xác minh
Chạy đoạn mã này để xác nhận kernel đã ổn định và đang sử dụng các tài nguyên chính xác:
import sys
print(f"Status: Kernel Active")
print(f"Version: {sys.version.split()[0]}")
print(f"Path: {sys.executable}")
Nếu bạn thấy đường dẫn môi trường của mình mà không có cửa sổ thông báo lỗi, quá trình khắc phục đã thành công.
Mẹo chuyên nghiệp để phòng ngừa
Để giữ cho các notebook của bạn chạy trơn tru, hãy tuân theo hai thói quen sau. Thứ nhất, luôn sử dụng một .venv riêng dụng cho mỗi dự án để ngăn chặn sự "xâm lấn phụ thuộc" từ các thư viện khác. Thứ hai, hãy cài đặt ipykernel như bước đầu tiên trước khi thêm các framework nặng như PyTorch hoặc TensorFlow, vốn thường ghim các phụ thuộc chung vào các phiên bản cứng nhắc và không tương thích.

