如何在Lambda函数执行Jupyter Notebook时使用Conda内核
解决Lambda执行SageMaker Notebook时无法使用预安装Conda内核的问题
问题分析
你通过Lambda调用websocket执行nbconvert时,只能识别默认的python3(Python3.7)和ir内核,而本地登录SageMaker实例时能看到所有预安装的Conda内核,核心原因是:
- Lambda触发的终端会话属于非交互式非登录Shell,不会自动加载SageMaker实例的用户环境配置(比如
~/.bashrc或~/.bash_profile) - 这些配置文件里包含了Conda环境的路径以及Jupyter内核的注册信息,未加载的话Jupyter无法找到预安装的Conda内核
解决方案
修改websocket发送的命令,先加载用户环境配置,再执行nbconvert并指定目标Conda内核名称。
修改后的Lambda代码片段
替换原代码中ws.send(...)的部分:
# 先加载bash配置,再执行nbconvert,指定conda_python3内核(对应Python3.8) ws.send("\"\"\"[ \"stdin\", \"source ~/.bashrc && jupyter nbconvert --execute --to notebook --inplace /home/ec2-user/SageMaker/test.ipynb --ExecutePreprocessor.kernel_name=conda_python3 --ExecutePreprocessor.timeout=1500\\r\" ]\"\"\"")
可选:直接激活目标Conda环境执行
如果你想指定特定版本的Conda环境(比如conda_pytorch_p38),可以直接激活环境再执行命令:
ws.send("\"\"\"[ \"stdin\", \"source ~/.bashrc && conda activate pytorch_p38 && jupyter nbconvert --execute --to notebook --inplace /home/ec2-user/SageMaker/test.ipynb --ExecutePreprocessor.kernel_name=conda_pytorch_p38 --ExecutePreprocessor.timeout=1500\\r\" ]\"\"\"")
关键注意事项
- 确保内核名称和你在SageMaker实例本地看到的完全一致(比如
conda_python3、conda_pytorch_p38) source ~/.bashrc是关键步骤,它会加载Conda的初始化脚本和Jupyter内核的注册路径- 如果
~/.bashrc未生效,可以尝试source ~/.bash_profile,不同SageMaker实例的配置文件可能有差异
内容的提问来源于stack exchange,提问作者Muhammad Azeem
相关产品推荐
相关产品推荐

