求助:Colab/Jupyter重启后如何避免重新运行所有单元格
解决Colab/Jupyter单元格执行状态无法保存的问题
核心原因
Colab和Jupyter的运行时会话是临时的,关闭浏览器、断开连接或会话超时后,运行时内存中的变量、模型状态、中间计算结果都会被清空,这是平台的默认设计机制,并非设置错误。
Google Colab 专属解决方案
- 防止会话自动断开:在单独的单元格运行以下代码,每隔5分钟输出一个字符,避免Colab因长时间无交互断开会话:
若使用Colab Pro/Pro+,可在「运行时」菜单选择「暂停会话」,下次打开时直接恢复之前的运行状态,无需重新执行;付费版的会话保持时长也远长于免费版。import time while True: print(".", end="") time.sleep(300) # 5分钟一次输出 - 训练过程 checkpoint 化:训练时定期保存模型权重、优化器状态、当前训练轮次等关键信息,示例代码(以PyTorch为例):
Keras可使用# 保存checkpoint import torch torch.save({ "epoch": current_epoch, "model_state_dict": model.state_dict(), "optimizer_state_dict": optimizer.state_dict(), "loss": current_loss }, "/content/drive/MyDrive/checkpoint.pth") # 恢复checkpoint checkpoint = torch.load("/content/drive/MyDrive/checkpoint.pth") model.load_state_dict(checkpoint["model_state_dict"]) optimizer.load_state_dict(checkpoint["optimizer_state_dict"]) start_epoch = checkpoint["epoch"] + 1model.save_weights()配合model.load_weights()实现类似逻辑,下次启动直接从start_epoch继续训练。 - 挂载Drive保存所有中间结果:将预处理后的数据集、特征数组等用
pickle或np.save保存到挂载的Google Drive,示例:import pickle import numpy as np # 保存预处理数据 with open("/content/drive/MyDrive/preprocessed_data.pkl", "wb") as f: pickle.dump(preprocessed_data, f) np.save("/content/drive/MyDrive/features.npy", features) # 恢复数据 with open("/content/drive/MyDrive/preprocessed_data.pkl", "rb") as f: preprocessed_data = pickle.load(f) features = np.load("/content/drive/MyDrive/features.npy")
Jupyter Notebook 专属解决方案
- 使用
%store魔法命令:直接保存单个变量到磁盘,跨会话恢复:# 保存变量 %store my_model %store training_history # 恢复变量(新会话中执行) %store -r my_model %store -r training_history - 序列化保存整个会话:使用
dill库保存整个运行环境,恢复时直接加载:
注意:大模型或复杂环境会生成较大文件,且Python版本、库版本不一致可能导致恢复失败。# 安装dill(首次运行) !pip install dill # 保存会话 import dill dill.dump_session("training_session.pkl") # 恢复会话(新会话中执行) dill.load_session("training_session.pkl") - 安装会话管理插件:通过
jupyter nbextensions安装sessionmanager插件,支持手动保存和恢复会话状态,需确保插件与Jupyter版本兼容。
通用优化技巧
- 拆分Notebook:将数据预处理、模型训练、结果评估拆分为独立的Notebook,训练完成后保存关键结果,后续仅运行评估或微调部分,无需重复执行全流程。
- 训练逻辑脚本化:把训练代码写成独立的
.py脚本,在Notebook中用!python train.py执行,脚本内置checkpoint检查逻辑,即使会话断开,下次运行脚本会自动从最近的checkpoint继续训练。
内容的提问来源于stack exchange,提问作者AdityaM
相关产品推荐
相关产品推荐

