不少童鞋可能已經知道,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的更多專業擴展資源。