关于机器学习:在SageMaker上玩转R环境这些必会技巧你知道几个

33次阅读

共计 5942 个字符,预计需要花费 15 分钟才能阅读完成。


很多童鞋可能曾经晓得,Amazon SageMaker 曾经在寰球各服务区域预装 R 内核。此项性能开箱即用,同时预装置有 reticulate 库。该库负责为 Amazon SageMaker Python SDK 提供 R 接口,容许大家间接从 R 脚本中调用 Python 模块。之前咱们已经公布过一篇文章介绍这件事,欢送点击这里回顾。

如果你想进一步将这个性能施展出更多价值,那么本文就值得关注了。

下文,咱们将介绍如何在 Amazon SageMaker 内置的 R 内核之上创立自定义 R 环境(内核),以及如何在会话之间实现环境长久化。此外还将介绍如何在 R 环境中装置新的软件包,如何在 Amazon Simple Storage Service(Amazon S3)上保留这套新环境,以及如何应用它通过 Amazon SageMaker 生命周期配置创立新的 Amazon SageMaker 实例。本文也提供相应 bash 脚本,供大家在创立或启动 Amazon SageMaker notebook 实例时配置生命周期。

背景介绍

Amazon SageMaker 中的 R 内核以 IRKernel 软件包构建而成,该软件包将在 Jupyter 环境中装置名为 ir 且显示名称 R 的内核。

咱们能够应用 Conda 治理这套环境,并装置特定的软件包与依赖项。但在默认状况下,从 Notebook 实例处装置的 R 内核无奈长久至其余 Notebooke 实例的会话当中。每当启动及进行 Amazon SageMaker 实例时,R 内核都会返回其默认环境。

本文将疏导大家应用以下资源在 Amazon SageMaker 中装置 R 软件包:

  • Anaconda Cloud
  • CRAN
  • Github

在环境创立实现之后,咱们能够将其保留在实例的 Amazon Elastic Block Store(Amazon EBS)存储当中以实现长久化。咱们也能够将该环境存储在 Amazon S3 上,并应用它为新的 Amazon SageMaker 实例构建自定义 R 环境。对于更多详细信息,请参阅应用生命周期配置脚本定制 Notebook 实例。

创立一个基于 R 内核的 Amazon SageMaker notebook实例

要创立一个基于 R 内核的 Amazon SageMaker notebook 实例,请实现以下操作步骤:

  • 创立一个 Notebook 实例。
  • 当实例状态显示为 In Service 时,关上 Jupyter。
  • 在 New 下拉菜单中,抉择 R。

在关上新的 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/ 文件夹,而后删除冗余文件夹。

  • 在 Amazon SageMaker 控制台的 Notebook 之下,抉择 Lifecycle configurations。
  • 抉择 Create Configuration。
  • 将其命名为 Custom-R-Env。
  • Create notebook 选项卡中,输出以下脚本。
## 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

  • 点击 Create Configuration。

通过生命周期配置,应用自定义 R 环境启动实例

无论是在同一实例中创立自定义 R 环境并将其克隆至./envs/ 文件夹,还是在创立实例时从 Amazon S3 上下载.zip 文件,此步骤的具体操作都完全相同。

此脚本将在./evns/ 文件夹(其中蕴含自定义 R 环境)与 Anaconda Custom-R-Env 环境之间创立一个链接,从而在 Amazon SageMaker 内核中列出该环境。

  • 在 Amazon SageMaker 控制台的 Notebook 下,抉择 Lifecycle configurations。
  • 抉择 Create Configuration。
  • 将其命名为 Custom-R-Env(如果曾经在之前的步骤中创立了该配置,则可间接从列表中选定配置并抉择 Edit)。
  • 在 Start notebook 选项卡上,输出以下脚本:
## 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

  • 点击 Create Configuration(如果要编辑现有配置,则点击 Update)。

将生命周期配置指定给 Amazon SageMaker实例

在创立 Notebook 实例时,咱们能够为其指定生命周期配置。对于更多详细信息,请参阅应用生命周期配置脚本定制 Notebook 实例。

要应用生命周期配置(Custom-R-Env)创立一个 Notebook,须要在 Additional Configuration 局部将该脚本指定给以后 Notebook。其余操作步骤与创立惯例 Amazon SageMaker 实例雷同。

应用自定义 R 环境

在关上创立该自定义环境的现有实例时,咱们会看到各相干文件、代码以及 /envs/ 文件夹曾经存在。

但如果创立了一个新实例,并应用生命周期脚本从 Amazon S3 处提取该环境,则须要实现以下操作步骤:

  • 当实例状态显示为 In Service 时,关上 Jupyter,能够看到 Amazon SageMaker 文件中存在一个 /envs/ 文件夹,这就是咱们的自定义环境。
  • 在 New 下拉菜单当中,抉择 conda_r_custom-r。

当初,咱们曾经领有一个蕴含自定义 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 的更多业余扩大资源。

正文完
 0