【第9期】Jupyter Notebook 不只是“能运行代码”:小蓝伞带你理解 Kernel、状态与可复现实验
系列:《从小白到 AI 大模型开发工程师的进阶之路》
技术点:AI-0009 Jupyter Notebook
主人公:小蓝伞
先说结论
Notebook 是交互式实验工具,不是天然可复现的报告。它由前端页面和后端 Kernel 组成:页面负责编辑和展示,Kernel 保存变量并执行代码。单元格可以乱序执行,所以页面从上到下看起来合理,不代表别人打开后能复现。
一、把虚拟环境注册为 Kernel
cd ai-env-demo .\.venv\Scripts\Activate.ps1 python -m pip install jupyter ipykernel python -m ipykernel install --user --name ai-env-demo --display-name "Python (ai-env-demo)" jupyter notebook打开后在 Kernel 菜单选择Python (ai-env-demo)。第一格建议固定写:
import sys print(sys.executable)如果路径不是项目.venv,应先切换 Kernel,而不是反复安装包。小蓝伞以前把pandas装了好几遍,真正的问题是 Notebook 连着另一个环境。
二、Kernel 状态为什么会让实验“看起来没问题”
变量、导入模块和缓存都保留在 Kernel 内存中。某单元格即使没有运行,也可能因为之前运行过而暂时成功。建议形成固定习惯:
- 提交前执行 Restart Kernel and Run All;
- 修改全局变量或依赖后重启 Kernel;
- 给随机实验固定种子并记录参数;
- 输出过大时清理,再提交 Notebook。
一个最小实验骨架:
from pathlib import Path import sys SEED = 42 DATA_DIR = Path("data") print("python:", sys.executable) print("data dir:", DATA_DIR.resolve()) print("seed:", SEED)随机种子能减少不必要漂移,但不能保证不同 GPU、并行算法和软件版本下绝对一致。严谨的实验还应记录数据版本、依赖版本和硬件条件。
三、Notebook 如何进入 Git
.ipynb是 JSON,包含代码、输出和元数据。提交前应删除密钥、客户数据、长输出和不必要的缓存;可使用:
jupyter nbconvert --ClearOutputPreprocessor.enabled=True --inplace .\experiment.ipynb不要把访问令牌写进单元格或输出。需要共享结果时,保留公开样例、核心指标和再现步骤;大数据与模型权重应放在合适的数据存储,不应塞进 Git 历史。
四、排查问题的顺序
- 浏览器能打开但没有 Kernel:确认
ipykernel安装在目标环境,重启 Jupyter。 ModuleNotFoundError:先打印sys.executable,再用该解释器执行-m pip。- 单元格一直忙:查看死循环、内存占用、外部请求和 Kernel 日志。
- 别人运行失败:检查相对路径、数据文件、依赖清单与实际执行顺序,而不是只比较截图。
五、面试题
1. Jupyter 前端和 Kernel 的关系?前端发送执行请求并展示结果,Kernel 保存状态并执行代码。
2. 为什么 Notebook 会出现顺序错乱?单元格可任意执行,变量按真实执行历史存在,不按页面顺序自动重置。
3. 为什么要注册 ipykernel?让 Jupyter 将某个虚拟环境作为可选 Kernel,从而明确使用哪个 Python。
4. 如何保证 Notebook 实验可复现?从头运行、固定可控随机性、记录依赖与数据版本、避免隐藏状态,并在干净环境验证。
下一期进入 Docker 基础,把“我的 Notebook 能跑”推进到“服务可以稳定启动”。点个关注不迷路,一次可复现实验胜过十次“我这里能跑”;把过程写清楚,知识才真正属于你。
官方资料
- Jupyter 官方文档
- IPython Kernel 安装说明