如何在Azure ML JupyterLab中通过Papermill prepare_only模式设置默认内核
在Azure ML JupyterLab的prepare_only模式下设置默认内核
问题描述
- 核心需求:在Azure ML笔记本的JupyterLab中,为
prepare_only模式设置默认内核,避免每日重复手动切换的操作。 - 已尝试但无效的方案:
- 编辑Jupyter配置文件
/home/azureuser/.jupyter/jupyter_notebook_config.py,添加c.MultiKernelManager.default_kernel_name = 'py38',但重启计算实例或JupyterLab后配置文件会被自动覆盖。 - 使用Papermill执行笔记本时,指定
kernel_name='py38'并配合prepare_only=True参数,无效果。
- 编辑Jupyter配置文件
可行解决方案
方法1:通过计算实例启动脚本持久化配置
Azure ML计算实例支持自定义启动脚本,可利用该特性在每次启动时自动写入内核配置,避免被覆盖:
- 创建启动脚本文件(例如
set_default_kernel.sh),内容如下:# 确保.jupyter目录存在 mkdir -p /home/azureuser/.jupyter # 向JupyterLab优先读取的配置文件写入默认内核设置 echo "c.MultiKernelManager.default_kernel_name = 'py38'" >> /home/azureuser/.jupyter/jupyter_server_config.py - 在Azure ML工作区找到目标计算实例,进入高级设置,将上述脚本设置为启动脚本。
- 重启计算实例,配置会在每次启动时自动生效。
方法2:直接修改笔记本元数据(适配Papermill prepare_only模式)
prepare_only=True时Papermill不会运行内核,但可以通过修改笔记本的元数据直接指定默认内核:
import nbformat # 读取原始笔记本文件 with open("your_input_notebook.ipynb", "r") as f: notebook = nbformat.read(f, as_version=4) # 设置内核元数据 notebook.metadata.kernelspec = { "name": "py38", "display_name": "Python 3.8", "language": "python" } # 保存修改后的笔记本 with open("prepared_notebook.ipynb", "w") as f: nbformat.write(notebook, f)
后续可直接使用这个已设置内核的笔记本,或用Papermill以prepare_only模式处理它。
方法3:创建带指定内核的笔记本模板
通过JupyterLab UI创建模板,从根源避免手动切换:
- 打开JupyterLab,新建一个笔记本,切换到目标内核
py38。 - 点击File > Save as Template,将该笔记本保存为模板。
- 后续新建笔记本时,直接从该模板创建,默认即为
py38内核。
内容的提问来源于stack exchange,提问作者Tickon
相关产品推荐
相关产品推荐

