不少童鞋可能已经知道,Amazon SageMaker已经在全球各服务区域预装R内核。此项功能开箱即用,同时预安装有reticulate库。该库负责为Amazon SageMaker Python SDK提供R接口,容许你们直接从R脚本中调用Python模块。以前咱们曾经发布过一篇文章介绍这件事,欢迎点击这里回顾。html
若是你想进一步将这个功能发挥出更多价值,那么本文就值得关注了。java
下文,咱们将介绍如何在Amazon SageMaker内置的R内核之上建立自定义R环境(内核),以及如何在会话之间实现环境持久化。此外还将介绍如何在R环境中安装新的软件包,如何在Amazon Simple Storage Service(Amazon S3)上保存这套新环境,以及如何使用它经过Amazon SageMaker生命周期配置建立新的Amazon SageMaker实例。本文也提供相应bash脚本,供你们在建立或启动Amazon SageMaker notebook实例时配置生命周期。linux
背景介绍git
Amazon SageMaker中的R内核以IRKernel软件包构建而成,该软件包将在Jupyter环境中安装名为ir且显示名称R的内核。github
咱们能够使用Conda管理这套环境,并安装特定的软件包与依赖项。但在默认状况下,从Notebook实例处安装的R内核没法持久至其余Notebooke实例的会话当中。每当启动及中止Amazon SageMaker实例时,R内核都会返回其默认环境。编程
本文将引导你们使用如下资源在Amazon SageMaker中安装R软件包:segmentfault
在环境建立完成以后,咱们能够将其保存在实例的Amazon Elastic Block Store(Amazon EBS)存储当中以实现持久化。咱们也能够将该环境存储在Amazon S3上,并使用它为新的Amazon SageMaker实例构建自定义R环境。关于更多详细信息,请参阅使用生命周期配置脚本定制Notebook实例。bash
建立一个基于R内核的Amazon SageMaker notebook实例服务器
要建立一个基于R内核的Amazon SageMaker notebook实例,请完成如下操做步骤:网络
在打开新的Notebook后,咱们将在Notebook区域的右上角看到R徽标。
关于建立基于R内核的Amazon SageMaker notebook实例的更多详细信息,请参阅在Amazon SageMaker notebook实例上使用R代码。
在Amazon SageMaker的R内核中安装软件包
Amazon SageMaker R内核提供超过140种标准软件包。要获取已安装软件包的清单,能够在配合R内核的SageMaker notebook中运行如下脚本:
installed.packages()
若是须要安装其余软件包,则能够经过Anaconda Cloud、CRAN归档或者直接经过GitHub进行安装。
经过Anaconda Cloud安装
R软件包的首选安装方法,是从Anaconda Cloud存储库进行安装。咱们能够经过这种方式访问不一样的通道(例如R与Conda Forge),从而安装软件包的特定版本。若是使用R内核在Amazon SageMaker中执行此项操做,请使用system()
命令以提交conda install
命令。
若是是在Amazon SageMaker Jupyter bash终端上进行安装,则可以使用conda install,以下所示:
conda install -n R -c conda-forge r-rjava
但在Amazon SageMaker中,请输入如下代码:
system("conda install -n R -c conda-forge r-rjava")
上述代码使用conda-forge通道,此通道负责安装rJava的0.9_12版本(截至本文发布之时)。但若是使用如下代码(使用r channel),则将安装0.9_11版本(截至本文发布之时):
system("conda install -n R -c r r-rjava")
要搜索特定软件包名称并为版本选择正确的通道,请访问Anaconda Cloud网站并搜索对应软件包。R软件包的命名格式为“r-<package_name>”。
Conda是安装软件包的首选方法,而Anaconda Cloud则凭借接入Conda环境最稳定版本的取向成为最佳归档选项。
经过CRAN归档安装
做为Anaconda的替代方案,你们也能够使用综合R归档网络(CRAN)归档完成安装。CRAN归档是一套由FTP与Web服务器组成的网络,分布于世界各地,其中保存有相同的R代码以及说明文档的最新版本。咱们能够使用此归档文件经过install.packages()在R中安装软件包,以保证安装的是软件包的最新版本。具体参见如下代码:
install.packages(c('mlbench', 'MVar'), repo = 'http://cran.rstudio.com', dependencies = TRUE)
使用如下代码将该软件包导入R代码:
library(mlbench)
Amazon SageMaker实例使用Amazon Linux AMI,这是一套从CentOS演变而来的发行版,可用于在Amazon Elastic Compute Cloud(Amazon EC2)实例当中运行Amazon SageMaker。若是打算直接经过源代码安装软件包,请保证选择正确的操做系统。你们能够在Amazon SageMaker Jupyter bash终端中使用如下脚本检查操做系统:
sh-4.2$ cat /etc/os-release
输出结果以下所示(截至本文发布之时):
NAME="Amazon Linux AMI" VERSION="2018.03" ID="amzn" ID_LIKE="rhel fedora" VERSION_ID="2018.03" PRETTY_NAME="Amazon Linux AMI 2018.03" ANSI_COLOR="0;33" CPE_NAME="cpe:/o:amazon:linux:2018.03:ga" HOME_URL=http://aws.amazon.com/amazon-linux-ami/
经过Github安装
咱们还能够使用devtools与install_github直接从软件包开发者的库中获取内容。具体参见如下代码:
install.packages("devtools") devtools::install_github("malcolmbarrett/ggdag")
上述代码将安装软件包及其依赖项。但请注意,咱们不推荐将此做为Amazon SageMaker当中的首选软件包安装方法。
在不一样会话间实现自定义R环境持久化
在默认状况下,每当咱们中止及启动Amazon SageMaker实例时,Amazon SageMaker都会启动基础R内核。而在中止实例时,咱们所安装的全部其余软件包都将丢失,且再次启动实例时又须要从新安装各软件包 —— 很明显,这种方式既费时又麻烦。解决方案是将环境保存在实例的EBS存储之上,并在启动时使用Amazon SageMaker生命周期配置脚本将EBS存储与自定义R内核相对接。更多信息请参阅使用生命周期配置脚本实现Notebook实例定制化。
本节将概述实现自定义R环境持久化的各个操做步骤。
将环境保存在Amazon SageMaker EBS上
首先须要经过环境克隆操做,将当前环境保存在实例的EBS存储之上。咱们能够在Amazon Sagemaker Jupyter bash终端中运行如下脚本:
conda create --prefix /home/ec2-user/SageMaker/envs/custom-r --clone R
这将在咱们有权访问的实例EBS上的Amazon SageMaker文件夹下建立一个envs/custom-r文件夹,具体参见如下截屏内容。
若是但愿稍后在同一Amazon SageMaker实例(注意,并不是在其余不一样实例中)中使用这套自定义环境,则可跳过生命周期配置部份内容,直接前往本文中的使用自定义R环境启动实例部分。
在Amazon S3中保存环境以建立新的Amazon SageMaker实例
若是须要在建立Amazon SageMaker实例时重复使用同一套自定义R环境(例如在开发团队内部),能够将该环境以.zip文件形式保存至Amazon S3,并在Create步骤中将其下载至实例当中。咱们能够在Amazon SageMaker Juypyter bash终端内运行如下脚本:
zip -r ~/SageMaker/custom_r.zip ~/SageMaker/envs/ aws s3 cp ~/SageMaker/custom_r.zip s3://[YOUR BUCKET]/
经过生命周期配置,使用自定义R环境建立新实例
要建立新实例,并在该实例中使用已有的自定义环境,须要将.zip环境从Amazon S3引入当前实例。咱们能够使用生命周期配置脚本在Amazon SageMaker控制台上自动执行此项操做。该脚本将.zip文件从Amazon S3下载至实例EBS上的/SageMaker/文件夹当中、解压该文件、从新建立/envs/文件夹,然后删除冗余文件夹。
## On-Create: Bringing custom environment from S3 to SageMaker instance ## NOTE: Your SageMaker IAM role should have access to this bucket #!/bin/bash sudo -u ec2-user -i <<'EOF' aws s3 cp s3://[YOUR BUCKET]/custom_r.zip ~/SageMaker/ unzip ~/SageMaker/custom_r.zip -d ~/SageMaker/ mv ~/SageMaker/home/ec2-user/SageMaker/envs/ ~/SageMaker/envs rm -rf ~/SageMaker/home/ rm ~/SageMaker/custom_r.zip EOF
经过生命周期配置,使用自定义R环境启动实例
不管是在同一实例中建立自定义R环境并将其克隆至./envs/文件夹,仍是在建立实例时从Amazon S3上下载.zip文件,此步骤的具体操做都彻底相同。
此脚本将在./evns/文件夹(其中包含自定义R环境)与Anaconda Custom-R-Env环境之间建立一个连接,从而在Amazon SageMaker内核中列出该环境。
## On-Start: After you set up the environment in the instance ## then you can have this life-cycle config to link the custom env with kernel #!/bin/bash sudo -u ec2-user -i <<'EOF' ln -s /home/ec2-user/SageMaker/envs/custom-r /home/ec2-user/anaconda3/envs/custom-r EOF echo "Restarting the Jupyter server..." restart jupyter-server
将生命周期配置指定给Amazon SageMaker实例
在建立Notebook实例时,咱们能够为其指定生命周期配置。关于更多详细信息,请参阅使用生命周期配置脚本定制Notebook实例。
要使用生命周期配置(Custom-R-Env)建立一个Notebook,须要在Additional Configuration部分将该脚本指定给当前Notebook。其余操做步骤与建立常规Amazon SageMaker实例相同。
使用自定义R环境
在打开建立该自定义环境的现有实例时,咱们会看到各相关文件、代码以及/envs/文件夹已经存在。
但若是建立了一个新实例,并使用生命周期脚本从Amazon S3处提取该环境,则须要完成如下操做步骤:
如今,咱们已经拥有一个包含自定义R环境的Notebook。在此Notebook中,咱们会在Jupyter环境的右上角看到R徽标,这表明当前内核为R内核,内核名称应为conda_r_custom-r。要测试这套环境,请导入自定义环境中包含的某一套库(例如rJava)。
如今,咱们的自定义R环境已经启动并在实例中正常运行,能够使用reticulate软件包在R中进行编程了。
结论
本文引导你们为Amazon SageMaker notebook实例建立自定义持久R环境。关于Amazon SageMaker上的R notebook,请参阅Amazon SageMaker示例GitHub repo。关于建立基于R内核的Amazon SageMaker notebook实例的更多详细信息,请参考在Amazon SageMaker notebook实例上使用R代码博文。关于如何经过R使用Amazon SageMaker更多功能的详细信息,请访问Amazon SageMaker R用户指南。此外,你们能够参考AWS机器学习博客获取关于Amazon SageMaker的更多专业扩展资源。