SQL Server Machine Learning Services の R 言語拡張機能
適用対象: SQL Server 2016 (13.x) 以降のバージョン
この記事では、SQL Server Machine Learning Services と SQL Server 2016 R Services で外部 Python スクリプトを実行するための R 拡張機能について説明します。 拡張機能により、次のものが追加されます。
- R 実行環境
- 標準ライブラリとツールを使用した基本の R ディストリビューション
- Microsoft R ライブラリ:
- 大規模な分析のための RevoScaleR
- 機械学習アルゴリズム用の MicrosoftML。 SQL Server 2016、SQL Server 2017、SQL Server 2019 にのみ適用されます。
- SQL Server のデータまたは R コードにアクセスするためのその他のライブラリ
R コンポーネント
SQL Server には、オープンソース パッケージと専用パッケージの両方が含まれています。 基本の R ライブラリは、Microsoft のオープンソース R のディストリビューションによってインストールされます (Microsoft R Open (MRO))。 R の現在のユーザーは、R コードを移植し、ほとんどまたはまったく変更することなく、SQL Server 上の外部プロセスとしてそれを実行できます。 MRO は、SQL ツールとは別にインストールされ、機能拡張フレームワークのコア エンジン プロセスの外部で実行されます。 インストール中に、オープンソース ライセンスの条項に同意する必要があります。 その後、R の他のオープンソース ディストリビューションと同じように、標準 R パッケージを変更することなく実行できます。
SQL Server 2016 (13.x)、SQL Server 2017 (14.x)、SQL Server 2019 (15.x) については、SQL Server では、基本の R 実行可能ファイルは変更されませんが、セットアップによってインストールされたバージョンの R を使用する必要があります。これは、専用パッケージがビルドおよびテストされているバージョンであるためです。 CRAN から取得する可能性のある R の基本ディストリビューションと MRO の違いについては、R 言語との相互運用性と Microsoft R 製品と機能に関するページを参照してください。
セットアップでインストールされた R 基本パッケージのディストリビューションは、インスタンスに関連付けられているフォルダーで見つけることができます。 たとえば、既定の SQL Server インスタンスに R Services をインストールした場合、R ライブラリは既定のこのフォルダー C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\R_SERVICES\library
に配置されます。 同様に、既定のインスタンスに関連付けられている R ツールは、既定でこのフォルダー C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\R_SERVICES\bin
に配置されます。
Microsoft によって並列ワークロードと分散ワークロードに追加される R パッケージには、次のライブラリが含まれます。
ライブラリ | 説明 |
---|---|
RevoScaleR | データ ソース オブジェクトとデータの探索、操作、変換、視覚化をサポートします。 リモート コンピューティング コンテキスト、およびさまざまなスケーラブルな機械学習モデル (rxLinMod など) の作成をサポートします。 これらの API は、大きすぎてメモリに収まらないデータ セットの分析と複数のコアまたはプロセッサでの分散計算を実行するように最適化されています。 RevoScaleR パッケージでは、分析のために使用されるデータの高速移動と格納用の XDF ファイル形式もサポートします。 XDF 形式は、カラム型ストレージを使用する移植可能な形式であり、テキスト、SPSS、ODBC 接続などのさまざまなソースからデータを読み込んで操作するために使用できます。 |
MicrosoftML | 速度と精度のために最適化された機械学習アルゴリズムに加え、テキストとイメージを操作するためのインライン変換も含まれています。 詳細については、SQL Server の MicrosoftML に関するページを参照してください。 SQL Server 2016、SQL Server 2017、SQL Server 2019 にのみ適用されます。 |
SQL Server 2022 (16.x) 以降、R、Python、Java のランタイムは SQL セットアップでインストールされなくなりました。 代わりに、R または Python のカスタム ランタイムとパッケージをインストールします。 詳細については、Windows で SQL Server 2022 Machine Learning Services をインストールする方法に関するページまたは Linux で SQL Server Machine Learning Services (Python と R) をインストールする方法に関するページを参照してください。
SQL Server での R の使用
基本関数を使用して R のスクリプトを作成できますが、マルチプロセッシングを利用するには、RevoScaleR モジュールと MicrosoftML モジュールを R コードにインポートしてから、その関数を呼び出して並列に実行されるモデルを作成する必要があります。
サポートされているデータ ソースには、ODBC データベース、SQL Server、他のソースまたは R ソリューションとデータを交換するための XDF ファイル形式があります。 入力データは、表形式である必要があります。 R 結果はすべて、データ フレームの形式で返される必要があります。
サポートされているコンピューティング コンテキストには、ローカルまたはリモートの SQL Server コンピューティング コンテキストが含まれます。 リモート コンピューティング コンテキストとは、ワークステーションなどの 1 台のコンピューターで起動するコード実行を指しますが、その後、スクリプトの実行はリモート コンピューターに切り替えられます。 コンピューティング コンテキストを切り替えるには、両方のシステムに同じ RevoScaleR ライブラリが用意されている必要があります。
ご想像のとおり、ローカルのコンピューティング コンテキストには、データベース エンジン インスタンスと同じサーバー上での R コードの実行に加え、T-SQL 内のコードまたはストアド プロシージャに埋め込まれたコードの実行も含まれます。 また、リモートのコンピューティング コンテキストを定義することにより、ローカルの R IDE からコードを実行し、SQL Server コンピューター上でスクリプトを実行することもできます。
アーキテクチャの実行
以下の図は、サポートされている各シナリオでの SQL Server コンポーネントと R ランタイムとのやりとりを示しています。そのシナリオとは、SQL Server コンピューティング コンテキストを使用したデータベース内のスクリプトの実行と R コマンド ラインからのリモート実行です。
SQL Server (データベース内) から実行された R スクリプト
"内部" SQL Server から実行される R コードは、ストアド プロシージャを呼び出して実行されます。 したがって、R コードの実行は、ストアド プロシージャを呼び出す任意のアプリケーションによって開始できます。 その後は、SQL Server により、次の図にまとめたように、R コードの実行が管理されます。
- ストアド プロシージャ (sp_execute_external_script) に渡されたパラメーター @language='R' によって、R ランタイムに対する要求が示されます。 この要求は SQL Server からスタート パッド サービスに送信されます。 Linux の場合、SQL ではスタート パッド サービスを使用して、ユーザーごとに個別のスタート パッド プロセスとの通信が行われます。 詳細については、機能拡張アーキテクチャの図を参照してください。
- スタート パッド サービスによって、適切なランチャーが起動されます (この場合は RLauncher)。
- RLauncher が外部の R プロセスを起動します。
- BxlServer と R ランタイムとの連携により、SQL Server とのデータ交換や、作業結果の保存が管理されます。
- SQL サテライトでは、関連するタスクやプロセスについての SQL Server との通信が管理されます。
- BxlServer では、SQL サテライトを使用して、状態と結果が SQL Server に通知されます。
- SQL Server では、結果が取得され、関連するタスクとプロセスが終了されます。
リモート クライアントから実行された R スクリプト
Microsoft R をサポートするリモート データ サイエンス クライアントから接続している場合には、RevoScaleR 関数を使用して、R 関数を SQL Server のコンテキストで実行できます。 これは、上記のワークフローとは異なるものです。次の図に概要を示します。
- RevoScaleR 関数の場合、R ランタイムでリンク関数を呼び出し、それによって BxlServer を呼び出します。
- BxlServer は Microsoft R と共に提供されているもので、R ランタイムとは別個のプロセスで実行されます。
- BxlServer は接続のターゲットを決定し、ODBC を使用して接続を開始して、R データ ソース オブジェクト内の接続文字列の一部として提供された資格情報を渡します。
- BxlServer によって、SQL Server インスタンスへの接続が開かれます。
- R 呼び出しの場合は、スタート パッド サービスが起動され、それによって適切なランチャー (RLauncher) が起動されます。 その後の R コードの処理は、T-SQL から R コードを実行する場合のプロセスと同様です。
- RLauncher により、SQL Server コンピューターにインストールされている R ランタイムのインスタンスへの呼び出しを行います。
- 結果が BxlServer に返されます。
- SQL サテライトでは、SQL Server との通信と、関連するジョブ オブジェクトのクリーンアップが管理されます。
- SQL Server からクライアントに結果が返されます。