Amazon SageMakerをRStudioから使いたい!
こんにちは、小澤です。
当エントリは『機械学習 on AWS Advent Calendar 2019』の25日目です。
- クラスメソッド 機械学習 on AWS Advent Calendar 2019 - Qiita
- クラスメソッド 機械学習 on AWS Advent Calendar 2019 | シリーズ | Developers.IO
SageMakerでは、ノートブックインスタンスにR Kernelがインストールされおり、 reticulateパッケージを使うことでSageMaker Python SDKやboto3をそのまま利用することが可能です。
Rが使えるならRStudioを使いたいじゃない!!
先日のre:Invent 2019にてSageMakerの統合開発環境であるSageMaker Studioが発表されました。
機械学習を行う上で必要な要素は様々あり、SageMakerにも新サービスを含めて多くの機能が備わっています。 そのため、それらを統合的に扱える仕組みがあると大変便利です。 それを実現するのがSageMaker Studioとなるわけです。
そんなこんなで、SageMaker Studioを使えばそれSageMakerに関するほとんどの作業がそこで完結するわけですが、R好きな私はどうしてもIDEと言えばRStudioが使いたくなります。
そこで、RStudio ServerをEC2にインストールしてそこからSageMakerを利用できるようにしようと思います。
SageMakerを使うためのIAMの準備
まずは、SageMakerを利用するRStudio ServerがインストールされたEC2に付与するIAMロールの設定を行います。 今回は以下のものを付与しました。
- AmazonSAgeMakerFullAccess
- AmazonS3FullAccess
- AmazonEC2ContainerRegistryFullAccess
- IAMReadOnlyAccess
これらは必要な権限を厳密に精査したうえで付与したわけではありませんが、普段SageMakerを利用するうえでだいたいこの辺を使ってるというものを入れています。
(※ sagemaker.get_excution_roleのためにIAMReadOnlyAccessを付与しましたが、EC2に付与するロールとは異なるため、ロール名からarnを引くとかをしなければ不要です)
EC2インスタンへはこのあとの手順でsshを使います。 また、RStudio Serverのポートは8787を利用しています。 セキュリティグループのインバウンド設定でそれらへのアクセスを許可しておいてください。
必要なパッケージのインストール
作成したEC2インスタンスに必要なパッケージをインストールします。 今回入れるのは以下のものになります。
- Python3
- R
- RStudio Server
sudo yum update -y sudo yum install python3 -y sudo yum install -y R libcurl-devel openssl-devel libxml2-devel sudo amazon-linux-extras install R3.4 # RStudio乗りようユーザ作成 sudo adduser rsutudio sudo passwd rsutdio # RStudio Serverの起動 sudo rstudio-server start
RStudioを利用するユーザやパスワードは任意で設定してください。
続いて、RStudio Serverにアクセスして、RからSageMakerを利用するために必要なパッケージのインストールを行います。 まずは、R側で利用するパッケージのインストールを行います。
install.packages(c('reticulate', 'tidyverse'))
インストールが終わったら、reticulateパッケージの関数を利用して、Python3のvenv環境を作成して、そこにPython側の必要なパッケージをインストールしていきます。
# venv環境の作成 # ここで作成したvenvは~/.virtualenvs以下に作成される virtualenv_create(envname = 'rstudio-sagemaker') # venv環境に必要なパッケージを入れる virtualenv_install(envname = 'rstudio-sagemaker', packages = c('sagemaker', 'boto3', 'pandas')) # venv環境を利用する reticulate::virtualenv_python('rstudio-sagemaker')
これでSageMakerを利用する準備が整いました。
最後のvenv環境利用の指定は .Rprofile
に記述しておいてもいいかもしれません。
現在利用しているPython環境は reticulate::py_config()
で以下のように確認可能です。
python: /home/rstudio/.virtualenvs/rstudio-sagemaker/bin/python libpython: /usr/lib64/libpython3.7m.so.1.0 pythonhome: //usr://usr version: 3.7.4 (default, Nov 12 2019, 19:44:08) [GCC 7.3.1 20180712 (Red Hat 7.3.1-6)] numpy: /home/rstudio/.virtualenvs/rstudio-sagemaker/lib/python3.7/site-packages/numpy numpy_version: 1.18.0 sagemaker: /home/rstudio/.virtualenvs/rstudio-sagemaker/lib64/python3.7/site-packages/sagemaker python versions found: /usr/bin/python3 /usr/bin/python /home/rstudio/.virtualenvs/rstudio-sagemaker/bin/python
利用する
さて、ここまで準備が整えばあとはノートブックインスタンスでR Kernelを利用する際と全く同じように利用可能です。
以下のようにそのまま動いていることが確認できます。
また、RMarkdonwで機械学習の開発時の各種処理をレポート化も可能です。
おわりに
今回は、EC2インスタンス上に入れたRStudio ServerからSageMakerを利用する方法を紹介しました。
SageMakerはそれ単体でもどんどん便利なものになっていっていますが、 このように外部との連携がしやすくなっていることで、私のように以前からRStudioに慣れていた人間にとっても使いやすい環境をいくらでも構築できる仕組みとなっています。