在SageMaker上玩轉R環境,這些必會技巧你知道幾個?

image
不少童鞋可能已經知道,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

  • Anaconda Cloud
  • CRAN
  • Github

在環境建立完成以後,咱們能夠將其保存在實例的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>」。

image

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文件夾,具體參見如下截屏內容。

image

若是但願稍後在同一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

image

  • 點擊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

image

  • 點擊Create Configuration(若是要編輯現有配置,則點擊Update)。

將生命週期配置指定給Amazon SageMaker實例

在建立Notebook實例時,咱們能夠爲其指定生命週期配置。關於更多詳細信息,請參閱使用生命週期配置腳本定製Notebook實例

要使用生命週期配置(Custom-R-Env)建立一個Notebook,須要在Additional Configuration部分將該腳本指定給當前Notebook。其餘操做步驟與建立常規Amazon SageMaker實例相同。

image

使用自定義R環境

在打開建立該自定義環境的現有實例時,咱們會看到各相關文件、代碼以及/envs/文件夾已經存在。

但若是建立了一個新實例,並使用生命週期腳本從Amazon S3處提取該環境,則須要完成如下操做步驟:

  • 當實例狀態顯示爲In Service時,打開Jupyter,能夠看到Amazon SageMaker文件中存在一個/envs/文件夾,這就是咱們的自定義環境。
  • 在New下拉菜單當中,選擇conda_r_custom-r。

image

如今,咱們已經擁有一個包含自定義R環境的Notebook。在此Notebook中,咱們會在Jupyter環境的右上角看到R徽標,這表明當前內核爲R內核,內核名稱應爲conda_r_custom-r。要測試這套環境,請導入自定義環境中包含的某一套庫(例如rJava)。

image

如今,咱們的自定義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的更多專業擴展資源。

image

相關文章
相關標籤/搜索