Amazon SageMakerをRStudioから使いたい!

こんにちは、小澤です。

当エントリは『機械学習 on AWS Advent Calendar 2019』の25日目です。

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に慣れていた人間にとっても使いやすい環境をいくらでも構築できる仕組みとなっています。