Partager via


進化した R Server を触ってみよう

Microsoft Japan Data Platform Tech Sales Team

中川

Revolution Analytics 社を買収し、新たに Microsoft ブランドとして提供をしておりました Microsoft R Server(以降 R Server と称す) ですが、現時点(2017/9/4)での最新バージョンは 9.1 となっています。8.x 系までをご利用になられてた方はご存知かと思いますが、R Server は高速処理にてモデル作成までを行うことができましたが、実際にアプリケーションなどからモデルを使用しようとすると、別途 Deploy R というコンポーネントをインストール・セットアップするなどの手間がかかり、アーキテクチャーや操作性も少し複雑であったかと思います。その問題を解消すべく、9.x 系では DeployR というコンポーネントは廃止され、モデルのデプロイ/API 化までを本体機能に取り込み、セットアップも非常に容易に行えるようになりました。今回はその辺りにフォーカスしてご紹介したいと思います。

R Server には大きく分けて Linux 版と Windows 版があり、Linux 版ですとこちらの手順にてインストールしていただけます。R Server を R 実行エンジンとしてご利用になられる場合には、インストールしてそのままご利用いただけますが、より Enterprise なご利用を想定して、R Server では以下のような使い方が可能です。

1.リモート接続

R Server に R Client よりリモート接続し、R Server 上の R エンジンを利用して処理を実行できます。SSH Client、SSH Server の関係をイメージしていただくと分かりやすいかと思います。

2.リモートからのモデル利用

作成したモデルをリモートから R Client や Applicaition から利用できます。

image

 

これまでの R Server では上記利用を行うために、Deploy R という別コンポーネントを提供し、インストール・セットアップを行っていただいておりましたが、R Server 9.x 以降では本機能を本体に取り込みアーキテクチャを一新しました。上記利用を行う上で R Server のセットアップを行う必要がありますが、先ずは以下コンポーネントがあることを頭に入れておく必要があります。

1.Web Node

 HTTP リクエストを受け付け、後ろの Compute Node に処理を振り分ける役割を担います。リモート接続を行う際には、R Client から HTTP によるリモート接続を受け付けます。その際、認証には AD 認証などと連携するとセキュアな開発環境を提供できます。アプリケーションからデプロイされたモデルを利用する際の HTTP REST エンドポイントの役割も担います。 2.Compute Node

 実際に R 処理を実行するエンジン部分となります。デプロイされたモデルの処理もこのコンポーネントとなり、Web Node 経由でのリクエストを受け付け処理します。 3.Database

 リモート接続のセッション情報や、デプロイされたモデルの情報を格納します。Database として、SQL Server、あるいは PostgreSQL を選択可能です。

clip_image001

1、2、3を単一ノードで構成することも、其々のコンポーネントを個別マシンに構成し、スケールアウト構成を取ることも可能です。なお、本構成をセットアップするために新たに Administration utility というツールが提供されています。Administration utility を起動すると以下のようなメニューが表示されます。

*************************************Administration Utility (v9.1.0)*************************************1. Configure R Server for Operationalization2. Set a local admin password3. Stop and start services4. Change service ports5. Encrypt credentials6. Run diagnostic tests7. Evaluate capacity8. Exit

ここで、構成のセットアップを行うためには 1 を選択します。すると以下のようなサブメニューが表示されます。

------------------------------------Configuration for Operationalization:A. One-box (web + compute nodes)B. Web nodeC. Compute nodeD. Reset machine to default install stateE. Return to main menu

ここで、1 ノードで全てのコンポーネントを動作させるには A を、其々のコンポーネントを構成するためには B or C を選択しセットアップを行います。

なお、Database として既存のインスタンスを使用するように設定するためには Web Node 上の appsettings.json ( 規定では /usr/lib64/microsoft-r/rserver/o16n/9.1.0/Microsoft.RServer.WebNode/appsettings.json) の該当箇所を修正し、Web Node を Administration utility で再起動する必要があります。

再起動し、Web Node が 設定した Database にアクセスできるようになると、Database 内に以下のようなオブジェクトが作成され、セッション情報やデプロイされたモデル情報が格納されることになります。( ここでは Database として SQL Server を利用 )

clip_image001[5]

このほかに、AD/Azure AD 認証を行うためにはこちら、R Client – Web Node 間、Web Node – Compute Node 間の SSL 通信を行うためはこちらの手順にて追加セットアップを行う必要があります。

蛇足ですが、R Server にはユーザーに対するロール ( Owner/Contributor/Reader ) を用意されており、権限付与を容易に行うことができます。(詳しくはこちらをご参照ください。)

 

以上により、一通りの設定ができたとして実際に R Client から R Server にリモート接続を行ってみます。

まず、R Server に対してリモートで作業を行うためには mrsdeploy というパッケージが必要になりますが、この mrsdeploy パッケージを利用するためには Microsoft R Client が必要になります。

以下では Microsoft R Client で mrsdeploy パッケージの remoteLogin 関数を利用することにより R Server に対してリモートセッションを確立しています。

>library(mrsdeploy)> remoteLogin("https://<サーバー名>",+             username = "<ユーザー名>",+             password = "<パスワード>",+             diff = FALSE,+             commandline = TRUE,+             session = TRUE)Your REMOTE R session is now active.Commands:- pause() to switch to local session & leave remote session on hold.- resume() to return to remote session.- exit to leave (and terminate) remote session.REMOTE>

 

リモートセッションが確立されると、デフォルトでは最後の行のような”REMOTE>”プロンプトが表示されます。(remoteLogin でリモートセッションを確立する際にプロンプトを変更することも可能です)

これにより R Server にリモートセッションが確立しましたので、これ以降で実行する処理は全て リモートで接続した R Server 上で実行されることになります。また publishService 関数を使用してモデルをデプロイし、getService 関数にてデプロイしたモデルを利用することも、Web API にて利用することも可能です。

上記のようなリモート開発、デプロイされたモデルのリモートからの利用は、これまでの Deploy R というコンポーネントでも可能でしたがセットアップ含め非常に複雑でした。R Server 9.x 系以降ではセットアップを始め利用に関する操作なども非常にシンプルに行うことができるようになりましたので、新しく進化した R Server を是非触っていただければと思います。