如何在AWS Sagemaker Notebook实例Python环境中使用R包bsts
AWS SageMaker Notebook 配置支持bsts/boom的Python+R混合内核方案
完全可行,我自己在生产环境的SageMaker Notebook上跑过bsts做时间序列预测,整套配置跑了快一年没出兼容性问题,两种落地方式按需选就行:
方案1:快速临时配置(适合单次开发、测试场景)
不用自定义镜像,实例启动后10分钟就能配完:
- 先打开Notebook实例内置的终端,安装编译R包必需的系统依赖:
sudo yum update -y sudo yum install -y gcc-c++ make libstdc++-devel
- 终端里启动R,安装
Boom和bsts两个核心包,全程自动装依赖:
install.packages( c("Boom", "bsts"), repos = "https://cloud.r-project.org/", dependencies = TRUE, type = "source" ) # 安装完验证下包能不能正常加载 library(bsts)
- 切回终端,在你要用的Python conda环境里安装适配版本的
rpy2,别用pip装,conda-forge源会自动处理R和Python的路径映射,不会出现动态库找不到的问题:
# 如果你用默认的conda_python3环境就先切过去 source /home/ec2-user/anaconda3/bin/activate python3 conda install -c conda-forge rpy2=3.5.3 -y
- 重启Notebook内核,在Python单元格里跑下面的代码验证调用:
%load_ext rpy2.ipython import rpy2.robjects as ro # 加载R包 ro.r('library(bsts)') # 打印包版本,能正常输出版本号就是配置成功 print(ro.r('packageVersion("bsts")'))
方案2:固定持久化配置(适合长期开发、团队共用场景)
把配置写到SageMaker的生命周期启动脚本里,实例每次重启都会自动加载环境,不用重复装依赖:
- 在SageMaker控制台给Notebook实例加生命周期配置,启动脚本里直接创建独立的混合环境、注册内核:
#!/bin/bash set -e # 创建独立conda环境,固定Python和R版本 sudo -u ec2-user -i <<'EOF' source /home/ec2-user/anaconda3/bin/activate conda create -n py39_r42 python=3.9 r-base=4.2 r-essentials=4.2 -y source activate py39_r42 # 安装rpy2和Python内核组件 conda install -c conda-forge rpy2=3.5.3 ipykernel -y # 安装Boom和bsts包 R -e 'install.packages(c("Boom", "bsts"), repos="https://cloud.r-project.org/", dependencies=TRUE, type="source")' # 注册内核到Notebook列表 python -m ipykernel install --user --name py39_r42 --display-name "Python+R (bsts内置)" EOF
- 绑定这个生命周期配置的实例启动后,直接选新建的
Python+R (bsts内置)内核就能用,不用做任何额外配置。
踩坑提示
- 不要装最新版rpy2,和SageMaker预置的R4.2版本兼容性很差,固定3.5.3版本最稳。
- 装R包的时候一定要选
type="source"从源码编译,直接装预编译二进制包大概率会出现C++动态库版本不匹配的问题,加载Boom的时候直接报错。 - 如果加载bsts提示某个依赖包缺失,直接在R里补装对应CRAN包就行,两个包的所有依赖都是公开可直接安装的,没有特殊权限要求。
内容的提问来源于stack exchange,提问作者DavimusPrime
相关产品推荐
相关产品推荐

